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