Was kann C# besser als Java?



  • Helium schrieb:

    Wären da jetzt nciht die ganz fiesen Sprachen, die das Freie Benennen von Operatoren gestatten würde wäre das ganze sicherlich eine gute Erklärung :p

    Ich habe mich in meinen Ausführungen implizit auf C++ und ähnliche Sprachen beschränkt, sprich auf Sprachen, die die Menge der überladbaren Operatoren sowie deren Präzedenzregeln fest definiert (hätte ich vielleicht sagen sollen).

    In dem Moment wo du eigene Operatoren hinzufügen kannst bzw. die Präzedenz eingebauter Operatoren ändern kannst, bist du zweifelsohne in einer ganz anderen Liga mit ganz anderen Regeln. Hier baust du natürlich nicht mehr ausschließlich auf eine "traditionelle" Semantik. Zwar habe ich schon mal mit Sprachen die derartiges bieten (Prolog, Haskel) gearbeitet, wirklich Ahnung habe ich von diesen Sprachen aber nicht. Insofern kann ich dazu nicht viel sinnvolles sagen. Ich denke aber, dass Nutzer dieser Sprachen ganz anders an das Thema rangehen. Wenn ich das richtig sehe sind Operatoren hier ja eigentlich nur Funktionen mit "lustigen" Namen. Es geht hier also wohl nicht so sehr um Polymorphie (neue Implementation für bekannte Operation).



  • Shade Of Mine schrieb:

    Gregor schrieb:

    1. Ja, momentan kann man neben Java nur 189 andere Sprachen nutzen, um Java-Bytecode zu erzeugen: Programming Languages for the Java Virtual Machine

    Und wer macht das?

    Die meisten Sprachen benötigt natürlich keiner. Warum auch: Java ist für die meisten Dinge genausogut oder besser geeignet als andere Sprachen. Allerdings gibt es schon ein paar Sprachen für die JVM, die eine gewisse Relevanz haben. Groovy ist zum Beispiel eine relativ neue Sprache für die JVM, die sehr interessant ist. Ich kann mir auch vorstellen, dass es manchmal sehr gut ist, eine Sprache eines anderen Programmierparadigmas für die JVM zur Verfügung zu haben. Zum Beispiel Prolog und Lisp.

    Für die ganzen Operator-Overloading-Fanatiker hier ist sicherlich ein Pre-Translator wie SubJava oder ein Preprozessor wie JPP interessant, welche einem diese Möglichkeit bieten.



  • Das mit der Lesbarkeit von mathematischen Ausdrücken ist schon ein Argument, aber auch, das man mit einer korrekt benannten Funktion unter Umständen manchmal durchaus besser beraten ist: Bsp.:

    DrawPrimitive drwPrim;//irgendein grafisches Objekt
    POINT ptViewOffset.....
    POINT ptRealCoordOffset.....
    
    drwPrim += ptViewOffset;//was nune??
    
    drwPrim.OffsetRealCoords( ptRealCoordOffset );
    drwPrim.OffsetViewCoords( ptViewOffset );
    

    Für mich, der eher nur Trivial - mathematik anwendet ist das noch kein wirkliches Argument für / oder gegen Java, auch wenn ich rein gefühlsmäßig auch lieber alle Möglichkeiten habe (ich möchte, auch das es schön Kracht, wenn ich mit ungültigen Pointer arbeite :)). this. sieht auch immer noch etwas ungewohnt aus

    Stichwort Präprozessor: Giebt es was vergleichbares in Java / C#?

    [Edit]
    Da hab ich wohl etwas daneben gelegen, es ging ja um C# vs. Java. Da ich beides nur ansatzweise praktisch ausprobiert habe, fällt mir auf, das der Einstieg in C# ein gutes Stück leichter ist. Es ist in C# relativ schnell möglich ein kleines Proggi mit ein paar Zeilen Code zusammen zu bekommen (das sogar irgendwas sinnvolles tut), ohne sich vorher groß damit beschäftigt zu haben.
    Kann aber auch durchaus sein, das ich da als VC Benutzer einfach nur den IDE - Heimvorteil ins Spiel bringe :).



  • Optimizer schrieb:

    Wenn ich mir jetzt einen Operator ::: definiere, was macht er dann? Jetzt sag nicht, das das unsinn sei. Ich finde diese Möglichkeit ziemlich genial.

    Ich absolut nicht. 😞 Für solche krassen Sonderwünsche kann man durchaus mal ne Funktion schreiben. Oder soll ich mir vielleicht 'x' für das Kreuzprodukt und . für mein Skalarprodukt überladen? Da wirst du aber staunen, wenn du den Punkt verwenden willst. 😉

    Nein auf keinen Fall. Das ist es ja. Das sind keine sonderwünsche. Beispielsweise ist das aneinanderhängen zweier Listen in einer funktionalen Sprache genauso essentiell, wie das addieren in der Mathematik. Dementsprechend brauchst du auch eine kurze, übersichtliche Schreibweise.

    @Gregor:
    Danke für die Seite. Auch wenn die meisten Sachen da ciht besonders interessant waren ist JMatch doch verdammt genial und ich werde mich damit mal näher beschäftigen. Java mit Patternmatching wie in funktionalen Sprachen, ... sogar ansatzweise das logische Paradigma. Sieht ziemlich genial aus. 👍

    Wäre Java von sich aus so wäre ich schon längst umgestiegen. Aber JMAtch wird vermutlich weiterhin eine Randgruppensprache bleiben 😞



  • c# ist von microsoft?
    für mich ein grund c# nicht zu lernen...



  • Stimmt, die Sprache ist zwar ISO-Standardisiert, aber bloß nicht lernen, denn MS hat sie entwickelt.
    Du bist bestimmt einer von denen, die daheim alles auf Windows laufen haben, aber trotzdem Microsoft hassen und sich ständig über Abstürze beschweren.



  • ja bin ich!
    ich habe auf 2 festplatten linux und auf einer windows!
    weißt du auch wieso auf der einen windows ist?
    weil zu viele programme auf windows ausgelegt sind.
    und genau das ist das problem!
    an sich ist windows nämlich mist!
    ansonsten benutze ich keine microsoft programme und versuche sie so gut wie möglich zu meiden...
    also komm nicht mit vermutungen.



  • Ohje, bitte nicht schon wieder einen MS vs. "Der Rest der Welt" Flame Thread!



  • Ohje, bitte nicht schon wieder einen MS vs. "Der Rest der Welt" Flame Thread!

    Welcher Rest????

    :p



  • peterchen schrieb:

    Ohje, bitte nicht schon wieder einen MS vs. "Der Rest der Welt" Flame Thread!

    Welcher Rest????

    :p

    😃 👍 👍 👍



  • Sgt Nukem schrieb:

    peterchen schrieb:

    Ohje, bitte nicht schon wieder einen MS vs. "Der Rest der Welt" Flame Thread!

    Welcher Rest????

    :p

    😃 👍 👍 👍

    👎 👎 😃 👍 👍



  • peterchen schrieb:

    Ohje, bitte nicht schon wieder einen MS vs. "Der Rest der Welt" Flame Thread!

    Welcher Rest????

    :p

    viele leute(inkl. die ganzen linuxer) und ich....



  • Korbinian schrieb:

    Gregor@UNI schrieb:

    Das ist ja auch nicht äquivalent. Mit compareTo kannst du auch die Fälle trennen, wo die Objekte gleich sind und wo obj1 > obj 2. Das kannst du mit dem "<" nicht. Du bräuchtest da also einen Operator mit einer dreiwertigen Logik, den es natürlich nicht gibt.

    hm. du meinst wohl sowas:

    int ret = obj1.compareTo(obj2);
    if (ret > 0) // bla
    else if (ret < 0) // blubb
    else // tralla
    

    hm, schön. ich glaub ich hab dich falsch verstanden :p ich jedenfalls verwende den vergleichsoperator immer spezifiziert:

    if (obj1 < obj2) // blubb
    else if (obj1 < obj) // trulla
    else // tralla
    

    oder was hab ich da jetz falsch verstanden? vielleicht dass man nicht 3 operatoren explizit deklarieren muss, sondern alle drein implementierungen in eine klatscht? wie gesagt, geschmackssache 🙂 ich hoff, java 1.5 kanns, weil ich java demnächst für ein größeres projekt hernehmen will

    edit: dito hume, schön argumentiert 🙂

    Dann mach doch mal ein

    String str1 = "Bla", str2 = "Blubb";
    
    If (str1.equals(str2) // Trallala
    else // Wallala
    

    mit herkömlichen Operatoren wie == und Co.



  • @master_tradiaz:

    Mal ehrlich, der ganze Thread ist doch ein "Wozu brauchen wir das, wir haben doch schon alles?" Diese Grundhaltung, das MS sowieso böse ist, und nur abkupfern kann und nix richtiges (und heir so häufig durchscheint), nervt.

    Java ist von Sun? Ein Grund für mich, das nicht zu lernen. :p



  • @peterchen:

    würde ich nicht generell sagen. Bis auf diese letzte Seite war er eigentlich ganz interessant. Schade eigentlich 😞 .

    @all Javajaner:
    Auch wenns eigentlich nicht in diesen Thread gehört:

    Ich warte immer noch auf meine Frage, was vergleichbares zum Präprozessor von C/C++ in Java/C# in die Hand zu bekommen - der würde mir wirklich fehlen... Alle sonstigen Argumente sind für mich zumindest noch keine wirklichen für / oder gegen eins von beiden.



  • TheBigW schrieb:

    Ich warte immer noch auf meine Frage, was vergleichbares zum Präprozessor von C/C++ in Java/C# in die Hand zu bekommen -

    Ich weiß nur, dass es in C# ein "Conditional"-Attribut gibt, mit dem du zusammen mit den eingebauten Präprozessor-Direktiven sowas machen kannst:

    #define debug
    class Foo 
    {
        [Conditional("debug")]
        static void Assert (bool ok, string errorMsg) 
        {
            if (!ok) 
            {
                Console.WriteString(errorMsg);
                System.Environment.Exit(0);
            }
        }
        static void Main (string[] arg) 
        {
            Assert(arg.Length > 0, "no arguments specified");
            ...
        }
    }
    

    Ist debug definiert, wird die Methode Assert aufgerufen. Ansonsten nicht.

    Bedingte Übersetzung ist in C# also kein Problem. Makros sind aber z.B. nicht machbar.

    Letztlich bin ich also überfragt ob es zu C bzw. C++ vergleichbare Präprozessoren für Java und C# gibt. Es stellt sich mir allerdings auch die Frage, wozu ich sowas brauchen sollte. In der Regel bevorzugt man ja doch eher weniger nach Hack aussehende Herangehensweisen 🙂



  • @Hume

    Das ist doch schonmal ein Ansatz. Es geht mir eigentlich auch eher darum eine Möglichkeit zu haben verschiedenen Versionen ein und desselben Projektstandes zu haben, ohne das ganze Chaos zur Laufzeit zu haben. Z.b.: habe ich ein Projekt, wo spezielle Hardware angesprochen wird. Um überall weiterentwickeln zu können habe ich für diese einen Simulator geschrieben. Mittels Präprozessor #define kann man da ja schick zwischen den zwei Versionen hin und herspringen, ohne den Balast der jeweils anderen mit herumzutragen.

    Wenn das was du geschrieben hast so funktioniert (werds bei Gelegenheit mal testen) ist das ein Punkt für C#. Frage ist, ob das auch wie der Präprozessor funktioniert -> ergo, wenn debug nicht definiert wird die Funktion also nicht von der Runtime in Bytecode übersetzt, sprich ignoriert?

    So Ihr Javajaner: Wie würdet ihr das in Java lösen?



  • Ein Präprozessor hat doch recht wenig mit der Programmiersprache zu tun.
    Der Präprozessor löscht Kommentare, ndef Zeilen, usw...
    Da gibt es sicherlich einige Tools die du nutzen kannst, oder schreib
    dir selber einen.

    Jockel



  • peterchen schrieb:

    @master_tradiaz:
    java ist von Sun? Ein Grund für mich, das nicht zu lernen. :p

    schön.allerdings habe ich feste gründe microsoft zu meiden....



  • TheBigW schrieb:

    So Ihr Javajaner: Wie würdet ihr das in Java lösen?

    Du suchst einen Präprozessor für Java? Guck mal meinen ersten Beitrag in diesem Thread an. Wenn du dem Link da folgst, dann kommst du auch eine Seite, wo es Links zu einigen Präprozessoren für Java gibt.


Anmelden zum Antworten