LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> 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 7070×

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

pridej.cz

 

DISKUZE

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ů

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ář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze