Bedingte Anweisungen innerhalb von Funktionen nach oben verschieben
- Wenn es in einer Funktion eine
if-Bedingung gibt, sollte erwogen werden, sie zum Aufrufer (caller) zu verschieben.
- Anstatt dass die Funktion intern Vorbedingungen prüft und bei nicht erfüllten Bedingungen „nichts tut“, sollte der Aufrufer die Vorbedingungen prüfen, sodass über den Typ garantiert wird, dass die Vorbedingungen erfüllt sind.
- Insbesondere das „Nach-oben-Verschieben“ von Vorbedingungen kann den gesamten Prüfaufwand verringern, was eine der Motivationen für diese Regel ist.
Schleifen nach unten verschieben
- Eine Regel aus dem datenzentrierten Denken: Dabei wird das Konzept eines Objekt-„Batch“ eingeführt, Batch-Verarbeitung als Standardfall genommen und die skalare Version als Sonderfall der Batch-Version behandelt.
- Der Hauptvorteil ist eine bessere Performance; Startkosten können amortisiert werden, und bei der Verarbeitungsreihenfolge kann mehr Flexibilität bestehen.
- Zum Beispiel kann bei FFT-basierter Polynom-Multiplikation die gleichzeitige Auswertung eines Polynoms an mehreren Punkten schneller sein als einzelne Auswertungen.
Meinung von GN⁺
- Das Wichtigste an diesem Artikel sind die beiden Programmierregeln „Bedingungen nach oben verschieben“ und „Schleifen nach unten verschieben“, mit denen sich in der Softwareentwicklung Performance und Klarheit des Codes verbessern lassen.
- Diese Regeln helfen dabei, die Lesbarkeit des Codes zu erhöhen, die Performance zu optimieren und die Wahrscheinlichkeit von Bugs zu verringern.
- Da der Artikel Einblicke darin gibt, wie man die Komplexität des Software Engineering beherrscht und effizienten Code schreibt, ist er für viele Entwickler interessant und nützlich.
1 Kommentare
Hacker-News-Kommentare
ifundforangeordnet sind.for-Schleifen falsch wählt, kann sich die Laufzeit einer Simulation von einer Woche auf eine Stunde verkürzen. Wer aus so einem Hintergrund kommt, optimiert die Reihenfolge vonforundifinstinktiv.ifbesteht darin, dass Vorbedingungen und Nachbedingungen einer Funktion in der Funktionsdefinition selbst nicht mehr direkt sichtbar sind. In großen Projekten können solche Funktionen außerhalb des beabsichtigten Kontexts wiederverwendet werden und Bugs verursachen. Die Verwendung eines Contract-Frameworks könnte eine Lösung sein, allerdings müssen Bedingungen dann sowohl im Vertrag als auch im Code doppelt geschrieben werden.ifsollten eher am Anfang als am Ende einer Funktion stehen, und Fehler sollten sauber propagiert werden.for-Schleifen undif-Anweisungen sind beides Kontrollflussoperationen, daher wirken manche Behauptungen im Artikel bedeutungslos. Das Leistungsargument ist am stärksten, sollte bei allgemeinen Ratschlägen aber zuletzt bedacht werden.walrusab, weshalb sichifnicht nach oben ziehen lässt.ifzum Aufrufer zu verlagern. In Sonderfällen mag das sinnvoll sein, im Allgemeinen möchte man das jedoch nicht. In Bibliotheken sollten Vorbedingungen an den externen Grenzen geprüft werden, damit die interne Implementierung ohne interne Annahmen fortfahren kann. Sich darauf zu verlassen, dass der Aufrufer prüft, würde den Zweck zunichtemachen.