Zitat:
folgende Befehle sind überflüssig: exit, goto, break das sind Befehle, die nicht zu einer strukturierten Programmierung gehören. Das ist nun mal so. da kommt man nicht drum herum. Natürlich kann man alles irgendwie hinwurschteln. Aber warum? warum nicht gleich ordentlich und strukturiert programmieren?
An der FH hat ein Professor mir beigebracht, dass und warum man immer strukturiert programmieren soll. Er hat der Vollständigkeit halber die entsprechenden C-Sprachkonstrukte erklärt (also return, goto, break, continue), aber auch, dass man sie niemals benutzen darf, außer natürlich im switch (in C# ist das break dort ein Teil der Syntax und kein echter Sprungbefehl).
Aber das ganze hatte einen Hintergedanken - man sollte die Programme nicht nur als Code, sondern auch als Struktogramm zeichnen können. Habt ihr das mal gemacht? Eine der unsinnigsten Erfindungen, die es gibt, in meinen Augen. Genauso sinnlos wie zigfach verschachtelte Ifs und Thens zu verwenden, anstatt sie zu umgehen. Sobald man nämlich eine
Exception (das ist doch ein Feature moderner Sprachen?
) verwendet, ist nix mehr mit strukturiert im klassischen Sinne. Dann springt man nämlich sofort raus. Sogar noch brutaler als mit einem break oder goto. Man weiß innen nämlich nichtmal, wo man landet, denn vielleicht fängt die aufrufende Methode die
Exception ab, vielleicht wird sie auch über zig Ebenen nach oben gereicht.
Also, Exceptions benutzt man, aber goto nicht, und nichtmal break oder continue?
Fahrt ihr auch nicht in PKWs mit, weil man damit Menschen umfahren kann, aber in Bussen schon?
Die Tatsache, dass man mit einem Sprachkonstrukt (einer Klasse aus eine Laufzeitbibliothek, einem Programm...) immensen Schaden anrichten kann, als Vorwand zu nehmen, das Konstrukt niemals zu verwenden, ist ideologisch vielleicht sinnvoll, praktisch aber unsinnig. Darf ich niemals einen Treiber schreiben, nur weil ich mit einem Treiber Windows XP zu einem Bluescreen bringen könnte?
Ach, und noch eine Ergänzung zum Thema
OOP. Schonmal gemacht? Code bleibt Code, egal ob ich in einer Methode bin und meine Variablen alle Objekte sind statt fundamental. Es sind immer noch Funktionsaufrufe, immer noch Ifs und Thens und Schleifen, und immer noch Sprungbefehle. Insofern macht es für diese Diskussion keinen Unterschied, ob man objektorientiert oder prozedural programmiert.
Hmm, und dann noch, man soll das Zeug nicht verwenden, weil es so jung ist Oo
Iteratoren, Generics und Nullable Types gibt es in C# erst ab der Version 2.0 - darf ich sie jetzt nicht verwenden? War ja ursprünglich nicht vorgesehen...