Jason. Cała informatyka w jednym miejscu!

Kolejny lekki temat dla każdego chcącego się tego programowania nauczyć. Poboczny, ale warto opanować zapis który zaraz pokażę, bo potrafi świetnie zredukować treść kodu do jednej linii. Kodu w postaci instrukcji warunkowej. Kodu, który będzie w stanie występować zarówno w wyrażeniu, jak również w miejscu wstawiania parametru do funkcji. Za kolejną wygodą kryje się kolejny zapis i oczywiście kolejny termin: "operator trójargumentowy" (ang. "ternary operator"). Jeżeli to kogoś interesuje, to na pewno nie pożałuje. Nawet na studiach można nie spotkać się z tym zapisem, a jest on prosty i przyjemny.

OPERATOR TRÓJARGUMENTOWY. WYJAŚNIENIE I ZASTOSOWANIE

Zapis o którym mówię można jeszcze nazwać "operatorem warunkowym", ponieważ polega on na przypisaniu jednej z dwóch wartości lub wyrażeń na zasadzie instrukcji warunkowej "if else". Tylko, że zamiast koniecznego dzielenia na dwie klamry, możemy zrealizować nasz plan przy użyciu znaku zapytania, znaku dwukropka i jednej linijki kodu.

Dziwi mnie, że na moich studiach informatycznych nie spotkałem się z takim zapisem na żadnym z wykładów, a powinien być jak najbardziej przedstawiony. Uważam operator trójargumentowy za jedną z najprzyjemniejszych rzeczy do opanowania w kwestii pisania eleganckiego kodu.

Krótkie wyjaśnienie za nami, a teraz przedstawię jak to prawidłowo zapisać. Najczęściej spotykana składnia jest taka:

(warunek) ? [instrukcja w przypadku prawdy] : [instrukcja w przypadku fałszu];

Najpierw piszemy warunek przy pomocy operatorów relacyjnych tak samo, jakbyście tworzyli warunek do instrukcji "if". Nie musi posiadać nawiasów, natomiast warto je wstawić, gdyż podnoszą czytelność i wtedy wiadomo jaką część tekstu "zajmuje" ten warunek. Następnie tworzymy znak zapytania, najlepiej oddzielając go spacjami znowu ze względu na łatwiejsze czytanie.

Potem piszecie POJEDYNCZĄ instrukcję w postaci stałej, wyrażenia czy wywołania funkcji (tylko niektóre języki na to pozwalają np. C i C++), bo ona też jest dozwolona. Zwracam uwagę na fakt, iż operator trójargumentowy dopuszcza możliwość zrealizowania jedynie instrukcji prostej (pojedynczej). Gdy chcecie, aby wykonało się wiele instrukcji, to (w miarę możliwości) wstawcie sobie funkcję, która będzie wywołana po spełnieniu (czy niespełnieniu) warunku.

Kolejna rzecz to znak dwukropka (tutaj też polecę "otoczenie" spacjami), a następnie wstawiamy kolejną pojedynczą instrukcję, która zostanie wykonana przez komputer w przypadku, gdy warunek nie zostanie spełniony. W związku z tym, powyższy zapis jest ekwiwalentny do tego:

if(warunek)
	[instrukcja w przypadku prawdy];
else
	[instrukcja w przypadku fałszu];

PRZYKŁAD KODU ŹRÓDŁOWEGO

Wyjaśniliśmy sobie istotę i sens tego wygodnego zapisu. Teraz zademonstruję Wam działanie w praktyce. Mamy oto taki programik w C, który wykorzystuje operator trójargumentowy. Obejrzyjcie go dokładnie a jak chcecie, możecie go sobie skopiować i skompilować. Odpali się bez problemu:

#include <stdio.h>

int main(void)
{
	int x = 5, y = 3;
	const char *xMessage = "x jest wieksze od y.\n", *yMessage = "y jest wieksze badz rowne x.\n";
	
	printf((x > y) ? xMessage : yMessage);
	
	(x > y) ? printf("Wyswietlam wartosc x: %d\n", x) : printf("Wyswietlam wartosc y: %d\n", y);
	
	getchar();
	
	return 0;
}

Tuż pod definicjami zmiennych, macie dwa przykłady zastosowania operatora trójargumentowego. Możecie je osadzić w miejsce parametru funkcji i wtedy jest wybierana jedna z dwóch ścieżek, ale możecie też umieścić wywołania osobnych funkcji i wtedy w zależności od warunku wywoływać całkowicie inne instrukcje. Operator trójargumentowy jest naprawdę potężny. Miejcie na uwadze, że niektóre języki programowania mogą go wspierać, ale występuje w zupełnie innej postaci. Na przykład język Lua pozwala na zaprogramowanie takiego zachowania, ale już jako połączenie ze słowami przeznaczonych dla instrukcji warunkowych:

local x = 5
local y = 3
local result = if(x > y) "x jest większe od y." else "y jest większe bądź równe x"

Tyle co chciałem przekazać. Jest jeszcze możliwość osadzenia kolejnego operatora warunkowego w już istniejącym operatorze warunkowym. Ponieważ w C nie wychodziło to tak jak powinno, odpuściłem sobie ten przykład.

PODOBNE ARTYKUŁY