Perl vs PHP – 1

Fajna rzecz, która działa w Perlu, a nie działa w PHP:

print "Maga ", "uczy ", "się ", "Perla.\n";

Efekt w Perlu – wypisanie tekstu: Maga uczy się Perla.

Podobnie jak:

print ("Maga ", "uczy ", "się ", "Perla.\n");

Drugi skrypt zadziała również w PHP. Z kolei jedyne co z pierwszym skryptem zrobi PHP, to wyświetli parse error, ponieważ nie jest on przystosowany do wyświetlania rzeczy po przecinku bez nawiasów. Wynika to z tego, że w Perlu print jest operatorem i jego argumentem jest lista. Natomiast w PHP print jest funkcją i potrzebuje argumentów podanych w nawiasach i oddzielonych przecinkami

PHP – sztuczki

Natknęłam się ostatnio na ciekawą rzecz.
Prawie każdy zna wywodzący się z C operator warunkowy (?:). Dla przypomnienia – jedyny trójargumentowy operator – świetnie zastępuje if…else… – przynajmniej w prostych przypadkach.

Przykład zastosowania:

$a = 10;
$b = ($a > 4) ? 100 : 200;

Wówczas zmienna $b zależnie od wartości zmiennej $a przyjmie:
wartość 100 – jeśli zmienna $a będzie większa niż 4
wartość 200 – jeśli zmienna $a będzie mniejsza lub równa 4.
W powyższym przykładzie $a jest większe niż 4 więc zmienna $b przyjmie wartość 100.
Myślałam, że to wszystko jeśli chodzi o operator ?: – do wczoraj.
Kiedy to okazało się, że argumentami tego operatora mogą być funkcje i to w całkiem inny sposób niż robiłam to do tej pory.

Kolejny przykład:

function inkrementacja($i)
{
    return ++$i;
}
function dekrementacja($i)
{
    return$i;
}
$a = 10;
$b = ($a > 4) ? 'inkrementacja' : 'dekrementacja';
$b = $b($a);

Co się stanie?
Jeśli zmienna $a będzie większa od 4, zmiennej $b zostanie przypisany wynik wyrażenia: inkrementacja($a).
Jeśli zmienna $a będzie mniejsza lub równa 4, zmiennej $b zostanie przypisany wynik wyrażenia: dekrementacja($a).
I tak w tym przypadku wartość zmiennej $b wyniesie 11.

Dlaczego nie zrobić tego tradycyjnie?
Tradycyjnie wyglądałoby to tak:

function inkrementacja($i)
{
    return ++$i;
}
function dekrementacja($i)
{
    return$i;
}
$a = 10;
$b = ($a > 4) ? inkrementacja($a) : dekrementacja($b);

Zmienna $b przyjmuje teraz wartość 11.

Jaka jest wyższość wcześniejszego rozwiązania nad tradycyjnym? Moim zdaniem – spora, choć jeszcze nie znalazłam na to konkretnego zastosowania, ale jestem pewna, że się przyda. Nie-tradycyjne tworzy minifunkcję – można wielokrotnie sprawdzać warunek ($a > 4) i przypisywać zmiennej $b – bądź jakieś innej zmiennej wartości zwracane przez funkcje inkrementacja i dekrementacja. Jak to?
Można wielokrotnie później wywoływać $b($a) podstawiając za $a coraz to nowe wartości.
Natomiast tradycyjne rozwiązanie pozwala tylko raz sprawdzić warunek i raz dokonać podstawienia.
Wszystko więc zależy od potrzeb.
Nawiasem – nie znalazłam żadnych udokumentowanych źródeł pozwalających dokonać czegoś takiego w C – choć w końcu PHP napisano w C. Co prawda próbowałam eksperymentować i z moich doświadczeń wynika, że zastosowanie tej „innej” składni w C nie jest możliwe;)
To tylko pogłębia moją sympatię do PHP.

Nadszedł czas…

Przekopiowania tu paru notek, które rozsiałam tu i tam, a których tematyką były moje doświadczenia z różnymi językami programowania którymi się zajmuję. Generalnie to właśnie gromadzenie  tego typu doświadczeń ma na celu ten blog. Nadal uczę się nowych rzeczy i poszerzam dotychczasową wiedzę, stąd też tematów pewnie mi nie zabraknie (zabraknąć może co najwyżej czasu).

Pierwsza rzecz się udała

Udało mi się trochę spolszczyć bloga – przynajmniej od strony widocznej dla przegladających go. Mnie w administracji nie przeszkadza istnienie angielskich nazw opcji:) No i jeszcze zrobiłam wyciąganie ostatnich notek na główną stronę mojej strony domowej:) Rozkręcam się powoli chyba. Oby tak dalej:)