Programovanie makier v LibreOffice: Globálne premenné

LO.png V tomto článku si vysvetlíme, čo sú to globálne premenné. Taktiež sa dozviete, aké operácie môžete robiť s číselnými, textovými a logickými hodnotami.  

Platnosť premenných

Majú premenné nejaký dosah? Je potrebné stále pri každej procedúre deklarovať premennú?

Majme nejakú premennú v jednej procedúre. Behom deklarácie premennej až po skončení  procedúry je platná premenná. Ak by sme vytvorili ďalšiu procedúru a v nej deklarovali tú istú premennú, už by nemala dosah na pôvodnú procedúru.

Hovoríme o takzvaných lokálnych premenných. Deklarujú sa vo vnútri procedúr. Platia len v mantineli procedúr. Existujú však aj globálne premenné. Tieto premenné deklarujeme mimo procedúr pomocou kľúčových príkazov (resp. slov): Global, PrivatePublic.

Príkaz Global uchováva hodnotu premennej aj po skončení procedúry. Pomocou príkazu Private môžu vidieť premennú všetky procedúry v spoločnom module. Public nemá žiadne obmedzenie, premenná je viditeľná vo všetkých možných knihovniach a modulov.

1. príklad: Jednoduché použitie globálnej premennej Private

Option Explicit REM kontrola, či premenné sú deklarované
Private GlobalPremenna as Integer REM deklarácia premennej
Sub ZmenaGlobalPremenna REM Začiatok procedúry

Print GlobalPremenna REM výpis premennej
Pricitaj REM vykonanie druhej procedúry
Print GlobalPremenna REM výpis premennej
End Sub REM koniec procedúry

Sub Pricitaj REM začiatok procedúry
GlobalPremenna = GlobalPremenna+5 REM premenná sčítaná o hodnotu päť
End Sub REM koniec procedúry

Výstup: prvý print vypíše 0, druhý print 5.

Ako vidíte, globálna premenná Private je viditeľná v rámci celého modulu a môžu s premennou pracovať rôzne procedúry bez potreby stále deklarovať premenné. Čo je v mnohých prípadoch fantastické uľahčenie.

Čo by sa stalo, ak by sme napísali miesto príkazu Private príkaz Global? Správanie by sa zmenilo. V prvom spustení makra by boli výsledky rovnaké. Pri druhom už nie. Výsledok by bol 5 a 10. Ďalší 10 a 15.

Je to z toho dôvodu, že sme nastavili premennú na Global, ktorá uchováva hodnotu premennej aj po skončení celého makra (pozor, nie po skončení procedúry, musia sa vykonať všetky procedúry, aby sa ukončila i hodnota v Private). Po ďalšej a ďalšom zapnutí makra sa hodnota premennej zvyšuje.

Vzťah globálnych a lokálnych premenných

Ak by ste deklarovali globálnu a lokálnu premennú rovnakým názvom, ide o dve odlišné premenné. Nemali by nič spoločne.

2. príklad: Vzťah medzi globálnymi a lokálnymi premennými

Option Explicit REM kontrola deklarácie premenných

Private Vysledok as Double REM deklarácia globálnej premennej

Sub GlobalvsLokal REM začiatok procedúry
Print Vysledok REM vytlač hodnotu premennej
Pricitaj REM vykonanie druhej procedúry
Print Vysledok REM vytlač hodnotu premennej
End Sub REM koniec procedúry

Sub Pricitaj REM začiatok druhej procedúry
Dim Vysledok as Integer REM deklarácia lokálnej premennej
Vysledok = Vysledok + 5 REM sčítanie o hodnotu 5
End Sub REM koniec procedúry

Výsledok z druhého príkladu by mali byť 0 a 0.

Prečo nedošlo k nadobudnutiu hodnoty 5? Pretože lokálna deklarácia skončila s ukončením procedúry a keďže ostala uložená len globálna premenná, ktorá má inicializačnú hodnotu 0.

Operácie s premennými

Programovací jazyk Basic umožňuje vykonávať s rôznymi typmi hodnôt mnoho operácii.

Začnime s číselnými hodnotami. Číselne hodnoty môžeme sčítať, odčítať, násobiť, deliť, umocňovať a určiť zbytok po delení (MOD). Mocniny zapisujeme ako 32 čo je 9.

