Najdłuższą i najtrudniejszą część kursu mamy już za sobą.
Znamy wszystkie rodzaje danych, ale nadal nie potrafimy tworzyć
prawdziwych skryptów. Nie powiedzieliśmy bowiem jeszcze o tym, co w każdym języku programowania
musi być i jest bardzo istotne. Mowa o instrukcjach sterujących przebiegiem sterowania
kodu.
4.1. Instrukcja warunkowa if
Instrukcja warunkowa pozwala wykonać jakiś fragment kodu pod jakimś warunkiem.
Bloków elseif może być tyle, ile chcesz.
Może też nie być wcale i wtedy zostanie samo if i else.
Może też zostać samo if.
Instrukcja warunkowa wykona fragment kodu tylko jeśli podany warunek zostanie spełniony.
W przeciwnym wypadku wykona kod zawarty w else.
Jako warunek można podać dowolne wyrażenie zwracające ostatecznie wartość logiczną
wg takiej samej składni, jak w poleceniu expr.
Ważne jest by pamiętać o pisaniu nawiasów klamrowych dokładnie tak jak w przykładzie powyżej.
Jeśli spróbujesz przenieść je do osobnych wierszy, powstanie błąd.
Poniższy przykład sprawdza zakres podanej liczby:
4.2. Instrukcja wyboru switch
Jeśli chcesz podjąć jedną z wielu akcji w zależności od jakiejś wartości, lepszym
wyborem będzie użycie instrukcji wyboru :)
Instrukcja switch wybiera jedną z dostępnych możliwości dopasowując
podaną wartość do wartości zawartych w jej wnętrzu i w zależności od tego wykonuje
podany kod. Jeśli podana wartość nie pasuje do żadnej sprawdzanej, wykonany zostanie
kod podany jako default, jeśli taki istnieje (nie trzeba go umieszczać).
4.3. Pętle
Pętla pozwala wykonać zawarty w niej fragment kodu wiele razy, np.
określoną liczbę razy, dla każdego elementu listy lub najczęściej tyle razy,
ile potrzeba by podany warunek sprawdzany przed lub po każdej iteracji pętli
zwrócił określoną wartość logiczną.
Istnieje kilka rodzajów pętli:
4.3.1. Pętla while
W każdej iteracji najpierw sprawdzany jest warunek, a następnie wykonywany kod,
o ile warunek jest prawdziwy (zwraca 1).
Ponieważ warunek sprawdzany jest na początku, istnieje możliwość że będzie on
fałszywy już za pierwszym razem i kod zawarty w pętli nie wykona się ani razu.
Powyższy kod wypisuje kolejne liczby od 0 do 9.
4.3.2. Pętla for
<instrukcja-inicjalizacji>
To instrukcja, która wykonuje się raz, podczas uruchamiania pętli.
Działa tak samo, jak gdybyś postawił ją tuż przed pętlą jako osobną instrukcję.
<warunek>
To warunek sprawdzany przed każdą iteracją pętli.
Kod wykonywany jest tylko, jeśli jest on spełniony.
<instrukcja-iteracji>
To instrukcja, która wykonuje się po każdej iteracji pętli.
Najczęściej pętlę tą wykorzystuje się w podany niżej sposób,
z użyciem tzw. zmiennej sterującej. Jej wartość jest inicjalizowana
w instrukcji inicjalizującej, sprawdzana w warunku, zmieniana
(np. inkrementowana) w instrukcji iteracji i wykorzystywana w kodzie.
Nietrudno się domyślić, że kod ten robi dokładnie to samo, co przykład z poprzedniej pętli.
4.3.3. Pętla foreach
Pętla ta pozwala iterować po kolejnych elementach listy.
Dla każdego elementu podanej listy wykonywany jest podany kod,
a wartość tego elementu na czas jego wykonania przypisywania jest
podanej zmiennej.
Pętla foreach doskonale nadaje się także, oprócz list, do iteracji po
elementach tablicy. Wystarczy otrzymać listę kluczy tablicy poleceniem
array names.
4.3.4. Polecenia sterujące pętlami
break
To polecenie przerywa wykonywanie pętli i powoduje natychmiastowe wyjście z niej.
continue
To polecenie powoduje natychmiastowe rozpoczęcie nowej iteracji pętli.
4.4. Instrukcja obsługi błędów catch
Jak sama nazwa wskazuje, instrukcja ta służy do łapania.
Zapewne podczas programowania w TCL już nieraz spotkałeś się z błędami.
Niezłapany błąd powoduje przerwanie wykonywania kodu lub, jeśli to był kod
wykonywany podczas ładowania bota, całkowity jego wysyp.
Teraz nauczymy się, jak błędy można łapać.
Podany kod jest wykonywany, ale wystąpienie błędu nie powoduje przerwania dalszego
wykonywania skryptu.
Instrukcja ta zwraca 0 jeśli podczas wykonywania kodu nie wystąpił błąd lub kod błędu,
jeśli błąd wystąpił.
Wyłapywane są wyłącznie błędy podczas wykonywania.
Instrukcja ta nic nie pomoże na błędy składniowe języka TCL uniemożliwiające kompilację
jego kodu.
4.5. PROJEKT - reklama
Ta część była krótka, więc za to projekt będzie długi :)
Przedstawię skrypt do okresowego wyświetlania reklam na wybranym kanale.
Analizę tego kodu pozostawiam tobie jako zadanie.