Bitte um Kritik zu einer meiner C++ Library
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Den Unterschied zwischen Kritik und Beleidigung kennen Sie?
In online Foren ist das du Standard, kannst also gerne dabei bleiben.
Wenn du hier Code zum Review rein stellst gucken da Leute drauf, die mit C++ Entwicklung ihr Geld verdienen und die wahrscheinlich auch Reviews von Kollegen machen. Deren Prämisse ist: was wäre, wenn ich, oder andere Entwckler, mit dem Code weiter arbeiten müsste. Was hätte ich da gerne anders, damit das möglichst reibungslos funktioniert.
Ein entsprechendes Feedback hat @DocShoe dir gegeben.
Die Kritikpunkte hast du damit abgeschmettert, mit dem Argument dass das alles ja nur für dich intern ist und hast nicht mal versucht zu verstehen, woher die Kritik kommt.
Ich persönlich würde mich da als Kritikgeber leicht verarscht vorkommen, denn die Zeit die das aus Freundlichkeit rein investiert wurde, war ja offensichtlich verschenkt.
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
@Schlangenmensch sagte in Bitte um Kritik zu einer meiner C++ Library:
@_ro_ro Sorry, aber das ist doch Blödsinn. Du nennst es library und stellst es Public zum Download bereit.
Nein. Ich stellte es zur Kritik bereit.
Nein, tust du nicht. Du willst keine Kritik, sondern hören, was für'n toller Hecht du bist dass du nach 4 Wochen C++ schon so guten Code schreiben kannst. Dunning-Kruger lässt grüßen.
-
Dann erkläre mir doch einmal bitte was ein professioneller Entwickler erwartet wenn er willkürlich die Eigenschaft einer Klasseninstanz ändert.
MFG
-
Ein paar Schlüsse aus dem bisher kommuniziertem:
-
die numerische Eigenschaft
day
werde ich nicht mehr nach außen sichtbar machen. Stattdessen wird es einen getter geben welcher den Tag als String liefert. -
mit allen anderen Eigenschaften werde ich gleichermaßen verfahren. Denn alles was nach draußen (UI) geht, sind Strings.
-
Außerhalb der Methoden gibt es nichts zu berechnen sondern nur IO und IO heißt String.
-
Gerechnet wird nur in Methoden.
Und weiterhin danke für Meinungen, Statements und Hinweise. MFG
-
-
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
Und ja, ich denke schon daß day, mon, und year selbstsprechende Variablen sind.
MFG
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
MFG
Und du solltest dich mal mit std::exception selbst und von dieser abgeleiteten klassen von std::exception beschäftigen.
Alle direkt von std::exception abgeleitete klassen haben alle einen konstructor der einen string als parameter nimmt
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Dann erkläre mir doch einmal bitte was ein professioneller Entwickler erwartet wenn er willkürlich die Eigenschaft einer Klasseninstanz ändert.
Geht es darum:
s.day = -7;
?
Meiner Erfahrung nach passieren die wenigsten Fehler beim Erstellen neuer Funktionen, sondern beim Erweitern von (Fremd-) Code.
Hier könnte z.B. sowas passieren://Version 1.0.0: Setze Datum int day = 4; s.day = day; // Version 1.0.1: Gaaanz viel weiterer Krams int day = 4; // ...Krams s.day = day; // Version 1.0.2: Day muss vom Benutzer eingegeben werden int day; cin << day; // ...Krams der verdeckt, dass die Lib offenbar keine Lust hat Fehler abzufangen s.day = day;
Die Entwickler waren vielleicht nicht sehr gewissenhaft, aber boshaft war keiner. Trotzdem ist der Code Schrott und der Projektleiter entschuldigt sich, dass er eine Lib vorgeschlagen hat, die noch nicht mal versucht fehlerhafte Handhabung abzufangen.
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
Und ja, ich denke schon daß day, mon, und year selbstsprechende Variablen sind.
MFG
@_ro_ro Wenn man nach einem Review fragt und Hilfe haben möchte, dann muss man auch mit kritischen Antworten zurechtkommen... Du bist doch nicht aus Zucker, und es ist auch noch kein Meister vom Himmel gefallen.
mon für Monat ist denkbar schlecht gewählt und dein err-Handling auch.
-
@firefly sagte in Bitte um Kritik zu einer meiner C++ Library:
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
MFG
Und du solltest dich mal mit std::exception selbst und von dieser abgeleiteten klassen von std::exception beschäftigen.
Alle direkt von std::exception abgeleitete klassen haben alle einen konstructor der einen string als parameter nimmtUnd was ist dann besser, als ein einfaches
throw string("Datum ungültig")
?
-
@omggg sagte in Bitte um Kritik zu einer meiner C++ Library:
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
Und ja, ich denke schon daß day, mon, und year selbstsprechende Variablen sind.
MFG
@_ro_ro Wenn man nach einem Review fragt und Hilfe haben möchte, dann muss man auch mit kritischen Antworten zurechtkommen... Du bist doch nicht aus Zucker, und es ist auch noch kein Meister vom Himmel gefallen.
mon für Monat ist denkbar schlecht gewählt und dein err-Handling auch.
Warum ist das err-Handling schlecht?
-
meine Frage war, was ein Entwickler erwartet wenn er versucht, Eigenschaften von Objekten willkürlich zu ändern. Daß es möglich ist war nicht die Frage.
MFG
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
@firefly sagte in Bitte um Kritik zu einer meiner C++ Library:
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Haben Sie denn versucht, meine Antworten zu verstehen? Warum ich z.B. eine string-Exception werfe?
MFG
Und du solltest dich mal mit std::exception selbst und von dieser abgeleiteten klassen von std::exception beschäftigen.
Alle direkt von std::exception abgeleitete klassen haben alle einen konstructor der einen string als parameter nimmtUnd was ist dann besser, als ein einfaches
throw string("Datum ungültig")
?Zum einen weil für const char strings, wie in deinem Beispiel, memory allokiert wird. (Und Memory allokation können auch exception schmeißen wenn die aktion fehlschlägt)
Zusätzlich kann man eine generischen catch clause nutzen für alle std::exception varianten mit der man auch die Meldung ausgeben kann.
Besonders wenn dann unter umständen auch die c++ runtime oder STL methoden exception schmeißen!void test_function(int day) { if (day < 0) throw std::logic_error("Datum ungültig"); std::string("abc").substr(10); // throws std::out_of_range } try { test_function(); } catch (const std::exception& e) { std::cout << e.what() << '\n'; }
-
Na. Das ist doch mal ne Antwort. Und gleich noch eine Rückfrage, weil das auch bemängelt wurde:
Warum in C++ keine Casts im legacy C-Style?
MFG
-
Ich zeige Ihnen hier mal die Anwendung, damit Sie besser verstehen, warum ich bestimmte Dinge ebenso umgesetzt habe:
#include "Scaliger.cpp" // split am Leerzeichen void split_date(int dmy[], const string &date){ istringstream ss(date); string token; int i = 0; while (ss >> token){ dmy[i] = my::atoi(token); i++; } } void DateCalc(Response &r){ // initial CGI cgi; Scaliger sca; // Systemdatum r.stash("datediff","0"); r.stash("date1", sca.Tag()+" "+sca.Monat()+" "+sca.Jahr() ); r.stash("date2", sca.Tag()+" "+sca.Monat()+" "+sca.Jahr() ); r.stash("datediff","0"); r.stash("wotag1", sca.Tagname()); r.stash("wotag2", sca.Tagname()); int dmy_1[3] = {0,0,0}; int dmy_2[3] = {0,0,0}; if( cgi.param("ccdiff").length() ){ string date1 = cgi.param("date1"); string date2 = cgi.param("date2"); split_date(dmy_1, date1); Scaliger sca1(dmy_1[0], dmy_1[1], dmy_1[2]); split_date(dmy_2, date2); Scaliger sca2(dmy_2[0], dmy_2[1], dmy_2[2]); r.stash("date1", sca1.Tag()+" "+sca1.Monat()+" "+sca1.Jahr() ); r.stash("date2", sca2.Tag()+" "+sca2.Monat()+" "+sca2.Jahr() ); r.stash("datediff", to_string( sca1.datediff(sca1, sca2) )); r.stash("wotag1", sca1.Tagname()); r.stash("wotag2", sca2.Tagname()); } else if( cgi.param("jdadd").length() ){ string date2 = cgi.param("date2"); split_date(dmy_2, date2); string jd_input = cgi.param("datediff"); Scaliger sca2(dmy_2[0], dmy_2[1], dmy_2[2]); Scaliger sca1 = sca2.AddiereTage( my::atoi(jd_input) ); r.stash("date1", sca1.Tag()+" "+sca1.Monat()+" "+sca1.Jahr() ); r.stash("date2", sca2.Tag()+" "+sca2.Monat()+" "+sca2.Jahr() ); r.stash("datediff", cgi.param("datediff")); r.stash("wotag1", sca1.Tagname()); r.stash("wotag2", sca2.Tagname()); } }
Es ist eine Anwendung die Benutzereingaben verarbeitet. Wie Sie sehen, obenstehender Code hat keine Fehlerbehandlung weil diese an einer anderen Stelle über die Response-Erstellung erfolgt.
Anm: Die Response-stash-Methode setzt nur die Platzhalter im HTML-Template.
MFG
-
@_ro_ro
Du verstehst nicht wovon wir hier reden.Deine Ansicht:
Ich habe hier eine Klasse, die für meine Eingaben die richtigen Ergebnisse liefert, bitte Kritik und Verbesserungsvorschläge.Ansicht DocShoe
Die Umsetzung verletzt so ziemlich alle OOP Prinzipien, das ist Murks.Darauf antwortest du:
Deine Einwände sind egal, die Klasse wird sowieso nur intern benutzt. Plausibilitätsprüfungen muss ich nicht machen, das macht das aufrufende Framework schon für mich.Daraus schließe ich:
Du bist nicht an Kritik und Verbesserungsvorschläge interessiert. Dinge wie Wiederverwendbarkeit und Datenkonsistenz spielen hier keine Rolle. Darum spielen Kritik und Verbesserungsvorschläge auch keine Rolle, denn die Klasse tut ja das, was sie soll und liefert die richtigen Ergebnisse. Du argumentierst mit Ergebnissen, ich mit Codequalität, und das verstehst du nicht. Das unterscheidet Frickler und Softwareentwickler. Und damit haben wir beide keine Grundlage, auf der wir über deinen Code diskutieren können.
-
ich kann Sie doch genausogut fragen warum Sie hier im Forum sind. Und was bitte soll daran schlecht sein wenn ich stolz auf das Erreichte bin?
Ansonsten sind hier ja immer noch ein paar Fragen offen. Denn ich will ja auf jedem Fall was lernen, was mir besser gelingen würde wenn die Antworten verständlicher wären.
mfg
-
und noch etwas,
da http://www.willemer.de/informatik/cpp/timelib.htm
Die Zeitfunktionen gehören nicht zu den C++-Bibliotheken, sondern sind ein Erbstück von C.
Meine Frage ist, wenn ich mit
tm *nun;
einen Pointer erstelle, bleibt da nicht ein Speicherleck? Denn die gezeigten Beispiele beinhalten keinfree
oderdelete
MFG
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
ich kann Sie doch genausogut fragen warum Sie hier im Forum sind.
Was tut das zur Sache? Aber na gut: Weil ich von Leuten, die von Softwareentwicklung/C++ mehr Ahnungen haben als ich, Hilfe wollte. Und mit deren Hilfe habe ich viel dazugelernt.
Und was bitte soll daran schlecht sein wenn ich stolz auf das Erreichte bin?
Weil es dich blind macht gegenüber Verbesserungen. Du bist so stolz, dass du Kritik nicht akzeptieren kannst, weil es deine Leistung herabwürdigt und wir das Ergebnis nicht so honorieren, wie du es erwartest.
Ansonsten sind hier ja immer noch ein paar Fragen offen. Denn ich will ja auf jedem Fall was lernen, was mir besser gelingen würde wenn die Antworten verständlicher wären.
Da ist Eigeninitiative gefragt. Ich habe dir Stichpunkte genannt, nach denen man mit <Suchmaschine deiner Wahl> suchen könnte.
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
meine Frage war, was ein Entwickler erwartet wenn er versucht, Eigenschaften von Objekten willkürlich zu ändern. Daß es möglich ist war nicht die Frage.
MFG
Hallo,
wenn du einen 2-Zeiler hast und ein Entwickler in den 2 Zeilen bewusst Blödsinn macht, dann kannst du natürlich die rhetorische Frage stellen, was der Entwickler dann erwartet.
Ich habe versucht an einem Beispiel zu zeigen, warum das aber im Verlauf der Softwareentwicklung vom 2-Zeiler zu einem nicht mehr so offensichtlichen Fehler werden kann und es deshalb wichtig ist, dass man sich auf die libs die man verwendet verlassen können muss.
Und ansonsten schließe ich mich @DocShoe an: Worüber reden wir hier? Ob diese lib die du im stillen Kämmerlein nutzt für dich gut ist oder ob man generell eine Lib so aufbauen würde? Ersteres weißt du selber besser als wir, letzteres wurde zurecht kritisiert (was du doch auch haben wolltest!?).
-
@DocShoe sagte in Bitte um Kritik zu einer meiner C++ Library:
Weil es dich blind macht gegenüber Verbesserungen. Du bist so stolz, dass du Kritik nicht akzeptieren kannst,
Unsinn. Die Kritik habe ich längst umgesetzt. Das zeigt die Anwendungsklasse die ich hier auch gepostet habe: Sämtliche Instanz-Eigenschaften sind private und nur über Gettermethoden zugänglich.
MFG