PERL – podmienený príkaz if, cykly a asociatívne pole

21. června 2000

Minule sme sa niečo dozvedeli o inštalácii Perlu, skalárnych premenných, poliach a prácou s nimi. Dnes sa budeme zaoberať asociatívnymi poliamy, ale ešte predtým sa pozrieme na podmienený príkaz if a cykly.

Podmienený príkaz if
Podmienený príkazom sa rozumie príkaz, ktorý vyhodnotí podmienku. Ak je podmienka splnená pokračuje sa v bloku, ktorý je určený len pre tento prípad. Ak však podmienka nieje splnená, blok kódu sa vynechá a pokračuje sa za ním. Podmienka môže mať hodnotu True (pravda) alebo False (nepravda). False má hodnotu 0 a True má nenulovú hodnotu – všetky kladné a záporné čísla. Nasledujúca tabulka ukazuje porovnávanie hodnôt pre zistenie pravdivosti podmienky:

$a == $b # $a je číselne rovné $b $a != $b # $a nieje číselne rovné $b $a > $b # $a je väčšie ako $b $a >= $b # $a je väčšie alebo rovné $b $a < $b # $a je menšie ako $b $a <= $b # $a je menšie alebo rovné $b $a eq $b # reťazec $a je rovnaký ako $b $a ne $b # reťazec $a nieje rovnaký ako $b ($a && $b) # $a aj $b ($a || $b) # $a alebo $b (!$a) # opak $a, resp. je $a False?

Všimnite si, že pre porovnávanie premenných sa používajú matematické znamienka ak premenné sú čísla a ak reťazce tak eq a ne. Pozor pri porovnávaní čísiel na ==.

Teraz si ukážeme ako to funguje v praxi:

$i = 3;
if ($i == 3){
print ‚$i ma hodnotu 3‘;
}

Ak chceme ošetriť prípad, kedy podmienka nieje splnená, ale musíme ponechať prípad aj keď je, máme na pomoci príkaz else:

if ($i == 3){
print ‚$i ma hodnotu 3‘;
} else {
print ‚$i nema hodnotu 3‘;
}

Ešte zaujímavejší prípad nastane, keď chceme ošetriť prípady kedy bude mať $i aj iné hodnoty ako 3:

if ($i == 3){
print ‚$i ma hodnotu 3‘;
} elsif ($i == 2){
print ‚$i ma hodnotu 2‘;
} elsif ($i == 1){
print ‚$i ma hodnotu 1‘;
} else {
print ‚hodnota $i nieje v osetrena‘;
}

Cykly
Čo by bol Perl za jazyk, keby nemal cykly? Neplnohodnotným skriptovacím jazykom, ktorý by nikto nepoužíval. Našťastie tomu tak nieje. V cykle sa opakajú príkazy ak/kým je splnená nejaká podmienka.

  • for
    Príkaz for pozná určite každý. Má podobnú syntaxu ako v Céčku.


    for (initialise; podmienka; inc)
    {
    príkaz;
    príkaz;

    }

    Pred začiatkom cyklu sa vykoná initialise. Potom sa porovná podmienka. Ak je splnená pokračuje sa v príkazoch medzi zloženými zátvorkami. Potom prebehne príkaz inc. Porovná sa podmienka…

    for ($i=1; $i<=5; $i++) {
    print „$i\n“;
    }

    Tento príklad vypíše čísla od 1 po 5.

  • while
    Príkaz while vykonáva príkazy pokým je splnená podmienka:


    $i = 1;
    while ($i < 5) {
    print „$i\n“;
    $i++;
    }

    Vypíše čísla od 1 po 4.

  • until
    Until vykonáva blok príkazov pokým nezačne platiť podmienka:


    $i = 1;
    until ($i == 5) {
    print „$i\n“;
    $i++;
    }

    Příklad vypíše čísla od 1 po 4.

  • do while, do until
    Spojenia s do sa líšia tým, že príkazy sa vykonajú minimálne raz, ale bez do sa nemusia ani raz:


    do {
    print „$i\n“;
    $i++;
    } while ($i == 5);

  • foreach
    Cyklus foreach slúži na získanie všetkých hodnôt pola:


    @jedla = („klobasa“, „horcica“, „chlieb“);
    foreach $jedlo (@jedla) {
    print „$jedlo\n“;
    }

  • Prerušenie cyklu
    Na prerušenie cyklu používame dva príkazy. Ak chceme aby cyklus úplne skončil, použijeme príkaz last. Ak však chceme aby sa cyklus zastavil a preskočil na ďalšie kolo použijeme next.


    $i = 10;
    until ($i<1) {
    last if $i==15;
    print „$i\n“;
    $i++;
    }

    Všimnite si obrátené poradie podmienky: príkaz if podmienka;. Je to to isté ako if podmienka príkaz. Zastavenie cyklu má využitie, keď sa chceme poistiť napríklad pred príliž dlhým opakovaním alebo pred nekonečnosťou cyklu.

    Asociatívne pole
    Asociatívne pole je špeciálny prípad pola, kde sa hodnoty neukladajú podľa indexov, ale podľa klúča. To znamená, že asociatívne pole vytvára páry klúč=hodnota. Ako sme sa už minule dozvedeli, iná premenná má inú syntaxu. Pred asociatívne pole sa dáva percento (%). Prvky sa do asociatívneho pola ukladajú ako do obyčajného: %asoc_pole = („kluc1“, „hodnota1“, „kluc2“, „hodnota2“, „kluc3“, „hodnota3“); Určite ste pochopili, že každý druhý prvok je hodnotou predchádzajúceho prvku. Pre prehladnosť si každý pár napíšte do iného riadku. Nasledujúci príklad nám ukáže čítanie hodnôt z asociatívneho pola:

    %cennik = („klobasa“, 50,
    „horcica“, 15,
    „chlieb“, 8);
    print $cennik{‚klobasa‘};
    print $cennik{‚horcica‘};
    print $cennik{‚chlieb‘};

    Opäť vidíme, že pred pole sa dáva $, pretože už ide o skalárnu premennú. Taktiež pri čítaní z asociatívnych polí sa klúč nachádza v zložených zátvorkách. Ako sme si v prvom príklade ukázali, zadávanie hodnôt do asociatívneho pola je také isté ako do obyčajného pola. Z toho vyplýva, že prvky do asociatívneho pola môžeme načítať aj z obyčajného pola:

    @pole = („klobasa“, 50, „horcica“, 15, „chlieb“, 8);
    %cennik = @pole;

    To isté platí aj o načítaní z asociatívneho pola do obyčajného. Pri vymieňaní prvkov pola si dajte pozor na poradie, pretože prvky v asociatívnom poli niesú zoradené v takom poradí ako ste ich tam úložili. foreach v asociatívnych poliach V obyčajných poliach sa v cykle foreach vypisoval každý prvok. U asociatívnych poliach by to nemalo výzanam. Preto sa v tomto cykle pridáva slovo keys alebo values:

    %cennik = („klobasa“, 50,
    „horcica“, 15,
    „chlieb“, 8);
    foreach $jedlo (keys %cennik) {
    print „$jedlo stoji $cennik{$jedlo} Sk.\n“;
    }

    Postupne sa vypíšu jedlá a ich cena. Ďalší príklad ukazuje využitie values:

    $platit = 0;
    foreach $jedlo (values %cennik) {
    $platit += $jedlo;
    }
    print „Budete platit $platit Sk.“;

    Tento príklad vám to spočíta.

    Starší komentáře ke článku

    Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

  • Štítky: Články

    Mohlo by vás také zajímat

    Nejnovější

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *