Java <-> C# Vergleich
-
Cool, jetzt geben sich's die Java und C#-Anhänger zur Abwechslung mal richtig

Und auch hier hat man wieder eine sehr saubere Unterscheidung zwischen getter-[] und setter-[], nicht so wie in C++ wo man diese beiden Fällle gar nicht auseinanderhalten kann.
Scott Meyers stellt in MEC++ eine Technik vor, die eine Unterscheidung zw. Lese - und Schreibzugriff ermöglicht.
MfG
GPC
-
java fan schrieb:
Was mich persönlich auch begeistert hat bei der Programmierung in Java war der massive Einfluss von OpenSource Software. Man denke dabei nur an Ant, Maven, Spring, Struts, Hibernate, etc.. Allesamt Innovationen im Java Bereich, die erst nach und nach auch in der .NET Welt durch Portierungen verfügbar werden.
Irgendwie redest du von einer Einrichtung die eben auf Java ausgerichtet ist. Aber du magst schon recht haben, dass es für Java mehr OpenSource-Libraries gibt.
Bei Java finde ich aber dass es viel mehr viel coolere Entwicklungstools gibt - da hat .NET noch einiges aufzuholen.
Coolere Entwicklungstools? Welche? Eclipse das bis jetzt noch keinen ordentlichen GUI-Designer hat (VE ist ja wohl ein Witz)? JBuilder? IBM-RAD für 5000 Flocken? JDeveloper der außer langsam und oraclebasiert auch noch buggy ist?
Cool ist es natürlich schon, das Eclipse. Aber Visual Studio ist nunmal Visual Studio. Da kommt imho nichtmal IBM-RAD alias Ich-Habe-Alles-Integriert ran

MfG SideWinder
-
Die Sprachen unterscheiden sich dort wo ihre Frameworks eingesetzt werden. Zb Java eher im Serverbereich/Internetbereich. C# eher im Clientbereich.
Achja: Wirklich 'cool' ist nur wer beide Sprachen beherrscht

MfG SideWinder
-
Borland Studio 2006 und gut ist, C++ C# Java Delphi (etc..) Form-Designer.
Alles in einem, und einer für alles
-
GPC schrieb:
Scott Meyers stellt in MEC++ eine Technik vor, die eine Unterscheidung zw. Lese - und Schreibzugriff ermöglicht.
Das ganze Proxy-Gefrickel ist natürlich genauso elegant wie
T this[int index] { get{ ... } set{ ... } }9 Seiten Text um eine armselige Selbstverständlichkeit nicht zu erreichen, denn wie der Autor selber schreibt, können die Proxies die realen Objekte nicht in jedem Kontext ersetzen. Und wieder ein fetter Workaround mehr um ein schlechtdurchdachtes Sprachfeature zu ersetzen. Denn was auch nicht geht ist
T this[int dimension1, int dimension2, HeightLevel level] { ... } // mehrdim. IndizierungNene, das ist nix gescheites mit dem op[] in C++, das musst du schon wirklich mal zugeben.
-
Eclipse das bis jetzt noch keinen ordentlichen GUI-Designer
Hab noch nie einen GUI-Designer gebraucht. habe immer erst auf Papier das Deisgn grob gezeichnet und dann implementiert. Durch die Layouts ist es sehr leicht die Elemente zu plazieren.
Ich sag es immer wieder: Das einzige was ich in Java wirklich vermisse ist Operator-Überladung.
Es ist schon weitaus bequemer stattmath.Vector vec = new math.Vector(10, 10, 10); vec = vec.mul(vec.add(10));,
math.Vector vec = new math.Vector(10, 10, 10); vec = vec * vec + 10;zu schreiben (ist nur ein Beispiel, soll keine math. Korrektheit darstellen).
List<Integer> liste = new ArrayList<Integer>(50); System.out.println(liste[6]);Ist natürlich weitaus konfortabler.
-
Mir fällt auf, dass bei der Diskussion um die "bessere" Programmiersprache immer nur einige Vorzüge genannt werden, die die jeweilige Sprache aufweist. Man sollte jede Programmiersprache als ganzes betrachten. Jede Sprache hat ihre Vor- und Nachteile. Eine Sprache als schlecht zu bezeichnen, nur weil sie zum Beispiel keine Propertyprozeduren direkt als Sprachmittel unterstützt, ist definitiv falsch!
Ich bin immer noch der Ansicht das es im Endeffekt egal ist mit welcher Sprache man anfängt zu programmieren. Die Syntax einer Sprache zu erlernen ist recht einfach, die Konzepte der Programmierung zu verstehen ist schon deutlich komplizierter
-
@DEvent: Mit deinem Op-Beispiel hast du gerade gezeigt warum es manchmal doch besser ist alles auszuschreiben und keine Operatoren zu verwenden

MfG SideWinder
-
SideWinder schrieb:
@DEvent: Mit deinem Op-Beispiel hast du gerade gezeigt warum es manchmal doch besser ist alles auszuschreiben und keine Operatoren zu verwenden

lustigerweise denke ich anders

