Hey ho allerseits,
ich habe bislang nur mit c++ programmiert und muss jetzt von arbeit aus auf delphi umsteigen. da hab ich mir gedacht, frag ich doch einfach mal hier in die runde, was die groebsten unterschiede sind, worauf man achten sollte, wenn man den umstieg macht. oder sind die sprachen sich so aehnlich dass ich mir keinen kopf machen muss?
danke fuer jede hier gepostete erfahrung, tipp etc.
cherio Woltan
zahlen ist nicht von sich aus booleans - das merkt man dann besonders bei if-abfragen, schleifenbedingungen oder so...
Code:
var
byte i;
...
i := 10;
while (i)
begin
;
end
klappt also nicht und die bedingung muss zu i > 0 geändert werden. Zuweisungen in Zuweisungen und ähnliche schlecht lesbaren Späßchen sind auch nicht möglich, müssen also zerlegt werden. Der Operator i++ wird zu inc(i), -- zu dec(i).
Erstmal zu dem Interface IXMLNode: Mit dem As Operator kann man problemlos Klassen in Interfaces casten. Wenn die Instanz das Interface hat, geht der Cast gut, ansonsten gibt's 'ne exception.
Zu Hauptunterschied C++/Delphi:
In Delphi gibt es keine:
- Templates (allgemein nix, für das ein Präprozessor zuständig wäre, da es einen solchen nicht gibt)
- static Member (nur Methoden und da darf man nicht auf Member zugreifen)
- Operatorüberladung (ab Delphi2005 schon)
- Mehrfachvererbung; In Delphi wird das über Interfaces gelöst und ist dadurch sauberer
- Keine bedingte Zuweisung (<Ausdruck>?<Ausdruck>:<Ausreuck>)
- Keine Initialisierung bei der Deklaration von Variablen (bei Konstanten schon)
- Keine Post-/Präfixoperatoren
Dafür geht in Delphi, was in C++ nicht geht:
- Properties: Hier kann man getter und Settermethoden definieren, die einen geregelten Zugriff auf die Member ermöglichen (der Member selber kann dadurch eine geringere Sichtbarkeit haben)
- Objektinstanzen sind gleichzeitig Zeiger, d.h. Dereferenzierung bei Memberzugriffen fallen weg und man muss nicht extra pointer für Funktionsaufrufe übergeben
- Kein Rumgefummel mit Headerdateien: Deklaration und Implementierung sind in der selben Datei.
- Formulardesign ist wesentlich einfacher
- Ordentliche Strings, das Rumgefummel mit Chararrays fällt weg
- Wesentlich schnellerer Compiler (da kein Prä- und Postprocessing nötig) Herr Wirth hat gottlob keine Ahnung von Compilerbau gehabt - Bei Varparametern muss man nicht extra ref beim Aufruf schreiben
- Allgemeine Übersichtlichkeit, da nur an bestimmten Stellen Variablendeklarationen erlaubt sind
- Typsichere Casts mit As Operator
Wichtig:
Bei Case- Anweisungen werden die weiteren Cases NICHT abgearbeitet, also kein Break; mehr nötig
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Es gibt schon einen preprocessor, er beshränkt sich aber auf ifdefs und bei neuen delphis auch macros ohne parameter. Was fehlt sind echte Objekte die nicht über einen zeiger referenziert werden. Also kann man keine objekte auf dem stack anlegen. Das geht nur mit records(=struct) oder den alten pascalobjekten. Initialisierung von variablen ist auch möglich. bei neueren delphis über das var schlüsselwort, bei alten über const und {$J+}.
Aber im großen und ganzen sind die Sprachen sehr ähnlich (Delphi für Win32) und unmanged C++. Die syntax ist halt verschieden, und man verwendet halt die VCL anstelle von MFC oder so.
super jungs,
hab mir eure listen mal ausgedruckt und werd mal anfangen ein paar tests zu starten
ihr koennt wohl damit rechnen dass zukuenftig hier mal die ein oder andere frage auftauchen wird
cherio and thx again
Woltan
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Sidorion hat geschrieben:
In Delphi gibt es keine: - Keine Initialisierung bei der Deklaration von Variablen (bei Konstanten schon)
noch nie ein
Code:
var
I:Integer=10;
gesehen? Geht aber nur im Globalen Bereich.
Auch schön:
Units können einen initialization und finalization bereich enthalten.
Der initialization-Teil wird beim starten des Projekts ausgeführt, finalization beim beenden.
Des weiteren: Es gibt keine Header-Dateien. Das ist alles in einer .pas.
Code:
unit Bla;
interface// öffentlicher teil, wie eine .h
uses// Alle Units, die verwendet werden, ähnlich wie include in c
Windows, SysUtils;
// Unterscheidung zwischen prozeduren mit und ohne rückgabewert:
function FooBar(const I:Integer):String;
procedure BarFoo(const I:Integer);
implementation// privater teil, mit deklarationen für prozeduren und klassen
function FooBar(const I:Integer):String;// Strings werden automatisch verwaltet
begin
Result :='Quark';// es gibt kein return, das Ergebnis wird über Result festgelegt. Austeigen kann man über Exit, muss man aber nicht.
if I =0then// Zuweisungen in if-klauseln sind ungültig; = ist ein vergleichsoperator
begin
Result := Result +IntToStr(I);
Exit;
end;
Result := Result +IntToStr(I+1);
end;
procedure BarFoo(const I:Integer);
var
A:Integer;
begin
A := I;
end;
end.// Ende der Unit
Das wars eigentlich.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Noch ein sehr angenehmer Unterschied: Bei Funktionen/Prozeduren ohne Übergabeparameter kann man die leeren Klammern hinten weglassen bzw. bei ifs mit nur einer Bedingung muss diese auch nicht geklammert werden. Dies fällt mir im Moment umso mehr auf, da ich grad meinen Horizont auf C# erweitere.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Was mir auch gerade noch einfällt:
Gute ressource mit Tutorials zu Delphi: dsdt.info. Allerdings stell keine Frage ohne vorher die Tuts gelesen und bei google gesucht zu haben. Ich weiss zwar nicht, ob DragonsLair da noch aktiv ist, aber wenn ja... Naja, er kann unfreundlich werden
Es gibt natürlich noch eine menge weiterer Syntaktischer Unterschiede, aber dazu sollte man eher Tutorials lesen oder Quellcodes, falls man daraus lernen kann.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
..., da ich grad meinen Horizont auf C# erweitere.
Eine weise Entscheidung.
Das mit den "keine klammern hinter den Funktionsaufruf" finde ich persönlich nervend.
In C++ sind übrigens auch Propertys möglich, wobei das nicht alle compiler unterstützen.
Was ich in Delphi angenehmer fand( Programmiere fast nur noch C# und etwas C++ ) als in C++ war der Umgang mit Arrays.
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
was habt ihr denn mit den Strings? Wenn man C verwendet, ist es ein wenig doof - zugegeben. Aber in C++ nimmt man das string template und hat die gleiche Funktionalität wie in Delphi. So Konstrukte wie:
Code:
string x = "Hallo";
string y= "Welt";
string z = x + " meine " + y
Gehen damit auch.
Sidorion hat geschrieben:
- Objektinstanzen sind gleichzeitig Zeiger, d.h. Dereferenzierung bei Memberzugriffen fallen weg und man muss nicht extra pointer für Funktionsaufrufe übergeben ... - Bei Varparametern muss man nicht extra ref beim Aufruf schreiben
Die beiden Punkte versteh ich nicht ganz. Kannst Du mal ein Beispielcode geben? (Ich möchte hier übrigens kein C/C++ - Delphi Krieg lostreten sondern die Punkte wirklich wissen!)
Was bei Delphi noch dabei ist und bei C++ fehlt: der Datentyp of object. Damit kann man einfach die Adresse der Funktion eines Objektes speichern und hat dann beim Aufruf automatisch das Objekt dabei. Somit sind Callback-Funktionen innerhalb von Objekten überhaupt kein Problem - im Gegensatz zu C++.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Bar(iMyValue);// ein erneutes Schreiben von var(ref) beim Aufruf ist nicht nötig.
.. ist wohl der einzige Fall, wo C++ bei Aufrufen strikter ist als Pascal. In C wird man nochmals darauf hingewiesen, dass CallByReference vorliegt. Das gleiche gilt auch für out (und const). Zudem wird eine strikte Typprüfung vorgenommen und Konstanten sind hier garnicht möglich.
Bei 'of Object' wird implizit ein zusätzlicher versteckter Aufrufparameter vereinbart. Deswegen sind Delphi-Callbacks inkompatibel zu C/C++ Callbacks. Das muss man beachten, wenn man eine DLL schreibt. Dann muss man die Direktive StdCall hintanhägen.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Stimmt. In C++ hab ich entweder eine Funktion die eine Referenz oder einen Pointer möchte. Automatisches Casten iss nicht. Ich muß entweder ein * oder ein & davor stellen, je nachdem was ich habe oder was die Funktion als parameter möchte.
Ich hab früher viel mit Delphi gearbeitet - die ein oder anderen werden mich aus dem Forum oder soagar durch RealLive Konntakt ja noch kennen (Hallo Nico, Hallo Phob ). Wie dem auch sei, seit zwei Jahren arbeite ich beruflich mit C++. Ich muß sagen, das sich die Sprachen nicht viel schenken. Beide so ihr für und wieder. Beide haben so ihre "Maken" und "Eigenarten".
Aber ich denke mal, das der Umstieg von C/C++ auf Delphi weniger Probleme mit sich bringen dürfte! Im Prinzip ist es eh immer das gleiche: kennste eine, kennste alle. Klar haben die einzelnen Sprachen ihre besonderheiten, aber Programmieren selber ist nicht wirklich von der Sprache als eher von der Denkweiße des Entwicklers abhängig. Daher keine Angst: ist anders, dürfte aber keine größeren Probleme Darstellen. Außerdem hat Delphi 'ne gute Online-Dokumentation.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.