Hilfe: Programmierstil so gut?



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


  • was kommt als nächstes? sinnloserprogrammcode, den der compiler komplett wegoptimiert?😃



  • Ich finde die Idee sehr witzig 😉

    Ich musste gerade schmunzeln über die Funktion, die das bei mir und meinen Brüdern ergeben würde... Die wäre kurz und das Ergebnis wäre mit den Funktionsparametern nie eindeutig bestimmbar 😉



  • ja die idee ansich ist witzig, aber zu die optimierungsversuche sind teilweise naja



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

    ja die idee ansich ist witzig, aber zu die optimierungsversuche sind teilweise naja

    naja es muss halt auf ein T-Shirt passen. Da kann produktionsreife Softwarequalität nicht unbedingt der Maßstab sein 😉



  • ja aber es passt besser auf ein t-shirt, wenn man es kürzer und nach optik gestaltet, als nach funktion. und das mit den globalen variablen war halt einfach zu toll. wie wärs noch mit der fehlenden misra-c-konformität? 😀

    ps: ich würde übrigens einfach if-else ohne defines usw. schreiben, weil das sonst einfach zu lang wird.