vec.add(10);
was macht es?
fuegt es das element 10 zum vec hinzu oder addiert es alle elemente zu 10?bei vec+=10;
ist mir das klar :pwie ueberall gilt: vernuenftige namen fuer vernuenftige operationen. und ein op+ ist nichts anderes als ein standardisierter name.
-
Shade Of Mine schrieb:
SideWinder schrieb:
@DEvent: Mit deinem Op-Beispiel hast du gerade gezeigt warum es manchmal doch besser ist alles auszuschreiben und keine Operatoren zu verwenden

lustigerweise denke ich anders

vec.add(10);
was macht es?
fuegt es das element 10 zum vec hinzu oder addiert es alle elemente zu 10?bei vec+=10;
ist mir das klar :pwie ueberall gilt: vernuenftige namen fuer vernuenftige operationen. und ein op+ ist nichts anderes als ein standardisierter name.
In jedem Fall ist es eine Operation, die es mathematisch so nicht gibt. Die stellt ein Fehldesign dar. "Vektor + Skalar" ist Unsinn.
Shade: Was ist das denn jetzt für eine Operation? Mir persönlich ist das nicht klar geworden. Kann immer noch so ziemlich alles sein, weil dieser "standardisierte Name" in diesem Zusammenhang einfach für gar nichts steht?
-
...und: Ich persönlich gehe eigentlich immer davon aus, dass "*" eine höhere Priorität als "+" hat. Die Beispiele sind somit noch nichtmal äquivalent. ...da wurden im zweiten Fall Klammern vergessen. ...etwas, was ohne Operatorüberladung so nicht möglich ist.
-
Also vector += 10 löst bei mir schon auch ein mulmiges Gefühl aus... obwohl ich generell eher ein Befürworter von Operator-Überladung bin. Aber es muss sinnvoll sein, wie in C#. Da ist garantiert, dass && zuerst die linke Seite auswertet, dass += äquivalent zu ... = ... + ... ist und man auf vernünftige Weise zwischen setten und getten beim Indexer unterscheiden kann. Operator overloading kann man also schon vernünftig hinkriegen und dann macht die Sache Spaß.

-
ne vector addition ist fuer mich jetzt nicht wirklich etwas verwirrendes. aber ok. ungewoehnlich ist es allemal, keine frage.
worum es mir aber eher geht ist, dass operatoren ueberladung definierte namen fuer definierte operationen sind und das standard argument "ich kann ja nen op+ machen der subtrahiert" einfach nur bullshit ist

