Пожалуйста, объясните новичку, что лучше: статическая типизация или динамическая?

Никак не могу понять, зачем нужна статическая, когда есть динамическая, меньше же хлопот? Или со статикой лучше управлять оперативкой? Или это как то на скорость компиляции влияет?
Сори за тупой вопрос(
  • Вопрос задан
  • 739 просмотров
Решения вопроса 1
goszowski
@goszowski
PHP Developer
Это влияет на наличие логических ошибок в проекте. С динамической типизацией очень просто "наделать делов" а потом баг в продакшене.
Cтатика на этапе компиляции покажет ошибку и не дас скомпилировать/выложить в продакшен.
Да, немного больше кода писать, но это того стоит ;)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@InoMono
Если бы какая-то типизация была заведомо лучшей - то на сегодня она осталась бы в гордом победившем одиночестве.

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

Статическая типизация позволяет определенный (и распространенный) вид ошибок определить сразу и сразу же их отсечь. Еще до самого первого запуска приложения.

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

Почему же вообще существует динамическая типизация? Потому что программисту приходится совершать лишние телодвижения, чтобы заполучить в свою программу все эти прелести статической типизации. Эти телодвижения хоть и незначительны, но их приходится совершать часто, так что в сумме получается динамическая типизация экономит кучу времени на написание программы. Но не на её отладку. Отладка программ с динамической типизацией - несколько более трудоемкий процесс.

Поэтому сейчас все шире и шире применяется интересная модификация статической типизации - вывод типов. То есть вам не нужно явно прописывать тип переменной. Вы можете писать так же как и с динамической типизацией. Просто "новая переменная = что_то_там_вычислено_например_возврат_из_функции_или_выражение" и тип для этой новой переменной будет определен сам. Но в дальнейшем изменен он быть не может.
Ответ написан
GhostFantik
@GhostFantik
Golang Developer
Для меня лично статическая типизация лучше! Если ты разбираешься с новой библиотекой/фреймворком, то со статической типизацией проще, т.к ты видишь, что надо передать в метод и что он возвращает(на уровне типов). Динамика, увы, таким похвастаться не сможет.
Ну и разумеется, у статических языков Intelisense(помощь при написании кода) работает лучше, чем у динамических. Сравните Шарп и питон к примеру.
Ответ написан
Комментировать
ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer
Динамическая типизация, это когда ты можешь написать
5 + "5"
И получить "55" с typeof string (гугли "конкатенация").
В языках со статической типизацией ты получишь ошибку - сначала нужно конвертировать все переменные в выражении к одному типу самостоятельно. Вручную нагляднее. Насколько я знаю, а может не знаю, я только js хорошо знаю - он динамический - в языках типа C++ тип данных определяется при определении переменной ключевым словом. int number = 5 или char name = 'nicky'
В js же ключики определения переменной var, let, const хавают любой тип данных, они могут быть и числом, и строкой, и объектом итп
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы