Pętle, warunki i operatory.

Kolejny rozdział poradnika o tym jak programować Unity, w którym wyjaśniamy krok po kroku zasady programowania C#. Dziś omawiamy pętle, warunki i operatory.

W dotychczas przerobionych częściach poradnika omówiliśmy zagadnienia związane z polami klas i wspomnieliśmy co-nieco o metodach. W tej części rozpatrzymy inne funkcjonalności, które umożliwią wprawienie tych danych w ruch, wprowadzenie jakiegoś konkretnego działania do metod i programów ogólnie. Funkcjonalnościami tymi są pętle, warunki i operatory.

 

Operatory

Zaczniemy od operatorów, gdyż mogą one znaleźć swoje zastosowanie zarówno w pętlach, warunkach jak i w innych częściach kodu. Operatorami nazywamy znaki, które dokonują operacji na dwóch zmiennych, generując jakieś rozwiązanie. Rozróżniamy dwie grupy operatorów: arytmetyczne oraz logiczne.

Operatory arytmetyczne:

przypisanie:       a = 3;

mnożenie:          a=a*b;

dodawanie:        a=a+b;

odejmowanie:    a=a-b;

dzielenie:            a=a/b;

operacja modulo (reszta z dzielenia): a=a%b;

Istnieją również operatory inkrementacji oraz dekrementacji, zwiększające lub zmniejszające wartość zmiennej o 1. Zapisuje się je jako ++/–, np.

a++; – zwiększy wartość liczby a o 1.

Dodatkowo każdy z tych operatorów można zapisać skrótem, jeżeli zmienna biorąca udział w działaniu jest jednocześnie zmienną, do której zapisywany jest jego wynik. Tak jak w przykładzie powyżej, gdzie do zmiennej a zapisujemy działanie, w którym bierze udział ona sama.

Poniżej skróty i ich dłuższe odpowiedniki:

a*=b;      –             a=a*b;

a+=b;     –             a=a+b;

a-=b;      =             a=a-b;

a/=b;      =             a=a/b;

a%=b     =             a=a%b;

Operatory logiczne:

Operatory logiczne zwracają zawsze prawdę lub fałsz. Służą do sprawdzenia zależność zachodząca pomiędzy danymi spełnia odpowiedni warunek.

równość:            a==b;

nierówność:       a!=b;

mniejsze:            a<b;

większe:              a>b;

Dodatkowe operatory logiczne sprawdzają wyniki dwóch lub więcej warunków, są to:

and:      &&         –             zwróci prawdę jeżeli oba warunki zwracają prawdę,

przykład:

(a==b) && (b==c) – jeżeli a jest równe b oraz b jest równe c, wtedy wyrażenie zwróci prawdę.

 

or:          ||           –             zwróci prawdę jeżeli chociaż jeden warunek zwraca prawdę,

przykład:

(a==b) ||  (b==c) – jeżeli a jest równe b lub b jest równe c, lub oba te wyrażenia spełniają warunek,  wtedy wyrażenie zwróci prawdę.

 

xor:        ^             –             zwróci prawdę tylko jeżeli jeden z dwóch warunków zwraca prawdę,

przykład:

(a==b) ^  (b==c) – jeżeli a jest równe b lub b jest równe c,  wtedy wyrażenie zwróci prawdę. Gdy oba wyrażenia spełniają warunek, zwróci fałsz.

Jako ciekawostkę dodam, że istnieją jeszcze wersje pojedyncze operatorów and oraz or (& i |). Ich stosowanie poleca się jednak tylko w specjalnych przypadkach, które nas nie dotyczą. Operatory podwójne, które przedstawiłem wyżej sprawdzają warunek tylko wtedy, kiedy jest to konieczne. To znaczy, że w przypadku gdy operator and odkryje, ze wartość pierwszego wyrażenia to fałsz, nie będzie sprawdzał drugiego z nich, gdyż nie ma szans na to, że oba w takim przypadku zwrócą prawdę, i przyjmie wartość fałsz. Analogicznie operator or wykrywając, że pierwsze wyrażenie jest prawdziwe nie sprawdza drugiego, gdyż jego warunek i tak w tym momencie jest już spełniony – od razu zwróci prawdę.

 

