Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

21

27.11.2008, 10:45

xardias
Ach Java, Java ist Dreck! Schauen wir mal nach... Java betittelt sich selbst als objektorientierte Sprache - Maybe. Aber hat "Primitive Typen", klingelts? objektorientierte Sprache adé. Keine Operatorüberladung (Ich möchte mal wissen was SUN bei String gefrickelt hat für Operator = und +=). Dann diese "Generics", diese Schande.

Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
public static void foobar (List<KlasseA> listeA)
{
    KlasseA a = listeA.get (0);
}

public static void foobar (List<KlasseB> listeB)
{
    KlasseB b = listeB.get (0);
}


Wird nicht kompiliert sondern als Fehler ausgegeben. Warum? Java macht das daraus:

Quellcode

1
2
3
4
5
6
7
8
9
public static void foobar (List listeA)
{
    KlasseA a = (KlasseA) listeA.get (0);
}

public static void foobar (List listeB)
{
    KlasseB b = (KlasseB) listeB.get (0);
}
Kurz: Doppelte Definition --> Compilerfehler. Das was bei Generics angegeben wird, wird nur für Castings benutzt. Erbärmlich.

Netzwerk, naja da vielleicht stimme ich dir zu, aber nach ner Woche eigene Netzwerkklassen in C++ coden ziehe ich meine vor dem von Java vor.

Threads? Jesus... Gerade in Java der größte Dreck ever, wenn man 1x anständig Threads in C# gemacht hat, wo man nicht alles von irgendwelchen dubiosen Interfaces ableiten muss.

Was mich aber am meisten an Java ankotzt ist dieses AWT/Swing-Gefrickel. Sieht zwar auf jeder Plattform gleich aus, aber sieht scheiße aus. Klar man kann bei Swing und AWT das Design des Systems setzen, aber Tabreiter mit Windows-Style oder KDE4-Style usw? Fehlanzeige.

Ich "darf" damit zwar beruflich coden, aber befürworten muss ich diese Schande einer Sprache sicherlich nicht. Ich bin sogar gerade wegen Java so mit und mit am Gucken ob es noch andere Firmen gibt, die in was anständigem Coden.

Drecks Sprache.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

22

27.11.2008, 11:08

Es tut mir leid, dass du gezwungen bist damit zu arbeiten, obwohl du die Sprache nicht leiden kannst.
Aber nur weil du von der Sprache anderes Verhalten erwartest heißt es nicht, dass sie Dreck ist.

Wo ich dir jedoch voll und ganz zustimmen kann ist die Sache mit Swing/AWT. Von der API mag man halten was man will (so wirklich dufte finde ich die auch nicht), aber alleine schon die Tatsache, dass man überall den eigenen Java-UI-Stil durchsetzt statt die nativen Systemelemente zu verwenden finde ich ziemlich mies. Ich würde auch keine UI Anwendung in Java schreiben.

Anonymous

unregistriert

23

27.11.2008, 11:19

xardias
Was ich von einer Sprache erwarte sind selbstverständliche Dinge!

Ich erwarte von einer objektorientierten Sprache, dass alles Objektorientiert ist und mir nicht mit primitiven Typen ankommt. Wenn schon wie bei POSIX "everything is a file" hier gerne ein "everything is an object".

Ich erwarte von Generics, dass es auch richtige Generics sind (wie in jeder anderen Sprache auch!) und diese nicht für Castings benutzt werden, weil die Entwickler von Java ihre Joints nicht stecken lassen konnten, oder anderes Zeug um auf solch bescheuerte Ideen zu kommen genommen haben.

Ich erwarte eine klare Sprache, das bedeutet das nicht alles so zusammengeschustert wird, damit es nur irgendwie läuft. Mein Lieblingsbeispiel: String. Abgeleitet von object, hat aber Operatoren wie primitive Typen. Also wie wurde es realisiert? Es wurde nativ reingefrickelt für diesen Datentyp, weil Java keine Operatorenüberladung kann! Seit 1.5 ist das selbe Spielchen bei "Integer", "Double", "Character" und allen anderen Klassen, die die primitiven Typen kapseln sollen. Aber auf die Idee: "Hey, jetzt machen wir alles objektorientiert und die namen der primitiven Datentypen sind jetzt nur noch aliase für diese Objekte" kommt keiner.

Dann ermöglicht Java auch nicht anständiges Obfuscating. Klar, man kann alle Namen in irgendwelche Buchstaben "umbenennen", verliert dadurch aber komplette Plug-In-, Wartungs- und Ausbaufähigkeit. In dem Thema ist selbst PHP als Scriptsprache weiter. Ich erwarte ja nicht so etwas High-End wie in C++ oder C#, aber wenigstens etwas nützliches womit man sich nicht selbst in den Fuß schießt, wenn man seinen Quelltext sichern will.

