Hilfe: Programmierstil so gut?



  • Guten Tag,

    ich hoffe, die Frage passt hier halbwegs hin. Mein Vater ist Programmierer und meine Schwestern und ich würden ihm gerne ein T-Shirt mit einem Stück c-code bedrucken lassen, das mit uns zusammen hängt.

    Kann mir jemand sagen, ob das so für jemanden mit Ahnung vom programmieren ansehnlich ist? Oder was verändert werden sollte?

    #define BROWN 0
    #define BLONDE 1

    enum Name{Daria=1, Lea, Lilly};

    Name Get_Name(bool hair_color, unsigned int size)
    {
    if(hair_color == BROWN) return Lilly;
    else if(hair_color == BLONDE)
    {
    if(size<170) return Lea;
    else return Daria;
    }
    }

    Dann natürlich noch in entsprechender Schriftart.

    Wäre super, wenn sich jemand kurz die Zeit nimmt 🙂



  • @offifee

    bool hair_color

    bool? Warum?

    #define BROWN 0

    Verwende in C++ kein delfine für Konstanten oder Funktionen.

    enum Name{Daria=1, Lea, Lilly};

    Schreibe den „Namen“ mal in die Ausgabe.

    Vielleicht solltest du dir ein C++ Buch zulegen.



  • @manni66 hast du die Frage nicht komplett gelesen? Es geht hier nur um ein Geschenk für den Vater. Ich denke nicht, dass man ein C++ Buch durchlesen muss, damit man ein T-Shirt bedrucken darf 😂

    @offifee sry, ich kann dir die Frage nicht beantworten. Beim Stil lehne ich mich mit meinem Anfängerwissen nicht aus dem Fenster, aber hier gibt es genügend fähige Programmierer, welche dir Auskunft geben werden 😉



  • @manni66

    Vielen Dank für Ihre Antwort.

    So weit wollte ich jetzt nicht gehen, also mir da extra ein Buch zu kaufen und zu lesen 😉

    Bei bool habe ich mir gedacht, dass man sonst ja wieder anfangen müsste, wenn der Wert nicht braun(0) oder blond(1) wäre. Aber das würde man eher nicht so machen?

    Und natürlich ist das so kein komplettes lauffähiges Programm. Es geht nur darum, ob man als Programmierer den Sinn versteht und sich nicht gerade die Haare rauft wegen irgendwelchen stilistischen Sachen 😉

    Aber die Logik an sich müsste ja passen?



  • @Zhavok

    Kein Problem, trotzdem vielen Dank für die Antwort 🙂



  • @manni66 sagte in Hilfe: Programmierstil so gut?:

    delfine

    Was hast Du gegen Delfine!? Ist das eine generelle Aversion gegen schwimmende Wesen und auch Fische!??



  • @Swordfish Fühlen Sie sich nicht angegriffen 😅



  • @Swordfish sagte in Hilfe: Programmierstil so gut?:

    @manni66 sagte in Hilfe: Programmierstil so gut?:

    delfine

    Was hast Du gegen Delfine!? Ist das eine generelle Aversion gegen schwimmende Wesen und auch Fische!??

    Ich liebe die Autokorrektur ...



  • @manni66 blubb.



  • @manni66

    Ich habe auch überlegt, die beiden #define Zeilen rauszulassen. Weil es von der Logik her ja klar ist, was (hair_color==BROWN) bedeuten soll.
    Und der Anspruch ist ja auch wie gesagt nicht, dass der Code so läuft, sondern dass man die Logik erkennt 😉



  • @offifee C oder C++?
    In C könntest du es so machen (damit Manni auch zufrieden wäre und nicht wortlos die Feierlichkeiten verlassen würde).

    const char* Names[] = {"Daria", "Lea", "Lilly"};
    typedef enum tagHairClr {BROWN, BLONDE} HairClr;
    
    const char* Get_Name(HairClr hair_color, unsigned int size)
    {
        if(hair_color==BROWN) return Names[2];
        else if(hair_color==BLONDE)
        {
            if(size<170) return Names[1];
            else return Names[0];
        }
        assert(false);
        return NULL;
    }
    
    int main(void)
    {
        puts(Get_Name(BLONDE, 161));
        puts(Get_Name(BLONDE, 171));
        puts(Get_Name(BROWN, 168));
    }
    

    In C++ könnte eine ChildNotFoundException oder Ähnliches geworfen werden (und auch sonst einiges anders gemacht werden).



  • @yahendrik ich würde sagen, dass nichts dagegen spricht, direkt die Namen zu returnen statt Names[n] - gerade auf einem T-Shirt



  • @yahendrik wow, danke, das ist super 🙂 leider ein bisschen lang, aber es wirkt auf jeden Fall "professioneller". Wenn es optisch von der Länge her noch gut auf das Shirt passt, nehme ich das 🙂



  • @yahendrik was heißt denn das 'assert(false)'? Man könnte auch einfach ein weiteres else machen, oder?



  • @offifee Das ist nur, wenn du zum Beispiel Get_Name(BLONDE+1, 0) aufrufst und so einen Nullzeiger zurückgibst. In der Debugversion wird dann diese Assertion ausgewertet und angezeigt.
    Man kanns natürlich auch ohne diese Behauptung schreiben, mit wobs Vorschlag, die Namen direkt einzufügen, mit switch und etwas kürzer:

    typedef enum tagHairClr {BROWN, BLONDE} HairClr;
    const char* Get_Name(HairClr hair_color, unsigned int size) {
        switch(hair_color) {
            case BROWN: return "Lilly";
            case BLONDE:
                if(size<170) return "Lea";
                else return "Daria";
            default:
                return NULL;
        }
    }
    


  • @yahendrik

    Okay, alles klar 🙂 Vielen Dank, du hast mir sehr geholfen! Ich hab jetzt deine beiden Versionen leicht kombiniert:

    const char* Names[] = {"Daria", "Lea", "Lilly"};
    typedef enum tagHairClr {BROWN, BLONDE} HairClr;

    const char* Get_Name(HairClr hair_color, unsigned int size) {
    switch(hair_color) {
    case BROWN: return Names[2];
    case BLONDE:
    if(size<170) return Names[1];
    else return Names[0];
    default:
    return NULL;
    }
    }

    Also Version 2, nur mit dem Feld in dem die Namen gespeichert sind.

    Also wirklich, vielen Dank 🙂



  • Formatieren hilft der besseren Lesbarkeit:

    const char* Names[] = {"Daria", "Lea", "Lilly"};
    typedef enum tagHairClr {BROWN, BLONDE} HairClr;
    
    const char* Get_Name(HairClr hair_color, unsigned int size) 
    {
        switch(hair_color) 
        {
            case BROWN: return Names[2];
            case BLONDE:
                if(size<170) return Names[1];
                else return Names[0];
            default:
                return NULL;
        }
    }
    

  • Gesperrt

    @offifee sagte in Hilfe: Programmierstil so gut?:

    Kann mir jemand sagen, ob das so für jemanden mit Ahnung vom programmieren ansehnlich ist? Oder was verändert werden sollte?

    Zu viel Text. Besser ein Einzeiler, den auch Leute erahnen, die nur rudimentäre C-Kenntnisse haben. Ein #define mit euren Namen und Conditionals z.B....



  • Ich finds auch zu kompliziert. Aber ich muss auch sagen, die Idee hat was.
    Wenns nur um Leute ginge, die Programmieren können, hätt ich vermutlich versucht etwas "kompliziertes" zu verstecken, wo man nicht so einfach draufkommt. Aber da es ein Geschenk für euren Vater ist, find ichs eigentlich auch recht witzig zu verstehen, was da eigentlich draufsteht.



  • ☹

    • globale Variablen
    • NULL Rückgabe verlangt Extrabehandlung
    • switch/case mit return ist weit weg von "gut"