Główne
    Aktualności

    Projekty
    GirLS
    Buffy
    Gepard
    Drzewko
    Kucharek
    Pozostałe

    Programowanie
    C++
    Java
    PHP

    Inne
    Współpraca
    Kontakt
 Kurs PHP 
Instrukcje warunkowe


O dokonywaniu wyborów
W programowaniu możliwość dokonywania wyborów jest bardzo ważna. Dzięki temu nasz program (w tym przypadku skrypt) nie jest prostolinijny, a rozgałęzia się. Możemy uzależnić wykonanie danych instrukcji od konkretnych zmiennych, wyników funkcji czy informacji dostarczonych nam z zewnątrz. Sprawdzanie warunków to operacja, która wykonywana w programie jest najczęściej, ponieważ tak naprawdę wszystko od ich wyników zależy. Zapoznamy się teraz z kilkoma instrukcjami pozwalającymi właśnie uzależnić działanie naszego kodu od spełnienia lub niespełnienia danego warunku.

if
Jest to podstawowa instrukcja, której będziesz używał najczęściej. Pozwala na sprawdzenie czy dane wyrażenie jest PRAWDĄ czy FAŁSZEM. Jej składnia jest następująca:

  if(wyr)
    inst;


Jeżeli wyrażenie wyr jest PRAWDĄ to wykonana zostanie instrukcja inst. W przeciwnym wypadku instrukcja ta zostanie pominięta. Wyrażenie wyr może być dowolnym wyrażeniem matematycznym, logicznym, wartością zwracaną przez funkcję, czymkolwiek co w wyniku da PRAWDĘ lub FAŁSZ. Może to być również liczbą, wtedy zero traktowane jest jako FAŁSZ, a każda inna liczba jako PRAWDA. Jeśli chcemy przy spełnieniu danego warunku wykonać więcej niż jedną instrukcję, to musimy je wszystkie objąć w klamry {}. A teraz mały przykładzik:

<?php
  $a = 4;
  $b = 5;

  if($a - $b < 0)
    echo("Różnica liczb ".$a." i ".$b." jest ujemna.");
?>


Ponieważ odejmowanie ma większy priorytet niż porównanie, to najpierw zostanie obliczona różnica zmiennych $a i $b, a następnie sprawdzamy czy jest ona mniejsza od zera. Jeśli porównanie będzie PRAWDĄ, czyli różnica będzie ujemna, to wykona się instrukcja echo(). W naszym przykładzie widzimy, że warunek ten jest prawdziwy, ale gdybyśmy tak dobrali $a i $b, żeby różnica była nieujemna, to instrukcja echo() nie wykonałaby się. Z lekcji o operatorach wiemy, że kolejnością ich wykonywania możemy sterować za pomocą nawiasów (), tak jak w matematyce. Spójrzmy więc na następujący przykład:

<?php
  $a = 4;
  $b = 5;

  if($a - ($b > 0))
    echo("Warunek został spełniony.");
?>


Dzięki nawiasom najpierw wykona się sprawdzenie czy $b jest większe od zera. Wynikiem tego porównania będzie PRAWDA (nie mówiłem o tym, ale jeśli trzeba użyć wartości PRAWDA/FAŁSZ w wyrażeniu matematycznym to PRAWDA traktowana jest jako jedynka, a FAŁSZ jako zero), czyli jedynka. Następnie ta jedynka zostanie odjęta od $a i da nam to trzy. Ponieważ trójka jest różna od zera, więc jest PRAWDĄ, czyli wyrażenie w instrukcji if jest PRAWDĄ, czyli instrukcja echo() wyświetli podany napis.

if...else
if...else jest rozszerzoną wersją if. Jej składnia jest następująca:

if(wyr)
  inst1;
else
  inst2;


Działanie jest takie, że jeśli wyrażenie wyr jest PRAWDĄ, to wykona się instrukcja inst1, w przeciwnym wypadku wykona się instrukcja inst2. I znów mała demonstracja:

<?php
  $a = 4;
  if($a % 2 == 0)
    echo("Liczba ".$a." jest parzysta.");
  else
    echo("Liczba ".$a." jest nieparzysta.");
?>


Jak już wiemy operator % wyciąga resztę z dzielenia danej liczby przez drugą. Tutaj obliczamy resztę z dzielenia liczby $a przez dwa i sprawdzamy czy jest ona równa zero. Jeśli tak jest to liczba $a jest parzysta i wyświetlamy odpowiedni napis, jeśli jednak tak nie jest to wyświetlamy inny napis (liczba nie jest parzysta). Czyli pokazany zostanie pierwszy albo drugi napis w zależności od wartości liczby jaka będzie się kryć w zmiennej $a.
Trzeba również wiedzieć, że instrukcje if lub if...else można dowolnie w sobie zagnieżdżać, czyli umieszczać w instrukcji if inne instrukcje if. I do tego również przykład, już trochę bardziej rozbudowany:

