Java...
-
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 !)
-
Sone schrieb:
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); }
Und jetzt bitte ohne die führenden Nullen.
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.
Und jetzt bitte ohne die Annahme, dass eine Spalte 1 Zeichen gross ist.
Ja, das sind Spielzeugbeispiele. Aber der Code von Sone zeigt, wie unflexibel und unallgemein C++ doch ist. Die Ironie will, dass in solchen Fällen auf scanf zurückgegriffen werden muss.
-
Darf ich Boost benutzen?
Edit :Wahrscheinlich nicht, oder?
-
Die Ironie will, dass in solchen Fällen auf scanf zurückgegriffen werden muss.
Na und? scanf ist auch C++. Ich benutze scanf gerne und oft in meinen sonst recht idiomatischen C++ Programmen.
Ansonsten könnte man sicher auch einen Einzeiler mit den C++11 Regexfunktionen bauen ... von denen habe ich nur absolut keine Ahnung, weil der GCC-Support bei meinem Versuch nicht existent war, keine Ahnung wie es jetzt aussieht.
Wie sieht eigentlich der Java-Einzeiler aus?
-
dto-depp schrieb:
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.
Du hast viel mehr Anforderungen gebastelt, die alle zusammengenommen erst DI nahelegen. Aber auch nur auf den ersten Blick. Ich denke, wer sich schon im Nick schon als Depp vorstellt, wie groß icht die Wahrscheinlichkeit, daß er kein Troll ist?
-
Sone schrieb:
Darf ich Boost benutzen?
Edit :Wahrscheinlich nicht, oder?Du darfst alles.
Aber denke darüber nach, was es bedeutet, wenn man in C++ für triviale Aufgaben externe Bibliotheken benötigt.
Die Einzeiler in Java sind übrigens
System.out.println(Integer.toBinaryString(1234)); System.out.println(Integer.parseInt("a;b;c;d;e;f;5;g;h".split(";")[6]));
Die idiomatische Binary-Lösung für C++ habe ich schonmal hier gepostet (http://ideone.com/E5Fvnf), wie viele C++-Programmierer verstehen die wohl?
-
Kellerautomat schrieb:
wtf
denk da nochmal drueber nachDas lustige ist, dass da sogar Klammern fehlen, aber es trotzdem funktioniert.
-
busibusi schrieb:
Die idiomatische Binary-Lösung für C++ habe ich schonmal hier gepostet (http://ideone.com/E5Fvnf), wie viele C++-Programmierer verstehen die wohl?
Amn der Verwendung von endl statt '\n' erkenne ich, daß der Autor auch seine Probleme hat.
Inwiefern ist die Lösung "idiomatisch"? Ist es gut, "idiomatisch" zu sein? Warum?
Warum eigentlich
std::cout << bin << 18446744073709551615ull << '\n';
statt
std::cout << bin(18446744073709551615ull) << '\n';
?
-
volkard schrieb:
Du hast viel mehr Anforderungen gebastelt, die alle zusammengenommen erst DI nahelegen. Aber auch nur auf den ersten Blick. Ich denke, wer sich schon im Nick schon als Depp vorstellt, wie groß icht die Wahrscheinlichkeit, daß er kein Troll ist?
das ist eine abkürzung für Definitiv Erfahrener ProjektProgrammierer.
meine frage ist wirklich ernstgemeint. du kannst auch gerne von meinem beispiel etwas weggehen, letztlich werden komplexe schichtenarchitekturen auch mit c++ realisiert. letztlich hat man auch immer abhängigkeiten zwischen den schichten. also was wäre ein alternativer, C++-nativer weg, der DI überflüssig macht (du hast ja gesagt, vernünftige sprachen brauchen keine DI?), respektive was macht DI schlecht? deine postings legen ja nahe, dass du von DI nicht viel hälst.ich freue mich auf deine antwort.
-
dto-depp schrieb:
letztlich hat man auch immer abhängigkeiten zwischen den schichten. also was wäre ein alternativer, C++-nativer weg
Würde mich auch interessieren, davon abgesehen das es viele Wege gibt um DI zu implementieren (und viele DI verwenden, ohne sich dessen bewusst zu sein). Oder anders herum: Was spricht gegen DI, wenn man damit Probleme besser gelöst bekommt. Einfachstes Beispiel (wobei dies wirklich nur ein winziger Aspekt ist): Wie würde man wirklich sauber getrennte Unittests ohne jegliche Form der Indirektion hinbekommen?