Ich erwarte von einer Sprache, dass diese anständig, flexibel und robust ist und das ist Java definitiv nicht. Java ist nur eines: Portabel, zusammengefrickelt, nicht komfortabel und viel zu hoch gehyped. Ein Zeugnis von gutem Marketing, das war es aber auch schon.

Aber wenigstens sind wir uns bei Swing einig, ist ja immerhin ein Anfang ;)

24

27.11.2008, 11:39

Quellcode

1
2
3
4
5
6
7
8
9
public static void foobar (List<KlasseA> listeA)
{
    KlasseA a = listeA.get (0);
}

public static void foobar (List<KlasseB> listeB)
{
    KlasseB b = listeB.get (0);
}


Keine Unwahrheiten verbreiten, es wird sehr schön kompiliert.

Anonymous

unregistriert

25

27.11.2008, 11:47

Memphis
Ja ja, ich erzähle Unwahrheiten. Folgenden Code bekommst du unter der aktuellen Eclipse-Version "Ganymede" und unter dem JBuilder nicht compiliert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.*;
import java.net.*;
import java.util.*;

public final class application
{
    class KlasseA
    {       
    }

    class KlasseB
    {       
    }

    private void foobar (List<KlasseA> listA)
    {
        KlasseA a = listA.get (0);
    }

    private void foobar (List<KlasseB> listB)
    {
        KlasseB b = listB.get (0);  
    }
    
    public static void main (String args[]) 
        throws Exception 
    {
    }
}


Reflection Fehler:

Zitat


- Method foobar(List<application.KlasseA>) has the same erasure foobar(List<E>) as another method in type application
- Method foobar(List<application.KlasseB>) has the same erasure foobar(List<E>) as another method in type application


Und nun lassen wir mal ein Foobar weg und jagen den generierten Code durch einen Disassembler wie JAD:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   application.java

import java.util.List;

public final class application
{
    class KlasseA
    {

        final application this$0;

        KlasseA()
        {
            this$0 = application.this;
            super();
        }
    }

    class KlasseB
    {

        final application this$0;

        KlasseB()
        {
            this$0 = application.this;
            super();
        }
    }


    public application ()
    {
    }

    private void foobar(List listA)
    {
        KlasseA a = (KlasseA)listA.get(0);
    }

    public static void main(String args1[])
        throws Exception
    {
    }
}


Hui! Siehe mal da! Der Herr unsigned long hat ja doch recht gehabt? Nun aber Husch husch wieder zurück in dein trolliges Loch.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

26

27.11.2008, 11:51

Jupp das ist schon richtig. Generics sind in Java nur eine Methode um ein paar Casts zu sparen. Im kompilierten Code sind keine Informationen über die Generics mehr vorhanden. d.h. man kann auch eine List<String> in eine List<Object> casten und ohne Probleme beliebige Objekte einfügen. Ohne Fehlermeldung.

27

27.11.2008, 16:13

Zitat von »"DasBlub"«

ich "darf" in der schule mit java arbeiten... *würg*
wir (3 von 8 leuten aus der klasse) haben unseren "java" lehrer überredet, jetzt dürfen wir c++ (bzw der 3. macht c#) machen ^^ :D

ihr seid noch besser dran wie wir: wir arbeiten im moment in NaWi mit einer SPS, und verwenden für die Programmierung Strukturierten Text (keine Klassen, imo furchtbare syntax, keine Operatoren wie += oder ++), obwohl die zur SPS gehörende IDE/Compiler durchaus C kann :(

28

06.12.2008, 19:05

Also ich würd c++ manchmal sehr gerne vom Parkhaus werfen ...

Anonymous

unregistriert

29

06.12.2008, 19:10

comp
Bitte erörtern.

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

30

06.12.2008, 23:42

Zitat von »"PCShadow"«

Zitat von »"DasBlub"«

ich "darf" in der schule mit java arbeiten... *würg*
wir (3 von 8 leuten aus der klasse) haben unseren "java" lehrer überredet, jetzt dürfen wir c++ (bzw der 3. macht c#) machen ^^ :D

ihr seid noch besser dran wie wir: wir arbeiten im moment in NaWi mit einer SPS, und verwenden für die Programmierung Strukturierten Text (keine Klassen, imo furchtbare syntax, keine Operatoren wie += oder ++), obwohl die zur SPS gehörende IDE/Compiler durchaus C kann :(

ja, das musste ich auch schon durchmacehn und ich habe es gehasst :roll:

Werbeanzeige