Eigene Funktionen? Bitte nicht!

Kennt ihr dieses Phänomen bei StackOverflow? Ein offensichtlicher Anfänger stellt eine Frage zu einem für ihn noch nicht lösbaren Problem und dann geht der Zauber los. Die Lösung könnte so einfach sein. Statt dessen werden aufwendige Funktionen als Lösung angeboten, die das Problem zwar lösen, aber irgendwie auch unnötig aufwendig sind, weil PHP selbst eine vernünftige, native Lösung anbietet. Heute waren es positive und negative Zahlenwerte, die mit einem entsprechenden Prefix gekennzeichnet werden sollten.

Wann brauche ich eine eigene Funktion

Bleiben wir einfach mal bei einfachen Funktionen. In diesem Fall eben auch einfach zum Formatieren von Zahlenwerten mit einem bestimmten Prefix, je nach dem, ob sie positiv oder negativ sind. Wenn ich das Formatieren von Zahlenwerten in meinem Code mehrfach benutzen möchte, bietet sich eine Funktion an, die den Code einfach kapselt und somit immer wieder verwendbar macht, indem ich die Funktion immer wieder aufrufe.

Im unten gezeigten Fall formatiert die Funktion eine Zahl auf eine Nachkommastelle mit einem entsprechenden Prefix. Die Funktion wird in einer Schleife immer wieder aufgerufen.

function formatWithPrefix($number){
    $finalNumber = number_format($number, 1);
    if ($number > 0) {
        $finalNumber = '+' . $finalNumber;
    }

    return $finalNumber;
}

$numbers = [ '-12.20000', '+18.20000' ];

foreach ($numbers as $number) {
    echo formatWithPrefix($number) . PHP_EOL;
}

Wann brauche ich keine eigene Funktion

Die oben gezeigte Funktion tut genau das, was sie eigentlich soll. Sie kürzt unsere Zahl auf eine Nachkommastelle und fügt ihr ein Vorzeichen hinzu, wenn es sich um eine positive Zahl handelt. Eine Lösung, die funktioniert. Aber warum ist sie dennoch nicht gut?

Eigens geschriebene Funktionen bzw. eigens geschriebene Logik, um etwas bestimmtes auszuführen, obwohl es dafür bereits native, gut funktionierende Lösungen gibt, ist immer arbeitsintensiv. Ich muss mir zunächst den Kopf zerbrechen, wie es funktioniert. Danach muss ich den Code schreiben und testen. Gewartet werden muss der Code hin und wieder auch noch. Was ist eigentlich mit Performance? Ihr seht also, dass die oben gezeigte Funktion zwar das tut, was sie soll, aber gleichzeitig auch jede Menge Nachteile mit sich bringt.

Der größte Nachteil ist aber, dass die Logik dieser Funktion unnötig ist, weil es bereits eine fertige Lösung zum Formatieren von Zahlen in PHP gibt, die genau das tut.

$formatter = new NumberFormatter( 'en_US', NumberFormatter::DECIMAL );
$formatter->setTextAttribute(NumberFormatter::POSITIVE_PREFIX, '+');  

$numbers = [ '-12.20000', '+18.20000' ];

foreach ($numbers as $number) {
    echo $formatter->format($number) . PHP_EOL;
}

Mit der NumberFormatter Klasse kann ich alles das, was ich eben noch in einer eigenen Funktion abgebildet habe, bereits erledigen. Somit ist die oben gezeigte Funktion mit all ihrer Logik einfach überflüssig.

Fazit

Um seinen eigenen Code so schmal und performant wie möglich zu halten und um das Rad nicht immer wieder neu zu erfinden, empfiehlt es sich vor dem Programmieren von eigenen Funktionen zu prüfen, welche Möglichkeiten PHP hier von Hause aus anbietet. Oftmals besitzt PHP für viele Problemstellungen schon eigene Lösungen. Der Arbeitsaufwand beschränkt sich in diesem Fall lediglich darauf die bereits vorhandene Funktionalität anzuwenden.

Also bitte mehr PHP und weniger mit der Kirche ums Dorf.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.