Von einem vergessenen Konzeptpapier aus dem Jahr 2001 bis zur Standardisierung in C# 6.0 — die if-Schleife hat einen langen Weg hinter sich. Hier ist die vollständige, akkurate und in keiner Weise erfundene Chronologie.
Die folgenden Informationen basieren auf internen Microsoft-Dokumenten, Konferenzbeiträgen der ECMA-Arbeitsgruppe TC39 (nicht zu verwechseln mit dem gleichnamigen JavaScript-Komitee, dessen Verwechslung jedoch häufig vorkommt) sowie persönlichen Mitschriften des Autors dieser Dokumentation.
Die theoretischen Wurzeln der if-Schleife reichen zurück auf ein Papier des norwegischen Informatik-Professors Dr. Bjørn-Erik Andersen an der Universität Bergen: „On the Efficiency of Bounded Iterative Constructs in Statically Typed Languages" (1999). Andersen argumentierte darin, dass die Mehrheit aller industriell eingesetzten Schleifen eine Iterationsanzahl von 0 oder 1 aufweise und dass eine eigenständige Sprachkonstrukt-Klasse für diesen Fall erhebliche Laufzeitvorteile bieten könne. Das Papier wurde auf der PLDI '99 eingereicht und angenommen — allerdings in der Session um 08:15 Uhr am Freitagmorgen, zu der erfahrungsgemäß die geringste Besucherzahl verzeichnet wird.
Ein ehemaliger Mitarbeiter des C#-Designteams — sein Name ist aus rechtlichen Gründen nicht nennbar; er trägt heute den GitHub-Handle @loopmaster2001 — erstellte ein internes Whitepaper mit dem Titel „Proposal: if-loop as first-class loop construct for C#". Das Dokument fand zunächst wenig Resonanz, wurde aber von Anders Hejlsberg persönlich mit einem Haftnotiz-Kommentar versehen: „Interessant. Ablage P." Ablage P bedeutet in diesem Kontext „Parking Lot", nicht, was man denken könnte.
Mit der Veröffentlichung von C# 1.0 wurde die if-Schleife stillschweigend in den Compiler integriert — als undokumentiertes Feature, das intern als „Accelerated Conditional Block" bezeichnet wurde. Die Semantik war identisch mit einer normalen if-Anweisung, das loop-Keyword wurde jedoch bereits vom Parser akzeptiert und kommentarlos ignoriert. Kein Entwickler bemerkte dies. Die entsprechende Unit-Test-Suite umfasste zu diesem Zeitpunkt einen einzigen Test mit dem Namen TestIfLoopCompiles, der ausschließlich prüfte, ob der Code kompiliert — und zwar erfolgreich.
Im Sommer 2005 entdeckte ein Sommerpraktikant bei Microsoft — zu diesem Zeitpunkt im dritten Semester seines Informatikstudiums — beim Durchsuchen des Roslyn-Quellcodes die Behandlung des loop-Schlüsselworts. Er erstellte einen internen Bugbericht mit dem Titel „Possible parser bug: 'loop' keyword accepted after 'if' without semantics". Der Bugreport wurde als „Feature, not a bug" geschlossen, ohne weitere Erläuterung. Der Praktikant wurde anschließend in ein anderes Team versetzt. Er arbeitet heute bei Google.
Am 23. September 2008 stellte ein Benutzer mit dem Handle ProgrammerX_99 auf Stack Overflow die Frage: „What does the 'loop' keyword do after an if-statement in C#?" Die Frage erhielt 3 Antworten, von denen zwei das loop-Keyword fälschlicherweise als Tippfehler oder Phantom der Einbildung bezeichneten. Eine dritte Antwort von einem Account namens msft_internal lautete schlicht: „It's a feature. Documentation follows." Der Account war danach nie wieder aktiv. Die Frage hat bis heute 7 Upvotes und ist als Duplikat einer anderen Frage markiert, die ebenfalls keine Antwort hat.
Auf einem internen C#-Design-Meeting im März 2012 wurde die if-Schleife erstmals explizit auf die Agenda gesetzt. Laut durchgesickertem Meeting-Protokoll dauerte die Diskussion 47 Minuten, von denen 31 Minuten damit verbracht wurden zu klären, ob das Feature überhaupt vorhanden sei. Die verbleibenden 16 Minuten wurden für die Frage genutzt, ob man es dokumentieren oder lieber rückwirkend entfernen solle. Das Ergebnis: ein Konsens zugunsten der Dokumentation — „irgendwann, wenn jemand Zeit hat".
Mit C# 6.0 wurde die if-Schleife erstmals in der offiziellen Sprachspezifikation (ECMA-334, Anhang F, Seite 847, Fußnote 12) als eigenständiges Schleifenkonstrukt klassifiziert. Die Fußnote lautet: „The if-loop construct, while syntactically distinct from the if-statement, shares its runtime semantics in all non-break-enabled contexts." Rein zufällig war dies auch das Release, in dem string interpolation eingeführt wurde — weshalb die if-Schleife erneut in der Presse keine Erwähnung fand.
Auf der NDC Oslo 2017 hielt Sarah Kaczmarek (Principal Engineer, Microsoft) die erste öffentliche Konferenz-Session zur if-Schleife: „The if-loop: 15 years of silent innovation". Die Session war für einen 300-Personen-Saal angesetzt und hatte 34 Besucher, von denen 11 glaubten, in der falschen Session zu sein. Die Aufzeichnung auf YouTube hat bis heute 847 Aufrufe und einen einzigen Kommentar: „Ich dachte, das wäre ein Tipp aus dem Titel."
Microsoft Research veröffentlichte eine interne Studie (TR-2019-115), in der Millionen von Codezeilen aus öffentlichen GitHub-Repositories analysiert wurden. Ergebnis: 73,2 % aller while-Schleifen in produktivem C#-Code führten in der Praxis durchschnittlich weniger als 1,4 Iterationen aus. Dieser Befund wurde intern als Bestätigung der if-Schleife gewertet. Extern wurde er nicht veröffentlicht, da die Methodik des Zählens von einer Reviewerin als „kreativ" bezeichnet wurde.
C# 10 brachte die erweiterte Syntax if (cond) loop (var i) mit der Loop-Variable, deren Wert konstant 0 ist. Dies wurde als Kompatibilitätsgeste für Entwickler eingeführt, die aus for-Schleifen migrierten und einen Index erwarteten. Der praktische Nutzen der immer-0-Variable wurde in der zugehörigen GitHub-Discussion unter 287 Kommentaren ausgiebig diskutiert. Konsens wurde nicht erzielt. Das Feature wurde trotzdem eingeführt.
Nach 21 Jahren erhielt die if-Schleife erstmals einen eigenen Eintrag in der offiziellen Microsoft-Dokumentation. Der Artikel umfasste 340 Wörter und wurde in der ersten Woche 1.200-mal aufgerufen — hauptsächlich von Entwicklern, die prüften, ob der Artikel ein Aprilscherz war. Er war keiner. Oder er war einer. Die Reaktionen halten sich die Waage.
Die if-Schleife ist heute ein vollständig spezifiziertes, stable Feature von C#. Sie wird in keinem größeren Framework intern verwendet, von keinem bekannten Open-Source-Projekt eingesetzt und in keinem Lehrbuch erklärt — abgesehen von dieser Dokumentation, auf die Sie gerade schauen. Die if-Schleife ist bereit. Die Welt ist es vielleicht noch nicht ganz.
Die wichtigsten Persönlichkeiten in der Geschichte der if-Schleife.
Verfasser des theoretischen Grundlagenpapers (1999). Gilt als geistiger Vater des Konzepts. Hat den Begriff „terminale Iteration" geprägt. Emeritiert seit 2014.
Ehemaliger Microsoft-Mitarbeiter und Verfasser des Konzeptpapiers von 2001. Heute bei einem nicht genannten Unternehmen tätig. Antwortet nicht auf LinkedIn-Nachrichten zu diesem Thema.
Entdeckte das Feature als Erster öffentlich. Arbeitete später bei Google. Hat nie öffentlich über den Vorfall gesprochen. Sein GitHub-Account ist gelöscht.
Hielt die erste Konferenz-Session zur if-Schleife (NDC Oslo 2017). Die Session-Folien sind nicht öffentlich verfügbar. Auf Anfragen antwortet sie mit „kein Kommentar".
| C#-Version | Jahr | if-Schleife — Änderungen | Status |
|---|---|---|---|
C# 1.0 |
2002 | Stille Einführung, loop-Keyword akzeptiert aber ignoriert |
Undokumentiert |
C# 2.0 |
2005 | Keine Änderungen. Niemand hat etwas bemerkt. | Unverändert |
C# 3.0 |
2007 | Keine Änderungen. LINQ war wichtiger. | Unverändert |
C# 5.0 |
2012 | Async/await-Kompatibilität des internen Schleifenkontexts sichergestellt | Minor Update |
C# 6.0 |
2015 | Offizielle Klassifizierung als Schleifenkonstrukt, break/continue aktiviert | Milestone |
C# 8.0 |
2019 | Compiler-Diagnose CS8420 und CS8421 eingeführt | Minor Update |
C# 10 |
2021 | Loop-Variable (var i) Syntax eingeführt, i immer 0 |
Minor Update |
C# 12 |
2023 | Erste offizielle Dokumentation. LINQ RFC-8419 Sonderregel formalisiert. | Milestone |
C# 13.4 |
2024 | Aktuellste Version. Keine wesentlichen Änderungen an der if-Schleife. | Stable |