Ist ein optionaler / möglicherweise nützlicher Typ in dynamischen Sprachen?


14

Optionalist in einer statisch typisierten Sprache auf offensichtliche Weise nützlich, aber ich frage mich, ob es auch in dynamischen Sprachen nützlich ist. Normalerweise gibt es keinen Compiler, der sagt: "Hey, du hast das Optional<String>als String", also musst du deine Fehler noch zur Laufzeit entdecken. Ich habe einen statischen Schreibhintergrund und aus meiner Sicht kann ich die Vorteile eines OptionalTyps in einer dynamischen Sprache nicht erkennen.

Antworten:


13

Diese Schwäche ist wirklich nicht anders als bei allen Typen in dynamischen Sprachen. Sie müssen es ausführen, um herauszufinden, was darin enthalten ist. Optionen sind in dieser Hinsicht nicht wirklich unterschiedlich.

Optionen sind mehr als nur eine statische Anmerkung, dass ein Wert vorhanden sein kann oder nicht. Mit ihnen sind auch Operationen verbunden. Zugeordnete Operationsketten für Optionen sind eine äußerst nützliche Funktion, mit der Sie nicht nach jedem Schritt in der Kette nach Fehlern suchen müssen.

Selbst wenn Sie den Wert nur sofort abrufen würden, würde er den Programmierer immer noch dazu veranlassen, Nothingdas erste Mal zu überprüfen, dass er ausgeführt wurde und fehlschlug. Ohne eine Option würde dieses Prodding nur stattfinden, wenn es zufällig nulldas erste Mal enthielt, als Sie es ausgeführt haben. So manche Nullzeiger-Dereferenzierung hat hartnäckig gewartet, bis das Produkt auf dem Feld war.


0

Ich kann für Objective-C sprechen.

Da dynamische typisierte Sprachen spät gebunden werden, ist die Überprüfung auf ein "optionales" Element (ein Nicht-Wert wird mit dargestellt nil) inhärent: Wenn Sie zur Laufzeit nach dem Typ suchen, suchen Sie nilimplizit nach. Das ist natürlich verkettbar. Dies geschieht ebenfalls inhärent.

Für statische typisierte Sprachen ist dieses zusätzliche Konzept von Vorteil, da sie die Typentscheidung zur Kompilierungszeit treffen müssen - eine Situation, die dynamische typisierte Sprachen niemals haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.