Pętle.

Pętle służą do wykonywania pewnej, zadeklarowanej części kodu dopóki spełniony jest założony warunek. Przydają się w momencie gdy konieczne jest wykonanie pewnego działania wielokrotnie, ich wykorzystanie oszczędza czas i miejsce.

 

Pętla FOR.

Budowa podstawowej pętli for wygląda następująco:

for(warunekPoczątkowy ; warunekKońcowy ; działaniePoIteracji){

            Kod wykonywany w czasie pojedynczej iteracji.

}

Jako iterację rozumiemy pojedyncze wykonanie kodu.

Poniżej konkretny przykład, który wypisuje na ekran po kolei liczby od 0 do 10.

 

Jak programować Unity. Poznajemy pętle

 

Jak widać początkowym warunkiem pętli jest liczba 0, od tej właśnie liczby zaczyna się iteracja. Jeżeli liczbą warunkową pętli nie jest żadna istniejąca w programie zmienna, należy ją zadeklarować i od razu zainicjować w pętli, tak jak w przykładzie. Roboczo nazwałem tę zmienną iteracyjną jako i, nadające jej typ int.

Kodem wykonywanym w czasie pojedynczej iteracji jest wypisanie na ekran zmiennej roboczej i. Po każdorazowym wypisaniu (czyli w momencie dojścia do klamry zamykającej) pętla wykonuje działanie występujące po iteracji, czyli w tym przypadku zwiększa wartość zmiennej i o 1 (i++).

Następnie sprawdzany jest warunek dalszego wykonywania. Warunkiem tym w przykładzie jest i<10, co oznacza, że pętla będzie uruchamiać kolejne iteracje do momentu, kiedy zmienna i będzie mniejsza od 10. W przypadku gdy warunek ten nie będzie spełniony (i>=10), pętla przestanie wykonywać iteracje.

Jak można się domyślić iteracji w tym przypadku będzie 10, a wynikiem działania pętli będzie ciąg liczb 0,1,2,3,4,5,6,7,8,9 wypisanych jedna pod drugą.

 

 

Pętla WHILE.

Pętla while występuje w dwóch wariantach. Pierwszy z nich sprawdza warunek pętli przed wykonaniem kodu, drugi warunek ten sprawdza dopiero po jego wykonaniu.

 

Ich prototypy wyglądają w ten sposób:

Wersja sprawdząjąca warunek przed wykonaniem:

while(warunek){

            kod

}

Wersja sprawdząjąca warunek po wykonaniu:

 

do{

            kod

}while(warunek);

 

W przypadku pętli while zwrócić uwagę musimy na dwie istotne rzeczy. Po pierwsze, zmienna warunkowa musi być zadeklarowana przed pętlą, po drugie, należy zadbać o to, żeby wewnątrz kodu wykonywanego w czasie iteracji występowało jakieś działanie na tej zmiennej, gdyż sama kostrukcja pętli tego nie zapewnia. Łatwo więc doprowadzić do takiej sytuacji, gdzie pętla wykonywała się będzie w nieskończoność. Dlatego należy uważać aby przypadkiem nie dopuścić do tego, że warunek będzie wiecznie spełniony. Poniżej zamieszam po jednym przykładzie rzeczywistym dla obu wariantów pętli while.

 

Jak programować Unity. Zastosowanie pętli WHILE.

 

 

Słówka kluczowe BREAK oraz CONTINUE.

Osiągnięcie zamierzonego warunku nie jest jedynym sposobem na zakończenie działania pętli. Czasem zdarza się, że w przypadku wystąpienia jakiegoś działania chcemy przeskoczyć do kolejnej iteracji nie wykonując pozostałego w aktualnej kodu, lub też całkowicie z tej pętli wyjść. Służą do tego dwa wspomniane wyżej słówka, mianowicie:

continue;   –   powoduje przerwanie jedynie pojedynczej iteracji, pomijając pozostały do wykonania kod. Pętla po natrafieniu tego słówka przechodzi automatycznie do kolejnej iteracji.

break;   –   powoduje przerwanie pętli całkowicie.

 

 

