Java...



  • Rein von der Sprache aus gesehen ist Java C++ nicht sonderlich überlegen, aber in der Praxis leidet Java nicht unter Programmierern mit Performancewahn (=besserer Code) und profitiert stark von der Standardbibliothek.

    Beispiel 1: Gegeben eine Zeile aus einer CSV-Datei, "a;b;c;d;e;5;g", was ist der Zahlenwert der 7. Spalte?
    1 Zeile Java, >4 Zeilen C++.

    Beispiel 2: Gib einen Integer i in Binärformat aus. 1 Zeile Java, >40 Zeilen C++.

    Oder nehmen wir eine einfache Aufgabe: Kopiere ein Verzeichnis rekursiv. C++ kann das schlicht nicht ohne Zusatzbibliotheken.
    Oder komprimiere ein Verzeichnis als Zip. Kann C++ nicht.

    Das läuft daraus hinaus, dass der C++-Programmierer einige Zeit damit beschäftigt ist, externe Bibliotheken einzubinden, aktuell zu halten, sich in die einzulesen, die der Kollege verwendet hat, Bibliotheken zu ersetzen und Code umzuschreiben weil sie nicht auf Solaris laufen, ...
    Die Gegenrichtung ist, alles selber zu implementieren. Regex? Brauch ich nicht, ich schreib den Parser selber. Führt natürlich zu vielen unnötigen Zeilen, vielen Fehlern und langsamen Code.
    Insgesamt ist man deshalb in Java produktiver.



  • busibusi schrieb:

    externe Bibliotheken einzubinden, aktuell zu halten

    Das wär eigentlich alles gar kein Problem wenn es vernünftige Dependency Management-/Buildsysteme für C++ geben tät, a la Maven oder Gradle. Danach suchste aber vergebens...



  • busibusi schrieb:

    Beispiel 2: Gib einen Integer i in Binärformat aus. 1 Zeile Java, >40 Zeilen C++.

    #include <iostream>
    
    int main(){
        for(int i=0;i<20;++i){
            unsigned n=i;
            char d[12],*e=d+12;
            do
                *--e='0'+n%2;
            while(n/=2);
            std::cout.write(e,12-(e-d))<<'\n';
        }
    }
    

    Wie sieht das in Java aus, also ein ganzen Programm, damit ich es auch testen kann?

    Nebenbei, wir wissen doch beide, daß Java längst tot ist. *hihi*



  • Eine Zeile? Kein Ding. 😉

    #include <iostream> 
    
    template <typename T> 
    void print_binary(std::ostream& stream, T i) 
    { 
        i && (print_binary(stream, i / 2), stream << i % 2 ? '1' : '0'); 
    }
    
    int main() 
    { 
        print_binary(std::cout, 77); 
    }
    


  • cooky451 schrieb:

    stream << i % 2 ? '1' : '0');
    

    wtf 😃
    denk da nochmal drueber nach 🤡



  • In Java die Fibonaccizahlen ausgeben, sollte mit 10 Zeilen leicht gehen. In C++ brauchen erfahrene Programmierer schon mal 40 oder mehr Zeilen ➡ http://www.c-plusplus.net/forum/311250



  • allweare schrieb:

    In Java die Fibonaccizahlen ausgeben, sollte mit 10 Zeilen leicht gehen. In C++ brauchen erfahrene Programmierer schon mal 40 oder mehr Zeilen ➡ http://www.c-plusplus.net/forum/311250

    https://ideone.com/fdaWg7



  • volkard schrieb:

    Nebenbei, wir wissen doch beide, daß Java längst tot ist. *hihi*

    ich bin kein riesen java-fan, aber: schwachsinn!

    mach mal lieber hin, ich will meine fragen an dich von oben beantwortet sehen (mit der DI).



  • dto-depp schrieb:

    mach mal lieber hin, ich will meine fragen an dich von oben beantwortet sehen (mit der DI).

    Ich merke schon, daß Du die Anforderungen um DI herumgestrickt hast, am Ende also fragst, wie macht man DI ohne DI?
    Ich verzettele mich ungern in eine ernsthafte Diskussion mit Unregistrierten. Erst recht nicht in einem so klaren Trollthread.



  • ein getrenntes Schichtenmodell ist also eine um DI herumgestrickte Anforderung... ok ich denke damit können wir die Diskussion bereits beenden, da nun klar ist, wie deine obigen Postings zu bewerten sind. 🤡 danke.



  • Beispiel 1: Gegeben eine Zeile aus einer CSV-Datei, "a;b;c;d;e;5;g", was ist der Zahlenwert der 7. Spalte?
    1 Zeile Java, >4 Zeilen C++.

    Beispiel 2: Gib einen Integer i in Binärformat aus. 1 Zeile Java, >40 Zeilen C++.

    Wenn ich in der Schule bin, also in circa einer Stunde, mach ich dir die Hölle heiß.



  • Sone schrieb:

    Wenn ich in der Schule bin, also in circa einer Stunde, mach ich dir die Hölle heiß.

    LOL, Alter! Lern lieber was, damit was aus dir wird.



  • cooky451 schrieb:

    Eine Zeile? Kein Ding. 😉

    #include <iostream> 
      
    template <typename T> 
    void print_binary(std::ostream& stream, T i) 
    { 
        i && (print_binary(stream, i / 2), stream << i % 2 ? '1' : '0'); 
    }
      
    int main() 
    { 
        print_binary(std::cout, 77); 
    }
    
    template <typename T> 
    void print_binary(std::ostream& stream, T i) 
    { i && (print_binary(stream, i >> 1), stream << ('0' + i & 1)); }
    

    Also wennschon, dann ohne trinären operator. (Annahme: '0' + 1 == '1')



  • Beispiel 1: Gegeben eine Zeile aus einer CSV-Datei, "a;b;c;d;e;5;g", was ist der Zahlenwert der 7. Spalte?
    1 Zeile Java, >4 Zeilen C++.

    k.

    #include <iostream>
    #include <cstdio>
    
    int main()
    {
        int v;
        std::cout << (std::sscanf("a;b;c;d;e;5;g", "%*[^;];%*[^;];%*[^;];%*[^;];%*[^;];%d", &v), v) << std::endl;
    }
    


  • Nehmen wir doch ein einfaches Beispiel: das allseits bekannte Hello World. In Java:

    class foo
    {
      public static void main(String [] args)
      {
        System.out.println("Hello world!");
      }
    }
    

    und in C++:

    #include <iostream>
    
    int main(int argc, char* argv[])
    {
        std::cout << "Hello world!" << std::endl;
    }
    

    Effektiv sind das 6 Zeilen in C++ und 7 Zeilen in Java. Habe ich damit bewiesen, dass C++ um 15% besser ist? Ich denke nicht.

    Betrachten wir mal die Laufzeit. Ich messe einfach mal mit time unter Unix. C++ benötigt 0,004 Sekunden und das Java-Programm 0,272 Sekunden. Also ist C++ um den Faktor 68 schneller!!!

    Das sind Aussagen auf dem Niveau von "Java... 4 mal kürzerer Code". Für das Marketing gut aber fernab der Realität.



  • LOLAlter schrieb:

    Sone schrieb:

    Wenn ich in der Schule bin, also in circa einer Stunde, mach ich dir die Hölle heiß.

    LOL, Alter! Lern lieber was, damit was aus dir wird.

    Wechselstrom kann warten.

    allweare schrieb:

    In Java die Fibonaccizahlen ausgeben, sollte mit 10 Zeilen leicht gehen. In C++ brauchen erfahrene Programmierer schon mal 40 oder mehr Zeilen ➡ http://www.c-plusplus.net/forum/311250

    LOL! Das waren Spaß-Versionen!

    #include <iostream>
    
    int main()
    {
        for( int a = 0, b = 1, o = a; a < 50 ; b += o )
        {
            std::cout << (o = a) << ' ';
            a = b;
        }
    }
    


  • Beispiel 2: Gib einen Integer i in Binärformat aus. 1 Zeile Java, >40 Zeilen C++.

    Eine, bzw. zwei Zeilen inklusive Deklaration:

    #include <iostream>
    #include <bitset>
    
    int main()
    {
        std::cout << std::bitset<sizeof(int) * CHAR_BIT>(54);
    }
    


  • #include <iostream>
    #include <iterator>
    #include <fstream>
    #include <vector>
    
    int main()
    {
        std::ifstream f("txt.txt");
        std::cout << std::vector<char>(std::istream_iterator<char>(f), std::istream_iterator<char>())[10];
    }
    

    Und zwei Zeilen für deine Spalte.



  • Was sollen denn die Spielyeugbeispiele? Ist Datenbank mit drin, oder Monitore, oder Netzwerk ...?



  • Sone schrieb:

    #include <iostream>
    #include <iterator>
    #include <fstream>
    #include <vector>
    
    int main()
    {
        std::ifstream f("txt.txt");
        std::cout << std::vector<char>(std::istream_iterator<char>(f), std::istream_iterator<char>())[10];
    }
    

    Und zwei Zeilen für deine Spalte.

    Ich denke dass a b c d ... Platzhalter sind. Von daher ist die Lösung ungenügend. (Und mit scanf wäre's immer noch schöner !)


Anmelden zum Antworten