Zgodnie z tabelami pierwszeństwa C, potrójny operator warunkowy ma skojarzenie od prawej do lewej: .Jeszcze jedno warunkowe pytanie dotyczące zagnieżdżania operatora
Czy więc można go bezpośrednio przekształcić w odpowiednik drabiny?
Na przykład potrafi:
x?y?z:u:v;
być po prostu interpretować jako:
if(x)
{
if(y)
{ z; }
else
{ u; }
}
else
{ v; }
dopasowując indziej (:) z najbliżej nieparzysty jeśli()? Czy skojarzenie z prawem do lewego implikuje jakiś inny układ?
+1 chociaż chciałbym powiedzieć, że jest nawet mądrzejsi * nie *, aby zagnieździć operatorów warunkowych kiedykolwiek w prawdziwym kodzie produkcyjnym :-) –
@ Péter Török: Zgoda! – Ray
Myślę, że "nieużywanie" jest przereklamowane. Zamień '?' Na 'then' i': 'na' else', a masz doskonale poprawną składnię wyboru w wielu językach. Piszę takie zagnieżdżone warunkowe przez cały czas, upewniając się, że każdy nowy? i: pojawia się w nowej linii z poprawnym wcięciem. Jest tak czytelny, jak wszystkie bloki if/else. –