| Karlson hat folgendes geschrieben: |
| Ist Java deutlich schwerer als Delphi? |
Das kommt darauf an. Wenn man eine Funktion schreiben will, die mehr als einen Rückgabewert hat (also ihre Parameter verändert), muss man den Umweg über ein Objekt oder ein Array gehen, denn Java kennt kein Call By Reference für elementare Typen wie char, int, float, double.
Bsp:
Delphi/Pascal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function MachWas(var Value: Integer): string; begin Result := IntToStr(Value); Inc(I); end;
var A: Integer; begin A := 10; WriteLn(MachWas(A)); end; |
C/C++:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| char* MachWas(int & Value) { char *str = new char[256]; itoa(Value, str, 10); Value++; return c; }
int A = 10; char *str = MachWas(A); cout << str << endl; delete str; |
Java:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| String MachWas(int [] Value) { int x = Value[0]; Value[0]++; return x; // impliziete Typumwandlung }
int A = 10; int[] tmp = new int[1]; // Array erzeugen tmp[0] = A; // und den Wert von A ablegen system.console.println(MachWas(tmp)); A = tmp[0]; // den veränderten Wert von A aus dem Array lesen |
Ein weiterer Minuspunkt aus meiner Sicht ist die implizierte Typumwandlung, die an BASICs Variants erinnert. Und das besonders bei ist der Datentyp Char.
Was kommt bei folgendem heraus:
Quelltext
1: 2: 3:
| char c1 = 'A'; char c2 = 'B'; System.console.println(c1 + c2); |
Man glaubt es nicht: Es kommt heraus: "131". Ein Char wird, wenn er mit einem anderen Char verknüpft wird, zu einer Zahl umgewandelt. Und somit macht der "Compiler" 'A'+'B' zu 65+66, was wiederum 131 ergibt.
Wenn man nun "AB" erhalten will muss man mit Strings tricksen:
Quelltext
1:
| System.console.println(c1 + "" + c2); |
Zudem muss ich sagen, dass Objekt Orientiertes Programmieren etwas wunderbares ist. Man kann es aber auch übertreiben, wie Java zeigt. Wenn man eine Hilfs-Funktion hat, die man gerne mehrmals von verschiedenen Klassen aus aufrufen will, muss man eine Klasse anlegen. Das endet dann in einem Klassenwirrwar, da man wohl eine String-Funktion nicht in der selben Klasse wie eine mathematische Funktion stecken will. Macht man dass dann doch, so ist das OOP Konzept dahin, da die beiden Funktionen (sofern sie nichts miteinandern zu tun haben), wohl nicht zusammen gehören.
Mich stört auch das ewige schreiben von "private", "protected", "public", "package" vor jeder Variablen/Feld-Deklaration. Warum konnte man das nicht so wie in C++ und Delphi lösen. Einmal das Schlüsselwort schreiben und alles was danach folgt hat diese Sichtbarkeit. Bei C# hat man dieses Java-Konzept auch übernommen.
| Zitat: |
| 0+1=1 1+1=2 1+2 = 3 2+3=5 3+5=8 5+8=13.... |
Fibonacci-Zahlen