Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilOtto Tábor
1
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě potřeby se volají Hlavní výhody –šetří práci, protože se píšou jen jednou –jsou při každém volání stejné –přehlednost hlavního programu
2
Kdy? Když určitou část programu použijeme více než jednou –např. tisk hlavičky na každou stránku výstupu Když chceme učinit program přehlednějším –program může v ideálním případě vypadat třeba takto: #!/usr/bin/perl nastaveni(); cteni_vstupu(); vlastni_vypocet(); vystup();
3
Jak? Definice podprogramu –klíčové slovo sub –jméno podprogramu (stejná pravidla jako pro proměnné, pole a asoc. pole) –blok s kódem (tělo podprogramu) sub vystup { print “Toto je výstupem podprogramu vystup.\n”; } Volání podprogramu: &vystup; nebo vystup(); (radši)
4
Kam? Téměř kamkoli Podprogramy se obvykle zapisují NA KONEC hlavního programu Mohou se napřed deklarovat sub vystup; a vlastní kód zapsat až později (na konec). Pak se mohou volat bez závorek, ale psaní závorek je dobré, protože z toho je jasně vidět, že jde o podprogram.
5
Funkce x podprogram Obecně Funkce dostane určitý počet argumentů (může být i nulový) a na konci vydá výstupní hodnotu – může být definovaná uživatelem, nebo součástí jazyka (takovým se někdy říká operátory – např. substr) Podprogram je podobný funkci, ale definuje ho vždy uživatel a nemusí vydat žádnou výstupní hodnotu, jen něco udělá. V Perlu – rozdíl nezávisí na výstupních hodnotách Funkce a operátory poskytuje Perl. Podprogramy (skripty) píše uživatel.
6
Předávání parametrů Parametry se předávají podprogramům stejně jako funkcím, tedy v závorce Parametrů může být libovolně mnoho Parametry se přiřadí do speciálního pole @_, které se automaticky vytvoří pro každý podprogram. soucet(34, 2345, 98, 100); soucet(5..15); sub soucet { my $soucet = 0; foreach $k (@_) {$soucet += $k;} print "Součet čísel je $soucet.\n"; }
7
Výstupní hodnota Každý podprogram má výstupní hodnotu - hodnota posledního příkazu, který je v něm proveden. –tedy v našem příkladu je to výsledná hodnota $soucet Může se napsat jako poslední příkaz podprogramu Nebo pomocí return (nemusí být poslední v bloku) Volání: sub soucet { my $soucet = 0; foreach $k (@_) {$soucet += $k;} $soucet; } return $soucet; $vysledek = soucet(34, 2345, 98, 100);
8
Lokální a globální proměnné Podprogram je zapsán v (alespoň jednom) bloku Uvnitř podprogramu je rozumné používat lokální proměnné deklarované jako my Jestliže Perl nenajde nějakou proměnnou v příslušném bloku, hledá globální proměnnou stejného jména deklarace our – není třeba, jen když je use strict; $a = "Pepa"; $b = podprogram(4); print $a; # co se vytiskne? my $a = "Pepa"; $b = podprogram(4); print $a; # co se vytiskne?
9
Lokální proměnné – deklarace local mylocal my $my = "A"; our $local = "B"; b(); a(); b(); sub a { my $my = "C"; local $local = "D"; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; } AB CD AD AB sub a : sub b : AB
10
Lokální proměnné – deklarace local mylocal my $my = "A"; our $local = "B"; b(); a(); b(); sub a { $my = "C"; local $local = "D"; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; } CB CD CD AB sub a : sub b : AB
11
Lokální proměnné – deklarace local mylocal my $my = "A"; our $local = "B"; b(); a(); b(); sub a { my $my = "C"; local $local; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; } AB C A AB sub a : sub b : AB
12
my $my = "A"; our $local = "B"; b(); a(); b(); sub a { my $my = "C"; local $local = "D"; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; } Lokální proměnné – deklarace local odložení hodnoty proměnné {$my = "A";} $local = "B"; b(); a(); b(); sub a { my $my = "C"; local $local = "D"; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; } my $my = "A"; our $local = "B"; b(); a(); b(); sub a { my $my = "C"; local $local; b(); } sub b { print “MY: $my\n"; print "LOC: $local\n"; }
13
Pole @_ Kromě nejjednodušších příkladů není vhodné používat pole @_ přímo. Vyplatí se přiřadit jednotlivé prvky pole vlastním (lokálním) proměnným sub jmeno_zkratka { my ($jmeno, $prijmeni) = @_; my $jm = substr($jmeno,0,1); return ($jm, ". ", $prijmeni); } my $jmeno = shift(@_); my $prijmeni = shift(@_); Jiné způsoby (Podobně se zachází s parametry programu – pole @ARGV) my $jmeno = $_[0]; my $prijmeni = $_[1];
14
Rekurze Pes jitrničku sežral Podprogram volá sám sebe –hlídat parametry –hlídat konec, aby nedošlo k nekonečnému vnořování Příklady ?
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.