Kurs Perl – cz. 2

Druga już część kursu Perla. Pewnie nie mogliście się doczekać ;) Tak jak obiecałem zaczynamy bardziej intensywnie chociaż jeszcze bez szaleńczego tempa. Cały kurs, a przynajmniej większość (bo kto wie ile będzie części) planuję szybko opublikować dlatego kolejne wpisy będą się pojawiać maksymalnie co kilka dni.

1. Wstęp

W dzisiejszej części powiem co nieco o listach i tablicach oraz o operatorach dostępnych w języku Perl. W końcu będzie można coś konkretnego napisać w tym języku ;)

2. Tablice i listy

Poza zmiennymi skalarnymi Perl oferuje także zmienne tablicowe, czyli tablice mówiąc krócej. Z tablicami można się spotkać w chyba każdym nowoczesnym języku programowania więc powinny być Ci znane dlatego tylko dla formalności przypomnę, że tablice służą do przechowywania list.

Listy zaś są uporządkowanym zbiorem wartości skalarnych. W kodzie wartości te oddziela się przecinkiem.

Inaczej mówiąc lista jest to zbiór wartości, a tablica jest zmienną, która ten zbiór przechowuje.

2.1 Listy

Przykład listy:

Lista pozwala na szybkie przypisanie wartości do kilku zmiennych:

Po wykonaniu tej linii zmienna1 będzie miała wartość „Kot„, zmienna2 będzie miała wartość 2, a zmienna3 wartość 3,14. Jak widać w liście nie muszą znajdować się elementy tego samego typu. Nawiasy przy tworzeniu listy są opcjonalne i służą jedynie do zapewnienia pierwszeństwa.

Jeśli przy przypisywaniu po lewej stronie jest mniej zmiennych niż wartości po prawej to nadmiarowe wartości są pomijane. W sytuacji odwrotnej, tzn. kiedy mamy mniej przypisywanych wartości niż zmiennych, które chcemy uzupełnić to w miejsce brakujących wartość wstawiana jest domyślna wartość undef.

Jeśli tworzysz listę z łańcuchami znaków bez spacji to możesz skorzystać z uproszczonego zapisu z wykorzystaniem operatora qw// wtedy przecinki i cudzysłowy są zbędne, a kolejne elementy oddzielane są znakiem spacji:

Ewentualnie znak / możesz zastąpić nawiasami. Po wykonaniu tej linii do każdej zmiennej będzie przypisane jedno imię. Działanie operatora qw// jest takie samo jak użycie pojedynczego cudzysłowu (‚) dlatego korzystając z niego nie można wykorzystać w liście wartości jakiejś zmiennej.

Jeśli chodzi o listy to wszystko co najważniejsze zostało powiedziane. Przejdźmy teraz do tablic żeby móc gdzieś te listy przechowywać.

2.2 Tablice

Tablice tworzy się podobnie jak zwykłe zmienne z tą różnicą, że zamiast znaku $ poprzedza je znak @ lub % zależnie od typu tablicy o czym za chwilę. Jeśli programowałeś w takich językach jak Java czy C++ to musisz zapamiętać, że tablice w Perlu różnią się od tablic z tych języków możliwością dodawania, usuwania elementów, czy czyszczenia całej tablicy.

W Perlu wyróżniamy dwa rodzaje tablic:

  • indeksowane liczbami całkowitymi
  • asocjacyjne

2.2.1 Tablice indeksowane liczbami całkowitymi

Są to znane większości programistów tablice, w których do poszczególnych elementów można się dobrać podając po prostu jego indeks, a więc liczbę mówiącą na jakiej pozycji się on znajduje. Przykład stworzenia takiej tablicy i wypełnienia danymi:

Wykonanie powyższego kodu spowoduje utworzenie tablicy i przypisanie do niej 4-elementowej listy. Jeśli chcesz utworzyć pustą tablicę wystarczy napisać:

Kiedy spróbujesz przypisać tablicę do zmiennej skalarnej przypisana zostanie ilość elementów jaka znajduje się w tej tablicy. Wykonanie poniższego kodu spowoduje, że zmienna ilosc będzie miała wartość 3:

Jak w takim razie wziąć konkretny element z tablicy? Trzeba posłużyć się operatorem []. Elementy w tablicach numerowane są od 0, dlatego jeśli mamy tablicę z 3 elementami to pierwszy z nich ma indeks 0, a ostatni 2. Dodatkowo trzeba pamiętać, że jeśli odnosimy się do konkretnego elementu z tablicy to używamy przed nazwą tablicy znaku $ zamiast @. Poniższy przykład spowoduje wpisanie do zmiennej liczba wartości 2:

2.2.2 Tablice asocjacyjne

Tablice asocjacyjne tym różnią się od poprzednich, że zamiast indeksów całkowitych używają kluczy. Najczęściej kluczem są łańcuch znaków lub liczby. Inną różnicą jest to, że zamiast znaku @ używa się znaku % przy ich deklaracji, a przy wyciąganiu wartości elementu zamiast operatora [] (nawiasy kwadratowe) jest {} (nawiasy klamrowe).

W tablicy asocjacyjnej, zwanej czasami hashem, klucz nie może się powtarzać. Jeśli dodasz nowy element o takim samym kluczu poprzednia wartość zostanie nadpisana.

Tworzenie tablicy asocjacyjnej wygląda następująco:

A więc poszczególne elementy listy definiowane są za pomocą klucza i wartości oddzielonych operatorem =>.

Wyciągnięcie wartości znajdującej się pod wybranym kluczem:

Więc taka sama zasada jak przy zwykłych tablicach – przy wyciąganiu wartości używasz znaku $ zamiast %. Klucz podaje się w nawiasach klamrowych.

