Perl (6) - Funkce II
V dnešním díle se především dozvíme jaký je rozdíl mezi lokálními a globálními proměnnými a doplníme
ještě nějaké další zkutečnosti o funkcích.
16.11.2004 15:00 |
Josef "jose" Kadlec
| Články autora
| přečteno 9848×
Pro nás existovaly zatím pouze globální proměnné. To jsou proměnné, které mají prakticky platnost v
každé části programového kódu. Takže ať jsme inicializovali proměnnou uvnitř nebo vně funkce (platí
i pro jiné entity), tak jsme k proměnné mohli přímo přistupovat odkudkoliv - tzn. mohli jsme ji
například vypsat zase vně nebo uvnitř funkce.
Existují však ještě tzv. lokální proměnné - tzn. proměnné s omezenou platností. Tyto proměnné se
definují ve funkcích a mají platnost právě pro dobu běhu dané funkce. Tzn. že k nim nemůžete přímo
přistupovat z vnějšku funkce - a ani z funkce, která je do této funkce vnořena (uvidíme, že toto
neplatí pro tzv. semiprivate variables). Jistě mi dáte za
pravdu, že používání lokálních proměnných výrazně zvýší čistotu a zpřehlední strukturu programového
kódu. A kdo používá funkce, měl by určitě používat i lokální proměnné. Docílí tím vlastně toho, že
funkce budou skutečně úplně samostatné entity, ke kterým lze přistupovat pouze pomocí argumentů.
Lokální proměnnou zadefinujeme modifikátorem my a to v těle funkce např. takto:
my
$var; # jedna lokalni promenna
my ($var1,
$var2); # dve lokalni promenne
my
$var = "false"; # jedna inicializovaná lokální proměnná
Dále nutno říci, že globální a lokální proměnné mezi sebou nekolidují. Takže lze definovat lokální
proměnnou se stejným názvem jako již existující globální proměnná - a naopak. Dokažme si na
příkladu.
#!/usr/bin/perl -w
$var = "false";
print "Hodnota $var pred volanim funkce fce()
je: $var.\n";
&fce();
print "Hodnota $var po volanim funkce fce() je:
$var.\n";
sub fce
{
my $var;
$var = "true";
print "Hodnota $var uvnitr funkce fce() je:
$var.\n";
}
Pokud tento skript spustíme, měli bychom zjistit, že s globální proměnnou $var se vůbec
nic nestalo ( tzn. nezměnila se její hodnota). Přesvědčíme se na výpisu:
bash-2.05b$ ./test.pl
Hodnota $var pred volanim funkce fce() je: false.
Hodnota $var uvnitr funkce fce() je: true.
Hodnota $var po volanim funkce fce() je: false.
Důkaz sporem by mohl vypadat tak, že proměnná $var nebude definována jako lokální.
Potom by výpis vypadal takto:
bash-2.05b$ ./test.pl
Hodnota $var pred volanim funkce fce() je: false.
Hodnota $var uvnitr funkce fce() je: true.
Hodnota $var po volanim funkce fce() je: true.
Dále si řekneme něco o již zmíněných "semiprivate variables" - takže něco ve smyslu polo-lokální
proměnné. Tyto proměnné se definují modifikátorem local . Rozdíl oproti proměnným
definovaných modifikátorem my je ten, že tyto proměnné mají svojí platnost i pro funkce
vnořené. Pro lepší pochopení ukáži opět příklad:
#!/usr/bin/perl -w
$var = "false";
&fce2();
&fce();
&fce2();
sub fce
{
local $var = "true";
&fce2();
}
sub fce2
{
"Hodnota \$var je:
$var.\n";
}
Výpis tohoto skriptu bude vypadat takto:
bash-2.05b$ ./test.pl
Hodnota $var je: false.
Hodnota $var je: true.
Hodnota $var je: false.
První volání funkce fce2() vypíše hodnotu globální proměnné $var .
Následuje volání funkce fce() , kde se definuje polo-lokální proměnná $var a
změní se její hodnota a následně se ještě v těle této funkce volá fce2() , která má
hodnotu proměnné vypsat. Vidíme, že se předala změněná hodnota. Pokud bychom definovali lokální
proměnnou modifikátorem my , tak by se tato změněná hodnota nepředala a tudíž by
obsahovala původní hodnotu. Čili pokud bychom užili místo modifikátoru local ,
modifikátor my , tak by výpis po spuštění skriptu vypadal takto:
bash-2.05b$ ./test.pl
Hodnota $var je: false.
Hodnota $var je: false.
Hodnota $var je: false.
Doufám, že v této chvíli máte v lokálních proměnných jasno a budete je hojně používat - opravdu se to vyplatí.
Verze pro tisk
|
Nejsou žádné diskuzní příspěvky u dané položky.
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|