Этот вопрос касается семантики
Если я дам вам эти данные: 12
какой это тип? У вас нет возможности узнать наверняка. Может быть целым числом - может быть числом с плавающей запятой - может быть строкой. В этом смысле это очень "нетипизированные" данные.
Если я дам вам воображаемый язык, который позволяет вам использовать такие операторы, как «добавить», «вычесть» и «объединить» с этими данными и некоторыми другими произвольными частями данных, «тип» будет несколько неактуальным (для моего воображаемого языка) (пример : возможно, add(12, a)
дает 109
, что 12
плюс значение ascii a
).
Давайте поговорим о C на секунду. C в значительной степени позволяет вам делать все, что вы хотите, с любым произвольным фрагментом данных. Если вы используете функцию, которая принимает два uint
s - вы можете преобразовать и передать все, что захотите, - и значения будут просто интерпретироваться как uint
s. В этом смысле C «нетипизирован» (если вы относитесь к нему таким образом).
Однако - и переходя к точке зрения Брендана - если я скажу вам, что «Мой возраст 12
» - тогда 12
имеет тип - по крайней мере, мы знаем, что это числовой. С контекстом все имеет тип - независимо от языка.
Вот почему я сказал в начале - ваш вопрос касается семантики. Что означает «нетипизированный»? Я думаю, что Брендан попал в самую точку, когда сказал «никаких статичных типов» - потому что это все, что это могло означать. Люди естественным образом классифицируют вещи по типам. Мы интуитивно знаем, что между автомобилем и обезьяной есть что-то принципиально иное, но нас никогда не учили делать эти различия.
Возвращаясь к моему примеру в начале - язык, который «не заботится о типах» (как таковой), может позволить вам «добавить» «возраст» и «имя» без синтаксической ошибки ... но это не означает, что это логически правильная операция.
Javascript может позволить вам делать самые разные безумные вещи, не считая их «ошибками». Это не значит, что то, что вы делаете, логично. Это разработчик должен работать.
Является ли система / язык, которые не обеспечивают безопасность типов во время компиляции / сборки / интерпретации, «нетипизированными» или «динамически типизированными»?
Семантика.
ИЗМЕНИТЬ
Я хотел добавить сюда кое-что, потому что некоторые люди, кажется, зацикливаются на том, что «да, но в Javascript есть некоторые« типы »».
В своем комментарии к чужому ответу я сказал:
В Javascript у меня могут быть объекты, которые я создал как «Обезьяны», и объекты, которые я создал как «Люди», и некоторые функции могут быть разработаны для работы только с «Людьми», другие - только с «Обезьянами», и третьи только на "Вещах с оружием". Независимо от того, говорилось ли на языке когда-либо о существовании такой категории объектов, как «вещи с оружием», это не имеет отношения к сборке («нетипизированный»), как и к Javascript («динамический»). Все дело в логической целостности - и единственная ошибка будет заключаться в использовании чего-то, что не поддерживает этот метод.
Итак, если вы считаете, что Javascript имеет некоторое "понятие типов" внутри - и, следовательно, "динамические типы" - и думаете, что это каким-то образом "явно отличается от нетипизированной системы", - из приведенного выше примера вы должны увидеть, что любой "понятие типов", которое оно имеет внутренне, действительно не имеет значения.
Например, чтобы выполнить ту же операцию с C #, мне НУЖЕН интерфейс с именем ICreatureWithArms
или что-то подобное. Не так в Javascript - не так в C или ASM.
Очевидно, не имеет значения, имеет ли Javascript какое-либо представление о «типах».
person
Steve
schedule
06.02.2012