Hi,
int drive(VEHICLE vehicle, LOCATION from, LOCATION to, PAYLOAD *payload);
An sowas hatte ich auch gedacht, aber ich erkenne auch hier wieder die Grundzüge des objektorientierten Denkens. Sind denn VEHICLE, LOCATION und PAYLOAD praktisch etwas anderes als Klassen?
das ist genau das, was ich auch immer predige: "Objektorientierung findet im Kopf des Programmierers statt. Selbst in Assembler kann man objektorientiert programmieren."
Ja, wenn ich in einer C-Struktur Eigenschaften von "Objekten" festhalte, ist das sicher schon ein Schritt in Richtung Objektorientierung.
Der Unterschied zu
vehicle.drive(from, to, &payload);
ist ja eigentlich nicht sonderlich groß.
Eben.
Ja, aber was ist, wenn du schon Essig und Öl angemixt hast, und dann schmeißt deine Salat-Methode plötzlich eine OutOfPepperException?
Du bist echt hartnäckig.
Danke, gern geschehen. :-)
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.
Scott Meyers argumentiert in Effektiv C++ programmieren damit dass die Objekterstellung teuer sein könnte und es gut möglich ist, dass zwischen Deklaration am Methodenanfang und Verwendung die Methode abbricht (z.B. wegen einer Exception) und das Objekt damit umsonst erzeugt worden wäre.
Das ist ein Punkt. Die dynamische Erstellung und Initialisierung von Objekten kann tatsächlich aufwendig sein. Das sehe ich als Parallele zur dynamischen Speicherreservierung mit malloc() bei der klassischen C-Programmierung. Da zögere ich den Aufruf von malloc() auch so weit wie möglich hinaus, weil ich im Fehlerfall wieder den Aufwand habe, den angeforderten Speicher auch wieder freizugeben.
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.
Kann man in C99 mittlerweile Variablen an beliebigen Stellen deklarieren?
AFAIK: Offiziell nein; die Compiler, die alternativ C++ können, akzeptieren es aber wohl trotzdem.
Ich muss gestehen unions noch nie verwendet zu haben.
Ich benutze sie auch nicht regelmäßig, aber mir würde doch etwas fehlen, wenn sie plötzlich wegfallen würden.
Ciao,
Martin
Noch Fragen? - Ich weiß es auch nicht.