-
Ich bringe einfach mal ein paar Argumente für beide Seiten:
- Das Argument mit dem Framework hebt sich quasi auf da auch Java eine VM braucht (jre) hab aber jetzt keine Ahnung wie groß das teil is'
- Andererseits ist die java virtual machine (noch) viel weiter verbreitet als das Framework. (Liegt wohl an den ganzen Java Applets im Netz)- Ein paar Worte über die Performance:
- Java ist von der Geschwinigkeit her eher ... naja ... laaaaaaaaaaaaaangsaaaaaaaaaaaam (obwohl ich auch durchaus komplexe Programme in Java gesehn hab die flüssig liefen
- C# ist da schon einiges schneller (das liegt wohl am Microsoft-Bonus
)
- Zusätzlich soll ab Windows Vista ANGEBLICH das Framework hardwarebeschleunigt laufen und später sogar die WinAPI ersetzen (ob das gut geht?? o.O)- Über die ganzen Librarys in Java kann ich nicht wirklich was sagen da ich mich mit java nicht so intensiv beschäftigt hab wie mit c#
- Das Framework ist was die Funktionen angeht allerdings gewatlig, was sowohl gut als auch schlecht ist. Denn es kann schonmal vorkommen das ein einziger Funktionsaufruf so ziemlich alles auslöst was das System an Funktionen zu bieten hat ( denn wer weiß schon was das Framework im Hintergrund so alles macht
), und das nagt natürlich an der Performance- Dennoch fehlen dem Framework NOCH einige meiner Meinung nach essentielle Funktionen ( z.B. kann man die Position der Scrollbar einer TextBox nicht bestimmen ohne die API zu kapseln -.-
Naja, die Entscheidung liegt letztendlich bei dir, ich würde dir (falls du es noch nicht kannst) zu C++ raten und dann später auf Java oder C# umsteigen da beide Sprachen auf C/C++ aufbauen
greetz, DeX
-
Optimizer schrieb:
GPC schrieb:
Scott Meyers stellt in MEC++ eine Technik vor, die eine Unterscheidung zw. Lese - und Schreibzugriff ermöglicht.
Das ganze Proxy-Gefrickel ist natürlich genauso elegant wie
T this[int index] { get{ ... } set{ ... } }9 Seiten Text um eine armselige Selbstverständlichkeit nicht zu erreichen, denn wie der Autor selber schreibt, können die Proxies die realen Objekte nicht in jedem Kontext ersetzen. Und wieder ein fetter Workaround mehr um ein schlechtdurchdachtes Sprachfeature zu ersetzen. Denn was auch nicht geht ist
T this[int dimension1, int dimension2, HeightLevel level] { ... } // mehrdim. IndizierungNene, das ist nix gescheites mit dem op[] in C++, das musst du schon wirklich mal zugeben.
Ich gebe ja auch zu, dass es (a) ziemlich suckt und (b) nicht 100% funktioniert, aber du hast behauptet es ginge gar nicht. Und es geht, wenn auch nicht optimal.
-
Coolere Entwicklungstools? Welche? Eclipse das bis jetzt noch keinen ordentlichen GUI-Designer hat (VE ist ja wohl ein Witz)? JBuilder? IBM-RAD für 5000 Flocken? JDeveloper der außer langsam und oraclebasiert auch noch buggy ist?
Cool ist es natürlich schon, das Eclipse. Aber Visual Studio ist nunmal Visual Studio. Da kommt imho nichtmal IBM-RAD alias Ich-Habe-Alles-Integriert ran
Ich habe mich bei der Aussage bezüglich den Entwicklungstools auch gar nicht auf Klicki-Bunti-Editoren bezogen, sondern viel grundlegendere Features, wie Quick Fix, automatische Code Formatierung, interne History, Code Completition über alle Packages hinweg (also auch wenn ich das jeweilige Package nicht importiert habe), bessere Unterstützung für Refactoring, integrierte Unit-Testing Funktionalität (die Team Suite Edition lass ich in dem Fall mal aussen vor), kontinuierliche Builds (was ich bei Visual Studio tagtäglich vermisse), etc..
Da kann ich eigentlich ganz gut damit leben, dass Visual Editor nicht mit dem Windows Forms Designer mithalten kann, denn die GUI wird wohl ohnehin nicht den größten Teil der Anwendung ausmachen.
Für wirklich gelungen halte ich allerdings den Debugger von Visual Studio (ich sag nur Edit&Continue).Aber das schweift halt vom Thema ab, da wir hier IDEs vergleichen und nicht die Sprache selbst.
-
java fan schrieb:
Für wirklich gelungen halte ich allerdings den Debugger von Visual Studio (ich sag nur Edit&Continue).
Das geht doch mit dem Eclipse Debugger auch, wenn die änderung nicht zu schwerwiegend ist, kann man ganz einfach speichern und die Funktion nochmal debuggen.
Kann man beim neuen VS Debugger Funktionen auswerten lassen? Kann man schön Multithreading debuggen, also die Callstacks der einzelnen Threads sehen und durch einfaches anklicken zwischen den Threads welcheln?
-
DerDing schrieb:
java fan schrieb:
Für wirklich gelungen halte ich allerdings den Debugger von Visual Studio (ich sag nur Edit&Continue).
Das geht doch mit dem Eclipse Debugger auch, wenn die änderung nicht zu schwerwiegend ist, kann man ganz einfach speichern und die Funktion nochmal debuggen.
Kann man beim neuen VS Debugger Funktionen auswerten lassen? Kann man schön Multithreading debuggen, also die Callstacks der einzelnen Threads sehen und durch einfaches anklicken zwischen den Threads welcheln?Du stellst Fragen.

Der VS-Debugger ist sogar mit eigenen Debug-Ansichten erweiterbar. Zum Beispiel gibt es für std::vector eine Ansicht im Debugger, die einfach die Elemente Array-mäßig darstellt. Normalerweise sieht man da nämlich vor lauter Template-Gemurks und Implementierungsdetails überhaupt nicht mehr raus, was für Elemente im Vector drin sind. Dito eine Datentabelle. Klickst auf die Lupe und schon kommt ein neues Fenster mit einer Excel-Darstellung der Tabelle (und Editiermöglichkeit). Und man kann auch eigene Debug-Ansichten schreiben.
-
Der Debugger ist gut, ansonsten ist Visual C++ aber eher schrott.
-
Optimizer schrieb:
DerDing schrieb:
java fan schrieb:
Für wirklich gelungen halte ich allerdings den Debugger von Visual Studio (ich sag nur Edit&Continue).
Das geht doch mit dem Eclipse Debugger auch, wenn die änderung nicht zu schwerwiegend ist, kann man ganz einfach speichern und die Funktion nochmal debuggen.
Kann man beim neuen VS Debugger Funktionen auswerten lassen? Kann man schön Multithreading debuggen, also die Callstacks der einzelnen Threads sehen und durch einfaches anklicken zwischen den Threads welcheln?Du stellst Fragen.

Der VS-Debugger ist sogar mit eigenen Debug-Ansichten erweiterbar. Zum Beispiel gibt es für std::vector eine Ansicht im Debugger, die einfach die Elemente Array-mäßig darstellt. Normalerweise sieht man da nämlich vor lauter Template-Gemurks und Implementierungsdetails überhaupt nicht mehr raus, was für Elemente im Vector drin sind. Dito eine Datentabelle. Klickst auf die Lupe und schon kommt ein neues Fenster mit einer Excel-Darstellung der Tabelle (und Editiermöglichkeit). Und man kann auch eigene Debug-Ansichten schreiben.
Du beantwortest meine Fragen nicht.

Kann man z.B. sowas während des Debuggens auswerten?"Hallo".length() + System.currentTimeMillis()Wie siehts mit Multithreading-Debugging aus?