✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Was sind überhaupt Programmiernebenwirkungen?

1

Wann immer wir über bestimmte Programmierkonzepte sprechen, denke ich, dass es wichtig ist, einen Schritt zurückzutreten von den Einzelheiten, die wir diskutieren, und die Dinge im Kontext des Gesamtbildes zu betrachten.

Einige Module führen zu Nebeneffekten; manche nicht. Es ist okay.

Zum Beispiel habe ich gestern kurz die Idee der Programmierung von Nebenwirkungen angesprochen, aber ich habe dies getan, als ich über die Verwendung von PSRs gesprochen habe. Und für diejenigen, die sich einfach für Aspekte des Programmierens im allgemeineren Sinne interessieren, ist es wichtig, sie auch zu verstehen.

Denken Sie daran, die Idee der Nebenwirkungen, wie in PSR-1 angegeben, ist:

Eine Datei SOLLTE neue Symbole (Klassen, Funktionen, Konstanten usw.) deklarieren und keine anderen Nebeneffekte verursachen, oder sie SOLLTE Logik mit Nebeneffekten ausführen, aber NICHT beides.

In diesem Beitrag bin ich nicht so sehr daran interessiert, Logik mit Nebenwirkungen zu diskutieren (weil es Zeiten gibt, in denen Nebenwirkungen auftreten). Stattdessen geht es mir mehr darum, Nebeneffekte der Programmierung zu verstehen (was sie sind, was zu vermeiden ist und so weiter).

Schließlich kann das Reden über Nebenwirkungen in einem Zusammenhang das eine bedeuten, während es beim Programmieren etwas anderes bedeuten kann.

Programmiernebenwirkungen

Okay, die ganze Idee oder Definition einer generischen Nebenwirkung ist einfach, oder?

eine sekundäre, typischerweise unerwünschte Wirkung eines Medikaments oder einer medizinischen Behandlung.

Nehmen Sie den gesamten Behandlungsaspekt heraus, und Sie haben eine "sekundäre, … unerwünschte Wirkung". Okay, hier ist also der möglicherweise verwirrende Teil:

  • wir entscheiden uns für eine Datei,
  • wir wissen, was die Datei tut,
  • Wenn wir also wissen, was wir einschließen und was es tut, wie kann es etwas Unerwünschtes einführen?

So höre ich es zumindest oft gefragt, wenn es um Nebenwirkungen geht. Beim Programmieren habe ich Nebeneffekte immer als alles verallgemeinert, was den Zustand des Programms verändert.

Einfach genug, oder?

Nebenwirkungen in WordPress

Nehmen wir also an, Sie arbeiten mit WordPress, denn das ist es, was ich tue und darüber schreibe 🙂, und wir haben eine Datei, die dafür verantwortlich ist, einem der vorhandenen Menüs der obersten Ebene ein Untermenüelement hinzuzufügen.

Diese Klasse könnte insofern relativ einfach sein, als sie den richtigen WordPress-API-Aufruf umschließt, sie auslöst, wenn sie an [den richtigen] Hook angehängt wird, und dann wie beabsichtigt das Untermenü hinzufügt.

Aber nehmen wir an, entweder diese Klasse, eine Methode in der Klasse oder das Einbinden einer Datei, dass diese Klasse auch etwas JavaScript oder Stile hinzufügt, die den Zustand des Untermenüelements so ändern, dass es hervorgehoben wird, es sich verhält, als ob es „angeklickt” wurde, oder es tut etwas, was entweder das Programm oder der Benutzer nicht beabsichtigt.

Das wäre ein Nebeneffekt, da es den Status des Programms ändert.

Was soll das Modul leisten?

Diese Klasse selbst sollte eines tun :

Das Single-Responsibility-Prinzip ist ein Prinzip der Computerprogrammierung, das besagt, dass jedes Modul oder jede Klasse die Verantwortung für einen einzelnen Teil der von der Software bereitgestellten Funktionalität haben sollte und dass die Verantwortung vollständig von der Klasse gekapselt werden sollte.

Aber wenn wir etwas einführen, das zu dem beiträgt, was es tun soll – wenn wir seine Verantwortung erweitern oder den Kern ändern, den es tut – dann haben wir einen Nebeneffekt eingeführt.

Denken Sie daran, dass dies nicht von Natur aus schlecht ist (gemäß der obigen PSR-1-Definition), aber es ist wichtig zu erkennen, wann wir es tun und wann nicht.

Wie fügen wir also Funktionalität hinzu?

Ich denke, die natürliche Frage ist, wenn wir einem Programm Funktionen hinzufügen wollen, die seinen Zustand ändern, wie machen wir das (und ist es falsch)?

Erstens, nein, es ist nicht falsch. Ich meine, Programme haben unterschiedliche Status basierend auf einer Vielzahl von Dingen, richtig? Manchmal passiert es, wenn etwas auf die Festplatte oder eine Datenbank geschrieben wird; manchmal passiert es, wenn der Benutzer auf ein Element auf der Benutzeroberfläche klickt und so weiter.

Aber wie diese Zustände entstehen, ist der Punkt, an dem die Art der Nebenwirkungen ins Spiel kommt.

Nehmen Sie zum Beispiel die Idee eines Untermenüs. Eines soll es tun. Es sollte nichts anderes ändern als das, was wir auf dem Bildschirm sehen.

  • Es sollte nicht in die Datenbank schreiben,
  • Es sollte keinen Ereignis-Listener einrichten, wenn ein anderes Objekt ein Untermenü hinzufügt,
  • Es sollte die Darstellung von irgendetwas außerhalb seiner selbst nicht verändern.
  • Usw.

Das Hinzufügen von Funktionalität funktioniert auf die gleiche Weise: Sie führen Klassen ein, die für eine bestimmte Sache verantwortlich sind, und lassen sie dies tun. Wenn diese Komponenten miteinander zusammenarbeiten, dann haben Sie ein funktionales Programm, in dem jedes Modul (Klasse/Funktion/was auch immer) sozusagen in seiner Spur bleibt.

Was ist eine Faustregel?

Ich bin sicher, dass viele von Ihnen, die dies lesen, Ihre Meinung darüber haben, was Nebenwirkungen sind und was nicht. Und wie du habe ich meine eigene.

Denk darüber so:

Wenn Sie eine Methode aufrufen und einen Wert zurückgeben, und Sie dann eine Methode erneut mit demselben Datensatz aufrufen, sollte sie denselben Wert zurückgeben.

So wissen Sie, dass Ihre Funktion, Klasse oder Ihr generisches Modul keine Nebenwirkungen hat.

Und wie bei allem habe ich diese Fehler gemacht (und werde wahrscheinlich weitermachen), aber es ist eine Frage des Versuchs, besser darin zu werden, es nicht zu tun.

Irgendwann wird es zur neuen Normalität.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen