Bitte um Kritik zu einer meiner C++ Library



  • @_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:

    Das ist so beabsichtigt. Private ist hier weder sinnvoll noch nötig.

    Achso. Dann kommt dieser Fall definitiv auch nie vor, richtig?

    Scaliger s( 17, 1, 2024 );
    s.day = -7;
    

    Dann muss ich meine Antworten revidieren, deine Klasse ist für ihren Anwendungsfall perfekt, da muss nichts weiter gemacht werden. Da sie nur intern benutzt wird greifen hier die üblichen OOP Paradigmen nicht.
    Viel Erfolg bei der weiteren Frickelei.



  • @DocShoe sagte in Bitte um Kritik zu einer meiner C++ Library:

    @_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:

    Das ist so beabsichtigt. Private ist hier weder sinnvoll noch nötig.

    Achso. Dann kommt dieser Fall definitiv auch nie vor, richtig?

    Scaliger s( 17, 1, 2024 );
    s.day = -7;
    

    Richtig.



  • @_ro_ro Sorry, aber das ist doch Blödsinn. Du nennst es library und stellst es Public zum Download bereit. Damit muss man doch davon ausgehen, dass du gewillt bist, die library auch für andere Entwckler zur Verfügung zu stellen. Üblicherweise gestaltet man dann das Public Interface so, dass man nicht groben Unfug damit anstellen kann.

    Wenn du kein Interesse an Feedback, auch betreffend best practise und Style hast, verstehe ich den Sinn dieses Threads nicht



  • @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.

    Damit muss man doch davon ausgehen, dass du gewillt bist, die library auch für andere Entwckler zur Verfügung zu stellen.

    Für Entwickler. Ja.

    Wenn du kein Interesse an Feedback, auch betreffend best practise und Style hast, verstehe ich den Sinn dieses Threads nicht

    Den Unterschied zwischen Kritik und Beleidigung kennen Sie?

    MFG



  • hat ja nicht lang gedauert bist du dich wieder selbst entlarvt hast...



  • @_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.



  • @Schlangenmensch

    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



  • @Schlangenmensch

    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:

    @Schlangenmensch

    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.


  • Gesperrt

    @_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:

    @Schlangenmensch

    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:

    @Schlangenmensch

    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

    Und 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:

    @Schlangenmensch

    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?



  • @Jockelx

    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:

    @Schlangenmensch

    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

    Und 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';
    }
    


  • @firefly

    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.


Anmelden zum Antworten