Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Объявления типа переменной не требуется, поскольку Smalltalk — динамически типизированный язык.Но ведь в статически типизированных тоже не требуется. Даже больше того. В некоторых языках можно объявлять переменную не назначая ей значение, получится неинициализированная переменная (в си так можно). Так вот в динамически типизированных объявление переменной без типа — аналог объявления переменной без значения в статически типизированных, что не очень хорошо. В статически типизированных такой проблемы нет, если не указать тип, то он все равно будет назначен статически.
несмотря на то, что тип переменной в Smalltalk не указывается, она всегда инициализируется конкретным значениемЗначит и тип всегда при инициализации есть конкретный. Значит там такой же вывод типов. То что вывод типов сначала появился в динамически типизированных языках не значит что не указывать типы можно по причине динамической типизации.
Если есть значение, значит и тип точно есть. Динамическая типизация означает что тип может меняться во время выполнения, но не то что значение может быть вообще без типа.
Значит и тип всегда при инициализации есть конкретный.
Значит там такой же вывод типов.
…
Вывод типов => объявлять тип переменных не нужно. Динамическая или статическая типизация — не важно.
значение может быть вообще без типаИ даже не «может быть», а всегда без типа! Но при этом, Smalltalk — язык со строгой динамической типизацией. :)
И даже не «может быть», а всегда без типа!Тогда типизация бы называлась «никакая». Но она называется «строгая статическая». Там всегда тип есть. Просто нету соответствия между типом и конкретным местом кода.
Тогда типизация бы называлась «никакая».Типизация была бы «никакая», если бы объект можно было заставить выполнить недопустимую операцию.
Но она называется «строгая статическая».Она называется «строгая динамическая» — потому что заставить выполнить «недопустимую операцию» невозможно.
Там всегда тип есть.Типа нет! Я выше объяснил, почему. Не верите — загрузите Pharo (или любую другую реализацию Smalltalk) и убедитесь лично ;) …ну, или найдите его там
В динамических языках проверка типа осуществляется в момент выполнения.Это я и так знал. Странно что осуществляется проверка того чего нет.
Тип — это умозрительная вещь.Когда компилятор статически типизированного языка отказывается компилировать вашу программу из-за несовместимости типов или программа на динамически типизированном языке выкидывает исключение по той же причине — в чей ум она обращается? :)
Язык программирования, помещающийся на почтовой открытке