Warunki

Na sam koniec funkcjonalność uważana przeze mnie za najważniejszą w programowaniu. Warunki są tym, co sprawia, że program może podejmować decyzje na jakiś temat.

 

Warunek IF.

Warunek if jest bodaj najczęściej wykorzystywaną funkcjonalnością w programowaniu. Jego podstawowa budowa wygląda w ten sposób:

if(warunek){

               kod

}

Co oznacza, że kod zawarty pomiędzy klamrami wykona się tylko wtedy, gdy spełniony zostanie warunek.

 

 

Warunki można rozszerzać słówkiem kluczowym else. I tak:

if(warunek){

               kod1

}else{

               kod2

}

Jeżeli spełniony zostanie warunek, wykona się kod1, a w innym przypadku wykona się kod2.

 

 

Słówko else można też łączyć z warunkiem:

if(warunek1){

               kod1

}else if(warunek2){

               kod2

}

Jeżeli spełniony jest warunek1, wykona się kod1. Jeżeli warunek1 nie jest spełniony – sprawdzamy warunek2, w razie którego spełnienia wykona się kod2. W każdym innym przypadku nie stanie się zupełnie nic.

 

 

Poprawna również jest konstrukcja typu:

if(warunek1){

               kod1

}else if(warunek2){

               kod2

}else{

               kod3

}

 

 

A ilość warunków można zwiększać dowolnie, np:

if(warunek1){

               kod1

}else if(warunek2){

               kod2

}else if(warunek3){

               kod3

}else if(warunek4){

               kod4

}else{

               kod5

}

I tak dalej.

 

Poniżej rzeczywisty przykład:

 

Jak programować Unity. Warunek IF

 

Prościutki blok warunkowy porównujący dwie liczby. W przypadku gdy liczba1 jest większa od liczby2, wypisze na ekran stosowny komunikat. Jeżeli warunek ten nie jest spełniony (liczba1 nie jest większa od liczby2), sprawdzi czy liczba1 nie jest mniejsza od liczby2. Jeżeli ten warunek również nie zostanie spełniony, wtedy program będzie wiedział, że liczby są równe i na ekran przekaże odpowiednią wiadomość.

 

 

 

Instrukcja SWITCH.

Instrukcja switch swoje zastosowanie znajduje tam, gdzie występuje wiele wariantów działania na podstawie wielu wartości pewnej, wspólnej dla nich zmiennej. Jej cechą jest łatwa rozszerzalność, gdyż wystarczy dopisać następny przypadek, bez żadnej ingerencji w istniejący już kod.

Prototyp:

switch(zmienna){

               case wartosc1Zmiennej : 

                              kod1

               break;

               case wartosc2Zmienne  :

                              kod2

               break;

               case wartosc3Zmiennej :

                              kod3

               break;

               default :             

                              kod4

               break;

}

 

Myląca może być dziwna konstrukcja. W przypadku instrukcji switch bloków kodu do wykonania w przypadku wystąpienia konkretnej wartości zmiennej warunkowej nie spajamy ze sobą za pomocą klamer ({}) jak dotychczas, natomiast rozpoczynamy dwukropkiem a kończymy słówkiem break.

Instrukcja switch sprawdza jaką wartość ma zmienna zmienna.

Jeżeli zmienna= wartosc1Zmiennej , to wykona się kod1. Gdy zmienna= wartosc2Zmiennej , wykonany zostanie kod2, a w przypadku gdy zmienna= wartosc2Zmiennej  – kod3. Jeżeli żaden z nich nie jest prawdziwy, instrukcja wykona kod z sekcji default , która pełni podobną rolę jak instrukcja else  w warunku IF-ELSE.

 

Poniżej jeszcze przykład rzeczywisty:

 

Jak programować Unity. Instrukcja SWITCH

 

Co w przypadku gdyby naukowcy wymyślili trzynasty miesiąc? Wystarczy dopisać kolejny przypadek, gdzie miesiac==13 i odpowiednio go obsłużyć. Proste i wygodne.

Przejdź do poradnika Unity3D:

Unity3D – poradnik krok po kroku.

Podziel się wiedzą z innymi

Komentarz do postu