Jeśli chcesz dodać nowy element po prostu przypisujesz wartość dla nowego lub istniejącego klucza:

Teraz tablica tab będzie miała dwa elementy z kluczami klucz1klucz2.

Dobra, to tyle jeśli chodzi o tablice. Są to głównie podstawy i zachęcam do samodzielnego kombinowania, bo metoda prób i błędów potrafi wiele nauczyć ;)

3. Operatory

Po zapoznaniu się ze zmiennymi skalarnymi i tablicowymi przyszła pora na operatory. Jak wspomniałem w pierwszej części kursu zakładam, że masz jakieś doświadczenie z programowaniem dlatego nie będę tutaj dokładnie omawiał wszystkich operatorów, niektóre tylko skomentuję jednym zdaniem, w końcu chyba wiesz jak działa ‚+‚? ;)

3.1 Operatory arytmetyczne

Zaczniemy od najszybszej do omówienia grupy.

  • ‚+’  – dodawanie
  • ‚-‚  – odejmowanie
  • ‚*’  – mnożenie
  • ‚/’  – dzielenie
  • ‚%’  – modulo
  • ‚**’  – potęgowanie („2**3” to 2 do potęgi 3, „2**(1/2)” to pierwiastek z 2 (2 do potęgi 1/2))
  • ‚++’  – inkrementacja (zwiększenie o 1)
  • ‚–‚  – dekrementacja (zmniejszenie o 1)

Wszystkie operatory z tej grupy poza inkrementacją i dekrementacją są dwuargumentowe. Inkrementacja i dekrementacja mogą być pre- lub post- czyli albo zostaną wykonane przed wzięciem wartości zmiennej albo po tej operacji.

3.2 Operatory logiczne

Kolejna krótka grupa

  • ‚||’ – lub
  • ‚&&’ – i
  • ‚!’ – negacja

Operatory logiczne wykorzystujemy np. do łączenia kilku warunków. Operator negacji ma wyższy priorytet niż operator porównania.

Perl korzysta z „leniwego oceniania” tzn. jeśli napotka warunek „i” to w przypadku fałszywego wyniku pierwszej części druga nie zostanie w ogóle sprawdzona.

3.3 Łańcuchy znaków

W Perlu łańcuchy znaków łączy się operatorem kropki (.):

Dostępny jest też operator powtarzający: ‚x’. Pozwala powtórzyć n razy tekst znajdujący się przed nim. Poniższy przykład spowoduje wypisanie ‚abcabcabc’:

3.4 Operatory przypisania

  • ‚+=’  – dodanie i przypisanie
  • ‚-=’  – odjęcie i przypisanie
  • ‚*=’  – pomnożenie i przypisanie
  • ‚/=’  – podzielenie i przypisanie
  • ‚%=’  – przypisanie reszty z dzielenia
  • ‚**=’  – spotęgowanie i przypisanie
  • ‚.=’  – złączenie ciągów znaków i przypisanie
  • ‚x=’  – powtórzenie i przypisanie
  • ‚&&=’  – operacja and i przypisanie
  • ‚||=’  – operacja or i przypisanie
  • ‚&=’  – bitowe and i przypisanie
  • ‚|=’  – bitowe or i przypisanie
  • ‚^=’  – bitowe xor i przypisanie
  • ‚~=’  – bitowe not i przypisanie
  • ‚<<=’  – przesunięcie bitowe w lewo i przypisanie
  • ‚>>=’  – przesunięcie bitowe w prawo i przypisanie

3.5 Operatory porównania

Na koniec zostały nam operatory porównania :) Niestety w Perlu są osobne operatory porównujące liczby i osobne operatory porównujące znaki…

Dla liczb nie ma zbyt dużej filozofii:

  • ‚=’  – równe
  • ‚>’  – większe
  • ‚<‚  – mniejsze
  • ‚!=’  – nie równe
  • ‚>=’  – większe lub równe
  • ‚<=’  – mniejsze lub równe
  • ‚<=>’  – porównanie. Zwraca 0 jak obie wartości są takie same, 1 jeśli lewa jest większa i -1 jeśli prawa jest większa

W przypadku łańcuchów znaków operatory są następujące:

  • ‚eq’  – równie
  • ‚lt’  – mniejsze
  • ‚gt’  – większe
  • ‚ne’  – nie równe
  • ‚le’  – mniejsze lub równe
  • ‚ge’  – większe lub równe
  • ‚cmp’  – porównanie

4. Podsumowanie

W drugiej części kursu poznaliśmy kolejne elementy języka. Nudyy prawda? ;) Ale dopiero się rozkręcamy. W następnej części jeszcze szybko przelecimy przez instrukcje sterujące i operacje wejścia/wyjścia, a potem lecimy z wyrażeniami regularnymi :)

Jeśli podoba Ci się seria i chcesz żeby dalej powstawała zostaw Lajka na Facebooku, albo komentarz pod postem ;) Zaś zalajkowanie całego bloga pozwoli Ci być na bieżąco z nowymi postami :)

3 przemyślenia nt. „Kurs Perl – cz. 2

  1. Panie Marku. W kursie brakuje mi paru rzeczy. Wspomina pan o tablicach, ale nie dostajemy informacji np. jak usunąć element z tablicy. Brakuje też wiedzy jak np. w pętli foreach wpisać wszystkie elementy tablicy z podziałem na klucz i wartość.
    Czekam na kolejne części, mając nadzieję, że dowiem się czegoś o klasach. :)

    1. Dziękuję za informację, postaram się sukcesywnie uzupełniać informacje w kolejnych częściach, być może pojawią się też jakieś praktyczniejsze zestawy przykładów ;) Do klas dojdziemy powoli :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *