Hallo,
das ist genau das, was ich auch immer predige: "Objektorientierung findet im Kopf des Programmierers statt. Selbst in Assembler kann man objektorientiert programmieren."
Sehe ich genauso. Und wie gesagt, man kann auch in Java prozedural programmieren.
Es wäre zu überlegen ob der Pfeffer dann nicht auch ein Parameter sein sollte, der am Anfang geprüft werden muss.
Ich sag's doch: Ich stelle zu Anfang eines Arbeitsschrittes sicher, dass ich auch das nötige Material und Werkzeug habe.
Natürlich muss man gewisse Vorbedingungen prüfen. Aber das heißt doch nicht, dass man alle Variablen gleich am Anfang deklarieren muss. Nur weil ich in einer Schleife i verwende schreib ich doch nicht an den Anfang int i. Welchen Nutzen sollte das haben? Im Gegenteil, wenn ich die Schleife irgendwann wieder entferne, dann vergess ich vielleicht das int i zu entfernen und hab damit eine unnütze Anweisung im Programm stehen.
Joshua Bloch nennt in Effective Java als Grund, dass die Variable am Methodenanfang den Leser des Codes nur ablenkt und er eventuell an der Stelle wo sie benutzt wird den Typ der Variable schon wieder vergessen haben könnte. Außerdem nennt er eine bessere Wartbarkeit und eine reduzierte Fehleranfälligkeit.
Das halte ich für Mumpitz, ich sehe es genau umgekehrt. Ich möchte ganz am Anfang eines logischen Blocks (Funktion/Methode) wissen, was ich alles brauche, und im Falle einer Überarbeitung nicht den ganzen Block nach weiteren Deklarationen durchsuchen müssen.
Ich glaube mittlerweile dass es sich dabei einfach um eine Gewohnheitssache handelt. Wenn ich eine fremde Funktion anschaue, dann sollte mir im Idealfall der Funktionsname bereits grob sagen was die Funktion macht. Eine genau Erläuterung der Funktionsweise erhalte ich aus dem Javadoc/Doxygen-Kommentar über der Funktion. Welche Variablen in der Funktion verwendet werden kann mir doch erstmal egal sein, mir reicht es völlig wenn eine Variable bei der ersten Benutzung deklariert wird. In diesem Fall kann sie auch direkt mit einem sinnvollen Wert initialisert werden und muss nicht am Anfang nutzloserweise mit 0 oder null belegt werden.
Wie stellst du beim Überarbeiten einer Funktion sicher, dass alle Variablen die du am Anfang deklariert hast auch wirklich noch verwendet werden?
Wenn ich die Zeile mit der Initialisierung entferne, dann entferne ich automatisch auch die Variablendeklaration.
Gruss,
OhneName