Operator **. Co można z nim zrobić i jak z nim żyć?

3 grudnia tego roku miało miejsce ważne wydarzenie dla ludzi skupionych wokół PHP – premiera wersji 7 tego języka. Przynosi ona przede wszystkim wiele usprawnień (np. duża ilość Fatal Errorów została zamieniona na wyjątki) i poprawek (które zaowocowały m. in bardzo dużym skokiem wydajności). Pojawiło się także kilka nowości

(np. obsługa klas anonimowych) jednak z reguły nie jest to nic czego nie było by wcześniej w innych językach. Wreszcie wraz z pojawieniem się tej wersji PHP ma szansę nawiązać równorzędną walkę z innymi językami.

Zanim jednak zaczniemy pisać kod aplikacje zgodne z najnowszą wersją PHP minie trochę czasu. Wszystko dlatego, że większość pracy programisty to utrzymywanie już istniejących aplikacji pracujących pod kontrolą np. PHP 5.3. Problem w tym, że przełożeni rzadko kiedy widzą potrzebę aktualizacji PHP do nowszej wersji – no bo po co? Przecież wszystko działa a klienci nie zapłacą za ewentualne modyfikacje kodu aby był zgodny z nowszą wersją PHP ponieważ nie przełoży się to na konkretną funkcjonalność. Istnieje znacznie większe prawdopodobieństwo, że napiszecie w najbliższym czasie coś w PHP 5.6 niż w 7.0 dlatego właśnie w tym poście opiszę nowy operator jaki pojawił się właśnie w PHP 5.6.

Teraz już tylko o nowym operatorze

Nowy operator służy do potęgowania. Czyli można by było uznać, że jest to skrót do funkcji pow(). Otóż nie do końca. Jeśli potęgujemy liczby dodatnie w przypadku operatora ** i funkcji pow() wydaje się identycznie. Przykład poniżej:

pojawiają się w przypadku gdy podstawą jest liczba ujemna. Przykład poniżej:

W powyższym przykładzie w przypadku potęgowania za pomocą operatora ** wynik będzie wynosił -4 a za pomocą funkcji pow 4. Generalnie gdy podstawa jest ujemna to potęgowanie za pomocą operatora ** zawsze zwraca wynik ujemny. Wniosek z tego, że działanie jakie jest wykonywane przez funkcję pow to (-2)2 a w przypadku operatora ** to – (2)2. Dlaczego tak się dzieje? Wszystko przez to że operator ** ma wyższy priorytet niż operator -. Dlatego tak naprawdę wykonywane działanie to –(22) i stąd ta różnica w wyniku pomiędzy funkcją pow a operatorem **. Nie można więc traktować tego operatora jak ekwiwalent funkcji pow().

Na samym końcu wspomnę jeszcze o tym, że wraz z pojawieniem się operatora ** pojawił się także operator **=. Co on takiego robi to chyba łatwo się domyśleć 😉

Posty które mogą Cię zainteresować:

2 Responses to Operator **. Co można z nim zrobić i jak z nim żyć?
  1. BartekGD Odpowiedz

    Również tym operatorem można bardzo łatwo rozmontować sobie system. Pamiętam jak robiłem jakiś projekt z Pythona i chciałem usunąć kilka plików z rozszerzeniem .py, niestety wklepałem demoniczną ” * ” i usunąłem sobie rekurencyjnie wszystkie pliki z Linuxa z rozszerzeniem .py. BTW: dziwne, że tego operatora nie było w phpie wcześniej – wszystkie inne popularniejsze języki posiadają go od lat. Pozdrawiam

    • Michał Janicki Odpowiedz

      Faktycznie fajny sposób na rozłożenie systemu ;D W kwestii braków w samym PHP – jest coraz mniej rzeczy, do których można się przyczepić, szczególnie ostatnio od kiedy pojawił się PHP 7 i dość szybko jak na nową wersję zdobywa popularność. Widać, że ta wersja była bardzo potrzebna. Fakt jest jednak to, że jeszcze do niedawna nie można było korzystać z tego operatora ale też i ze słowa kluczowego finally wprowadzonego dopiero w PHP 5.5 (piszę o tym tutaj). Co do popularności to JS też chyba nie może pochwalić się tym operatorem (istnieje ale jako propozycja dla ECMAScript 7).

Dodaj komentarz

Your email address will not be published. Please enter your name, email and a comment.