Полезен ли тип Optional / Maybe в динамических языках?

14

Optionalполезен очевидным образом в статически типизированном языке, но мне интересно, если это также полезно в динамических языках. Обычно компилятор не говорит вам: «Эй, вы использовали это Optional<String>как String», так что вам все равно придется обнаруживать свои ошибки во время выполнения. У меня есть фон статической типизации, и с моей точки зрения я не вижу преимущества Optionalтипа в динамическом языке.

Даниэль Каплан
источник

Ответы:

13

Эта слабость на самом деле ничем не отличается от всех типов в динамических языках. Вы должны запустить его, чтобы узнать, что в нем. Варианты не очень отличаются в этом отношении.

Параметры - это больше, чем просто статическая аннотация, в которой значение может присутствовать или не присутствовать. У них также есть операции, связанные с ними. Цепочки сопоставленных операций над опциями - это одна очень полезная функция, которая не позволяет вам проверять ошибки после каждого шага в цепочке.

Даже если вы только сразу извлечете значение, он все равно заставит программиста проверить его Nothingв первый раз, когда он запустился и потерпел неудачу. Без опции это подталкивание будет иметь место только в том случае, если оно содержит nullпервый раз, когда вы запустили его. Многие нулевой указатель разыменования упрямо ждал , пока продукт не был в поле.

Карл Билефельдт
источник
0

Я могу говорить за Objective-C.

Поскольку языки с динамической типизацией связываются поздно, присваивается проверка на «необязательный» (не-значение представлено с nil): если вы проверяете тип во время выполнения, вы проверяете его nilнеявно. Конечно это цепной. Это по сути тоже сделано.

Для статических типизированных языков это дополнительное понятие является преимуществом, потому что они должны принимать решение о типе во время компиляции - ситуация, которую динамически типизированные языки никогда не имеют.

Амин Негм-Авад
источник