Zitat von
Klaus Schmaranz, Softwareentwicklung in C
7.7 Das unselige goto Statement
Die Überschrift sagt im Prinzip schon vieles uber das goto-Statement aus:
Es ist eines der unseligsten Statements, die jemals in höhere Programmiersprachen Einzug gefunden haben. Bevor ich erläutere, warum man goto keinesfalls und unter keinen Umständen verwenden soll, mochte ich trotzdem zumindest seine Funktionsweise kurz beschreiben:
Im Prinzip ist goto eine unbedingte Sprunganweisung an eine Stelle irgendwo im Programm. Irgendwo im Programm bedeutet, an eine Stelle, die man zuvor durch einen Label gekennzeichnet hat.
1 // goto.c - a tiny program demonstrating the use of goto
2
3 main ( )
4 {
5 int spaghetti_counter = 0;
6
7 nirvana:
8 printf ( "I'm in nirvana...\ n" );
9 spaghetti_counter++;
10 if ( spaghetti_counter > 5)
11 goto walhalla;
12 goto nirvana;
13 walhalla:
14 printf ( " finally in walhalla \n" ) ;
15 }
Ausführen des Programms liefert den folgenden Output:
I'm in nirvana...
I'm in nirvana...
I'm in nirvana...
I'm in nirvana...
I'm in nirvana...
I'm in nirvana...
finally in walhalla
In diesem Beispielprogramm werden zwei verschiedene Labels, nirvana und walhalla definiert, die als mögliches Ziel einer Sprunganweisung dienen können. Mittels goto werden diese dann angesprungen.
Man sieht schon bei diesem winzigen Codeschnipsel, dass die Lesbarkeit des Codes eine mittlere Katastrophe darstellt. Nun stelle man sich vor, dass man es mit einem großen Programm zu tun hatte, in dem wild kreuz und quer durch das Programm gesprungen wird! Schon hier haben wir eine Schleife programmiert, die keines unserer bekannten Schleifenkonstrukte verwendet. Man muss aber zweimal hinsehen, um dies auch zu erkennen. Nun denke man daran, dass sich eine solche Schleife über mehrere Sprungstellen hintereinander im Code definiert. Kein Mensch kann dieses Konstrukt noch in vernünftiger Zeit durchschauen. Die Einfuhrung von goto in Hochsprachen fand noch zu einer Zeit statt, in der die meisten Softwareentwickler sehr viel mit Assemblersprachen zu tun hatten, bei denen unbedingte Sprunganweisungen zum täglichen Brot gehören. Intern arbeiten Computer ja nicht strukturiert, wie auch? Auch bei Anfängern in der Programmierung ist goto noch recht beliebt, da sie die Gefahr dahinter nicht erkennen. Zumeist dauert es aber dann nicht lang, bis sie ihren eigenen Code nicht mehr durchschauen, weil die Sprünge jede Struktur im Programm verschleiern.
Nicht umsonst haben jahrzehntelang viele berühmte (und auch nicht so berühmte) Softwareentwickler kein gutes Haar an diesem Statement gelassen, weil es ein Programm absolut undurchsichtig, unwartbar, nicht erweiterbar und fehleranfällig macht. Glücklicherweise hat es sich mittlerweile schon weit herumgesprochen, dass man keine goto Anweisungen verwenden soll. Warum denn auch? Es gibt kein einziges Problem, das man nicht ohne goto auch lösen konnte. Leider findet man vereinzelt noch in verschiedenen Büchern "gute Gründe" fur dieses grauenvolle Konstrukt. Aber egal, um welchen guten Grund es sich handelt, es gibt immer noch bessere Gründe, es nicht so zu machen.
In diesem Sinne schließe ich mich vollstandig der Meinung fast aller Softwareentwickler an: Ein goto hat in keinem Programm etwas verloren!!!!!
Um diese Aussage noch weiter zu untermauern: In Java ist goto ein reserved-word, aber es ist bewusst nicht implementiert. Damit hat man es gleich im Prinzip von der Sprache her nicht zugelassen und jeden Versuch zu seiner Implementierung unterbunden!
Lesezeichen