Uniadmin
Skip to content

Warum verlassen so viele Programmierer ihre Funktionen nicht mit return?

Schau dir ein­mal die­se Funk­ti­on an, sie lie­fert als Ergeb­nis das Pro­dukt der Argu­men­te $x und $y, sofern bei­de vom Typ Inte­ger sind. Ist eines der Argu­men­te nicht von Typ Inte­ger, lie­fert die Funk­ti­on false.


function mult ( $x, $y ) {
    if ( is_integer ( $x ) ) {
        if ( is_integer ( $y ) ) {
           $result = $x * $y;
        }
        else {
           $result = false;
        }  
    }
    else {
        $result = false;
    }
    return $result;
} 

War­um schrei­ben so vie­le Pro­gram­mie­re so schlecht les­ba­ren Code? Es scheint kaum ein Open-Source-Pro­jekt zu geben, das nicht sol­che Kon­struk­tio­nen ent­hält, wo sich die Ifs bis zu einer Tie­fe von min­des­tens 128 schach­teln, die sich dann selbst mit zwei 27-Zoll-Bild­schir­men nicht ver­nünf­tig dar­stel­len lassen.

War­um nicht ein­fach die Funk­ti­on mit return ver­las­sen, wenn eine Bedin­gung nicht greift? Zum Bei­spiel so:

function mult ( $x, $y ) {
 
    if ( !is_integer ( $x ) ) 
        return false;
 
    if ( !is_integer ( $y ) )
       return false;
 
    return x * y;
}

Oder so:

function mult ( $x, $y ) {
 
    if ( !is_integer ( $x ) || !is_integer ( $y )  ) 
        return false;
 
    return x * y;
}

Ist es so schwer, les­ba­ren Code zu schrei­ben? Oder ist es so leicht, unles­ba­ren Code zu schrei­ben? Ist es cool, ist es hip, ist es Sport, die Ifs bis zum Umfal­len zu schach­teln? Ist es Aus­druck von Wohl­stand? “Äa was? Ihr könnt mei­nen Code nicht lesen? Ihr könnt euch wohl kei­ne zwei 27-Zoll- Bild­schir­me leis­ten?” Oder füh­len sich die Pro­gram­mie­rer damit beson­ders skil­led und mei­nen, wer bei mehr als 16 geschach­tel­ten Ifs den Über­blick ver­liert, ist ein schlech­ter Coder?

Und neben­bei … wie gefällt das fol­gen­de? Ist das gut oder schlecht?

function mult ( $x, $y ) {
    return is_integer ( $x ) && is_integer ( $y ) ? x*y : false;
}

Es müs­sen gar nicht mal geschach­tel­te Ifs sein. Es reicht ein ein­zi­ges If zu Beginn einer 20 Sei­ten lan­gen Funk­ti­on, um den Code schlech­ter les­bar zu machen. Zum Bei­spiel so:

static void drawWindowContent()
{
        if (screen_is_visible) {

                19 Seiten Code ...

Um nun her­aus­zu­fin­den, was pas­siert, wenn screen_​is_​visible nicht wahr ist, scrol­len wir auf Sei­te 20 und finden …


                20. Seite Code ...
        }
}

… nichts. Es wird nichts gemacht, wenn screen_​is_​visible nicht wahr ist. War­um nicht ein­fach die Funk­ti­on zu Beginn mit return ver­las­sen, ver­dammt noch mal? Ist es so schwer, einen logi­schen Aus­druck zu negieren?

static void drawWindowContent()
{
        if (!screen_is_visible)
                return;


        20 Seiten Code ...

Selbst, wenn es auf Sei­te 20 noch einen Else-Zweig geben soll­te, kommt es der Les­bar­keit nor­ma­ler­wei­se zugu­te, wenn die Funk­ti­on mög­lichst früh mit return ver­las­sen wird.

Anstatt

static void drawWindowContent()
{
        if (screen_is_visible) {
                20 Seiten Code ...
        }
        else {  
                printf("Error: Screen is not visible\n");
        }

}

schrei­ben wir

static void drawWindowContent()
{
        if (!screen_is_visible) {
                printf("Error: Screen is not visible\n");
                return;
        }

        20 Seiten Code ...
}

Aber dazu muß schon wie­der ein logi­scher Aus­druck negiert wer­den. Ist es das, was so vie­le nicht kön­nen? Sind so vie­le Coder so schlecht skil­led, daß sie nicht wis­sen, wie logi­sche Aus­drü­cke negiert werden?

Es ist übri­gens mit Sicher­heit nicht nur den Open-Source-Pro­jek­ten vor­be­hal­ten, mit schlech­tem Code zu glän­zen. Bei Clo­sed-Source-Soft­ware sehen wir den Mist nur nicht.

Tags: Programmieren

    Schreib einen Kommentar