Pri zápise viacerých operácii, rovnako ako v aritmetike, platí, že najprv sa vypočítavajú mocniny, potom násobenie a delenie a nakoniec sčítanie a odčítanie. Priority operácii môžeme zmeniť pomocou guľatých zátvoriek. Majme napríklad matematický výraz:

90-(5/2+1.5) * 42 sa rovná 26.  Najprv sa vypočítala mocnina, ktorá sa rovná 16, vypočítala sa zátvorka rovná 4, potom sa zátvorka vynásobí už z vypočítanou mocninou a vyjde nám 64. Už len odčítať 90-64 = 26.

Do pozornosti by som uviedol, že desatinné čísla zapisujeme s desatinnou bodkou.

Číselne hodnoty môžeme taktiež porovnávať. Majme príklad: 10 > 5 je pravdivý výraz. 5<=10 je pravdivý. 25 <= 15 je nepravdivý. Číslo 25 nie je menšie ako číslo 15.

Majme výraz Premenna = 88 je pravdivý výraz vtedy, ak by hodnota premennej je rovná 88. Ak by bola hodnota 89 miesto 88, výraz by bol nepravdivý.

Textové hodnoty resp. textové reťazce môžeme zlučovať. Pre zlučovanie textových reťazcov slúžia znaky & a +.

Majme napr. Premenna = “vesmír“ alebo Premenná = “ves“ + “mír“ alebo Premenná = “vesm“ & “ír“. Všetky tri zápisy sú si rovnocenné a dávajú rovnaký výsledok.

Často krát sa budete stretávať s logickými hodnotami typu Boolean. Nadobúdajú dve stavy, TrueFalse. Najčastejšie sa používajú pri podmienených príkazoch, zložené z viacerých výrazov a je z toho možné stanoviť výslednú hodnotu logického výrazu.

V jazyku Basic využívame tri typy operátorov: And, OrNot. Pri And platí, že výsledná hodnota je vtedy pravdivá, ak všetky hodnoty v súčine sú pravdivé. Inak je hodnota nepravdivá. Operátor Or využíva logický súčet. Not operátor neguje výsledné hodnoty logického výrazu. Ak vyjde True, zmení sa na False. A platí i opačné.

3. príklad: Ukážka využitia logických hodnôt

Sub LogicPremenne REM začiatok procedúry
Premenna = "ano" REM priradenie hodnoty premennej 
Vyrok1 = Premenna = "nie" REM inicializácia prvého výroku
Vyrok2 = Premenna = "ano" REM inicializácia druhého výroku
Vyrok = Vyrok1 Or Vyrok2 REM logický súčet

Print "Hodnota vyroku: " + Vyrok REM výpis 
End Sub REM koniec procedúry

Výsledok by mal byť: Hodnota vyroku: -1.

Poďme si to rozobrať. V prvom výroku sa pýtame, či Premenna  má hodnotu nie. V tomto prípade nadobudne prvý výrok hodnotu False. Druhý výrok nadobudne hodnotu True, pretože hodnota Premenna je ano.

Logický súčet je pravdivý, ak aspoň jeden z výrokov je pravdivý. Ak by boli oba nepravdivé výroky, celkový logický výrok je nepravdivý. V ostatných prípadoch je výrok pravdivý. V tomto prípade máme jeden pravdivý a jeden nepravdivý výrok, celkový logický výrok v prípade Or je pravdivý. Výstup je -1. Upozornenie, pre znalejších programátorov môže byť mätúce, že výstupná hodnota pravdivosti je -1. 

Jazyk Basic ale je nastavený tak, že ak True, výstup je -1, ak False, výstup je 0.

Autor používa LibreOffice 5.0

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 3
 

Komentáře

user avatar Petr
Odpovědět
Programovanie makier v LibreOffice: Globálne premenné
21. 10. 2016, 18:15:43
Ahoj. Díky za tvoji práci - pěkné články! Mimochodem z posledního příkladu se mi stalo zajímavé cvičení, protože jsem měl nastaveno na začátku modulu Option Explicit, takže jsem musel přijít na způsob, jak z toho požadovaný výsledek vydolovat :-)

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz