Vor einigen Tagen sprach ich mit meinen Kollegen über diesen Code in Java:Syntax mit verpassten Ausdruck für die Grund for-Schleife
for(; ;) { }
Nichts Besonderes hier, nur eine Endlosschleife.
Aber wir fragen, warum diese syntaktisch korrekt ist. Wenn Sie einen Blick auf JLS §14.14.1 nehmen werden Sie sehen:
for ([ForInit] ; [Expression] ; [ForUpdate]) Statement
Ich verstehe, dass ForInit
und ForUpdate
verzichtet werden kann. Aber zumindest würde ich erwarten, dass Expression
zwingend vorgeschrieben ist, wie in while-Schleife:
while() {} // compile error, Expression is missed
Warum kann Expression auf einer for-Schleife verzichtet werden? Und selbst einer denkt mehr - warum ist der verpasste Ausdruck in true
aufgelöst? Meine Erwartung wäre, dass der leere Ausdruck in false
aufgelöst wird.
das gleiche denken ist für andere Sprachen gültig (Ich versuche, habe es mit C und JavaScript, aber ich glaube, jeder Sprache mit for-Schleifen auf diese Weise verhält).
Warum ist ein Ausdruck Klausel nicht zwingend in for-Schleife (aber in while-Schleife)? Warum leerer Ausdruck zu true
lösen und nicht false
?
Sie haben zu viel Zeit auf Ihre Hände, wenn Sie sich darüber sorgen :) – tokamak
Interstingly, beide 'for (;;)' und 'while (true)' ae ersetzt mit nur einer 'goto 0' Anweisung: P – TheLostMind
@tokamak machte meinen Tag: D – osanger