Rene Pijlman [on Sat, 29 May 2004 12:38:20 +0200] wrote:
> Erick T. Barkhuis:
> >Rene Pijlman:
> >> Je weet wel, of b in a and b wordt geëvalueerd als a false is.
> >
> >Is het, behalve als "weetje", functioneel interessant om te weten of in
> >dat geval b wordt geevalueerd?
>
> Nou en of. En wel om twee redenen.
>
> 1. In een programmeertaal kan de evaluatie van een expressie neveneffecten
> hebben.
Als je dat als programmeur toestaat wel, ja.
Even dit voorbeeld:
> if (kernTeHeet() and stopReactor())
Dit lijken wel wat "ongelijkwaardige" methods te zijn, Rene.
kernTeHeet() lijkt al het uitvragen van een status, terwijl stopReactor()
klinkt als een actie die goed of fout verloopt. Maar vooruit, laten we
aannemen dat je met kernTeHeet() een method bedoelt die de kern te heet
doet zijn en retourneert of dat is gelukt.
> {
> echo "De kern was te heet, dus is de reactor gestopt";
> }
> else if (kernTeHeet())
> {
> echo "Alarm: kern te heet, maar de reactor stopt niet";
> }
> else
> {
> echo "Niks aan het handje";
> }
Mijn insteek als programmeur zou anders zijn. Als ik het mijn tante van 83
zou moeten uitleggen, dan zou ik het er zo vertellen:
"Kijk tante, eerst geef ik opdracht om iemand de kern te heet te maken.
Zodra hij me vertelt dat het is gelukt, dan laat ik iemand anders de
reactor stoppen. We schrijven:
statusKTH = kernTeHeet();
if (statusKTH) {
statusSR = stopReactor();
if (statusSR) {
echo "De kern was te heet, dus is de reactor gestopt";
}
else {
echo "Alarm: kern te heet, maar de reactor stopt niet";
}
else {
echo "Niks aan het handje";
}
> Hoe zou jij die 'and' geëvalueerd willen hebben als je naast de
> kernreactor woont?
Ik begrijp je punt. Maar aan de andere kant vraagt de programmeur wel om
onduidelijkheid door die manier van coderen.
Het zou mij een worst moeten zijn of, en zo ja in welke volgorde (a and b)
wordt geevalueerd. Ik wil alleen maar TRUE terug hebben als beide waar
zijn. Niks meer, niks minder.
>
> 2. Shortcut-evalueren is soms nodig voor correcte code:
>
> a: array[n]
> if (i < n && a[i] != 0)
> ...
>
> Deze code zou falen als i >= n en daarna a[i] geëvalueerd wordt.
Hmmm...dat klopt.
--
Erick
"Moet dat niet zijn: och & wee, wee, wee? Blijft het tenminste nog
een beetje ontopic" - Sebastiaan in niwo

Likes:

Quote