<?php
  $kolory[0] = "karo";
  $kolory[1] = "kier";
  $kolory[2] = "pik";
  $kolory[3] = "trefl";
  ...   //w tym miejscu zmiennej $wybrany przypisujemy losowy kolor z tablicy $kolory
  if($wybrany[0] == "k")
  {
    echo("Wybrany kolor to kier lub karo.");
    if($wybrany[1] == "a")
      echo("Wybrany kolor to na pewno karo");
    else
      echo("Wybrany kolor to na pewno kier");
  }
  else if($wybrany[0] == p)
    echo("Wybrany kolor to na pewno pik");
  else
    echo("Wybrany kolor to na pewno trefl");
?>


Na początku widzimy tablice napisów. Zawiera ona nazwy kolorów używanych w kartach. Następnie w tajemniczy sposób wybieramy jeden kolor, ale niestety nie wiemy jaki wybraliśmy (już niedługo będziemy potrafili losować jedną z kilku wartości, a na razie przyjmijmy, że tak się stało). Żeby sprawdzić jaki kolor został wylosowany wykonujemy serię instrukcji warunkowych (oczywiście można by to sprawdzić w prostszy sposób (porównując całe napisy), ale przyjmijmy taką metodę na potrzeby dydaktyczne). Najpierw sprawdzamy czy pierwszy znak koloru to litera 'k' (przypominam, że w PHP elementy tablicy numeruje się od zera). Jeśli to PRAWDA, to wiemy już, że wylosowany kolor to kier lub karo. Aby upewnić się do końca porównujemy drugą literę. Jeżeli natomiast pierwsza litera to nie jest 'k', to sprawdzamy czy może jest to 'p'. Jeśli tak to mamy pik, a jeśli nie to innego wyjścia już nie ma - to musi być trefl.
Warto tu zauważyć, że ostatnie słowo else należy do instrukcji if porównującej czy pierwsza litera to 'p', wbrew temu co mogło się niektórym z Was wydawać. A zostało to zapisane w taki sposób, ponieważ tak się właśnie raczej pisze, szczególnie gdy mamy więcej warunków do sprawdzenia i kiedy wiemy, że prawdziwość jednego z nich wyklucza możliwość bycia PRAWDĄ któregokolwiek z następnych.

switch
Ostatnią instrukcją wyboru, którą poznamy jest switch. Służy ona do wyboru jednej możlwości spośród wielu dostępnych. Jej składnia jest następująca:

switch(wyr)
{
  case opcja1:
    inst1;
    break;
  case opcja2:
    inst2;
    break;
  ...
  default:
    inst_inna;
}


Zasada działania jest prosta. Wyrażenie wyr jest porównywane z każdą opcją opcja1, opcja2 i tak dalej, aż do momentu gdy wyrażenie wyr będzie równe jakiejś opcji. Wtedy wykonywane są wszystkie instrukcje od tej opcji aż do końca instrukcji switch lub do napotkania instrukcji break. Opcja default jest nieobowiązkowa i do niej zostanie przekazane sterowanie, jeśli żadna z opcji nie będzie się równać wyrażeniu wyr. Każda z opcji jest wyrażeniem. W instrukcji switch jeśli chemy wykonać więcej niż jedną instrukcję dla danej opcji, to nie musimy obejmować ich klamrami, ponieważ wystarczającą gwarancję daje nam instrukcja break jeśli umieścimy ją na końcu każdej opcji. Gdybyśmy chcieli użyć instrukcji switch, żeby wykryć jaki kolor został wylosowany w poprzednim przykładzie, to wyglądałoby to np. tak:

<?
  $kolory[0] = "karo";
  $kolory[1] = "kier";
  $kolory[2] = "pik";
  $kolory[3] = "trefl";
  ...   //w tym miejscu zmiennej $wybrany przypisujemy losowy kolor z tablicy $kolory
  switch($wybrany)
  {
    case "karo":
      echo("Wylosowano karo");
      break;
    case "kier":
      echo("Wylosowano kier");
      break;
    case "pik":
      echo("Wylosowano pik");
      break;
    case "trefl":
      echo("Wylosowano trefl");
      break;
    default:
      echo("Wylosowano nieznany kolor!");
  }
?>


Myślę, że nie trzeba tego komentować.


Skomentuj

Imię (Nick):
Komentarz:
    Sonda
Jakie języki wykorzystujesz najczęściej?

 ASP
 Assembler
 C
 CSS
 C++
 C#
 Delphi
 Fortran
 HTML
 Java
 JavaScript
 Pascal
 Perl
 PHP
 Python
 SQL
 XHTML
 XML
 WML


Pokaż wyniki

 
Copyright © 2005-2008 Rafał "Giryś" Girycki
All rights reserved. Wszelkie prawa zastrzeżone.

Valid HTML 4.01 Transitional