Czy typ opcjonalny / może jest przydatny w dynamicznych językach?


14

Optionaljest użyteczny w oczywisty sposób w języku o typie statycznym, ale zastanawiam się, czy jest również przydatny w językach dynamicznych. Zwykle nie ma kompilatora mówiącego „hej, użyłeś tego Optional<String>jako String”, więc nadal musisz odkrywać swoje błędy w czasie wykonywania. Mam statyczne tło do pisania i z mojej perspektywy nie widzę korzyści z Optionalpisania w dynamicznym języku.

Odpowiedzi:


13

Ta słabość tak naprawdę nie różni się od wszystkich typów w dynamicznych językach. Musisz go uruchomić, aby dowiedzieć się, co w nim jest. Opcje nie różnią się tak naprawdę pod tym względem.

Opcje to coś więcej niż tylko statyczna adnotacja, że ​​wartość może być lub nie być obecna. Mają również związane z nimi operacje. Łańcuchy odwzorowanych operacji na opcjach to jedna bardzo przydatna funkcja, która pozwala uniknąć konieczności sprawdzania awarii po każdym kroku w łańcuchu.

Nawet jeśli tylko natychmiast odzyskałeś tę wartość, nadal prowokowałby programistę do sprawdzenia, Nothingczy po raz pierwszy uruchomił się i nie powiódł. Bez opcji, to szturchanie odbyłoby się tylko wtedy, gdyby zawierało się nullprzy pierwszym uruchomieniu. Wiele dereferencji wskaźnika zerowego uparcie czekało, aż produkt znajdzie się w terenie.


0

Mogę porozmawiać o Objective-C.

Ponieważ dynamiczne języki typowane wiążą się z opóźnieniem, sprawdzanie „opcjonalnego” (nie-wartość jest reprezentowana przez nil) jest nieodłączne: Jeśli sprawdzasz typ w czasie wykonywania, nildomyślnie sprawdzasz, czy nie. Oczywiście jest to łańcuchowe. Odbywa się to również z natury.

W przypadku języków o typie statycznym ta dodatkowa koncepcja jest korzystna, ponieważ muszą one podjąć decyzję o typie w czasie kompilacji - sytuacja, w której dynamiczne języki o typie nigdy nie miały.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.