Programmier Sprache

08/01/2013 09:42 SwarN#31
Quote:
Originally Posted by 'Heaven. View Post
Man jann in den Optionen Strict On einschalten, dann muss man auch alles erst casten
Ich weiß das, man kann es sogar für jede Form/Klasse/Modul extra Ein-/Ausschalten indem man als erstes "Option Strict Off" eingebt.

Aber erzähl mal das den Anfängern dass die das machen sollen ...
08/01/2013 10:26 tolio#32
wenn man ein gescheites buch liest dann steht das direkt am anfang wie man das vs so einstellt das alle projekte option strict anhaben

man kann auch mit option strict off richtig casten wenn man ne ahnung hat was man tut
08/02/2013 18:11 dowhile#33
Quote:
Originally Posted by MrSm!th View Post
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Bitteschön.
Ok. Folgende Fragen dazu (nicht zitiertes ist mir klar / stimme ich mit ein):

Quote:
+ fehlende Operator-Überladung (wobei das wieder ein zweischneidiges Schwert ist, auch wenn mehr dafür spricht als bei der Mehrfachvererbung)
Quote:
- Strings mit .equals() statt == vergleichen zu müssen
Das sehe ich nicht unbedingt als Nachteil. Irgendwie ist es doch auch toll, wenn ein == immer das gleiche macht.

Quote:
- Iterieren über einen String nur mit charAt() oder den Umweg über toCharArray (was unnötige kopiererei mit sich bringt)
Wieso ist das ein Nachteil?

Quote:
- Die häßlichen leeren try/catch-Blöcke
Wieso hast du leere catch-Blöcke?

Quote:
- Ist Java bereits eig. standardisiert?
Quote:
+ teilweise umständliche Konvertierung zwischen intrinsischen Datentypen
Was meinst du (ihr) damit?

Quote:
+ der quasi aufgezwungene K&R-Style
Inwiefern wird der Style aufgezwungen?
08/03/2013 18:13 MrSm!th#34
Quote:
Das sehe ich nicht unbedingt als Nachteil. Irgendwie ist es doch auch toll, wenn ein == immer das gleiche macht.
Wie gesagt, es ist ein zweischneidiges Schwert. Dass man Mehrfachvererbung rausgelassen hat, kann ich durchaus nachvollziehen. Operatorüberladung hat imho mehr Vorteile als Nachteile.
Es ist nicht Aufgabe des Entwicklers der Sprache, den Programmierern sauberes Programmieren beizubringen. Dass man nur offensichtliche Operatoren überladen sollte, ist eigentlich selbstverständlich.
Dass man Vektoren intuitiv mit + addieren kann, siehst du als Nachteil?
Letztendlich sorgt ja erst Operatorüberladung dafür, dass eine gewisse Menge von Operatoren immer das gleiche tun kann. Ohne sie könntest du nämlich keine eigenen Typen addieren oder vergleichen, auch wenn es Sinn machen würde.
Das wiederum macht gerade die Nutzung von String ziemlich umständlich/unnatürlich (btw. da kann man doch auch mit + konkatenieren), denn man vergleicht diese intuitiv mit == (und gerade bei einem eingebauten Typen (anders als bei C++) sollte das ja wohl drin, immerhin war Operator+ ja auch drin).
Allgemein kann ich deine Argumentation da aber nicht ganz nachvollziehen. Methodenüberladung/überschreibung (z.B. eben von equals) ist doch dann genau so schlecht, denn die Funktionalität kann geändert werden.
Letztendlich werden in C++ halt einfach Operatoren auch als Funktionen angesehen und das finde ich sinnvoll.
Quote:
Wieso ist das ein Nachteil?
Ebenfalls die Länge. Ein Zugriff über [] ist wesentlich kürzer.

Quote:
Wieso hast du leere catch-Blöcke?
Weil man nunmal Exceptions nicht nicht catchen darf. Das heißt, dass man sie entweder weiterreichen muss (was im Falle eines Wrappers nicht unbedingt möglich ist und das Problem dann ohnehin nur zum Anwender verschiebt) oder eben catchen und dann ggf. auch nichts tun.
Klar, natürlich kann man Exceptions immer loggen, aber was die Logik des Programms angeht, gibt es manche Fälle, in denen man auf einen Fehler nicht unbedingt reagieren muss oder es gibt ohnehin keine Lösung für den Fehler. Wenn ich eine Verbindung zu einer Datenbank nicht öffnen kann, klar, dann gebe ich das bekannt. Wenn ich sie nicht schließen kann, weil das System sie schon als geschlossen ansieht (z.B. wurde sie vom Gegenüber geschlossen), dann ist das halt so.
Allgemein geht mir das ganze Typsystem von Java auf den Sack, weil es einen dazu zwingt, in jeder Zwischeninstanz Exceptions zu catchen, lokale Variablen aufzuräumen und die Exception weiterzureichen. In C++ ist es dank RAII wesentlich simpler. Wenn ich einen Fehler in einer Funktion nicht behandeln kann, lasse ich es. Die Objekte räumen sich eh selbst auf. Der Fehler wird nur da behandelt, wo es wirklich Sinn macht.
Das erhöht gleichzeitig die Wartbarkeit, sollte sich etwas an der Fehlerbehandlung oder den Fehlern, die eine Funktion werfen kann, ändern.

Quote:
Was meinst du (ihr) damit?
Das ist nicht mehr ganz aktuell, damals fand ich die Unmöglichkeit von float -> int oder enum -> int ziemlich nervig. Gibt aber auch durchaus Gründe, die dafür sprechen. Imho sollte es dennoch nur eine Warnung und kein Fehler sein.
Konkret stört mich aber noch, wie Integer und int (und Äquivalente) getrennt werden. Java ist da mit der Objektorientierung nicht sehr konsequent. In C# ist ausnahmslos alles eine Klasse. In Java ist int != Integer und das nervt in manchem Kontext.
Quote:
Inwiefern wird der Style aufgezwungen?
Da steht ein "quasi" ;O
Im Grunde hat ihn jede IDE für automatische Generierung von wiederkehrenden Snippets voreingestellt, die gesamte Community programmiert darin (wenn du also mal 1-2 Zeilen kopierst, kannst du direkt die Klammersetzung abändern)...irgendwann habe ich aufgegeben und für Java angefangen, den K&R Style zu nutzen.
Dass man bei manchen IDEs die Snippets konfigurieren kann, wurde mir erst später gesagt :x