Dan moet je je gaan verdiepen in compilerbouw
Een expressie is iets dat evalueert naar een bepaalde waarde, een statement is een opdracht. In C-achtige talen is een expressie een soort statement. Andere statements zijn dingen als if-else, while, do-while, for, return, continue, break, etc.
De hele reden dat ?: bestaat is omdat je soms nou eenmaal een waarde wilt evalueren aan de hand van een bepaalde conditie, oftewel binnen een expressie. Daarmee kun je dus zeggen:
foo($bar>3 ? 23 : 46). In sommige contexten in C++, die 'm geïntroduceerd heeft in de C-familie van talen, is hij essentieel omdat je daar geen if-else statements kunt gebruiken.
Omdat een expressie ook een statement is kun je de constructie ook verkrachten door dingen te doen als:
PHP:
1
| 4 > 3 ? doIets() : doeIetsHeelAnders(); |
Maar je doet daar niets met het resultaat, dus je misbruikt de ?: in dat geval - een if-else is hier gewoon beter (en heeft meer mogelijkheden omdat je alle statements kunt gebruiken, niet alleen expressies). Bovenstaande regel in een if wrappen slaat overigens he-le-maal nergens op, waarom doe je dan überhaupt de if
Een continue en break zijn geen expressies omdat ze verder geen waarde opleveren. Iets als
$x = break; of
foo(continue); slaat nergens op.
In C++ is een throw dan wel weer een expression. Dat is op het eerste gezicht raar maar het is de enige manier om vanuit member initialization een exception te kunnen gooien. Ook delete is een expression, analoog aan new.
[
Voor 7% gewijzigd door
.oisyn op 13-08-2013 23:06
]