Я Программирую на Kotlin и Java. Со вчерашнего дня изучаю Python. Я прочитал где-то про динамическую типизацию и подумал как же это круто что язык настолько упростили, что не нужно указывать тип переменной. Но когда я встретил примеры функций и методов, то понял что всё очень плохо. Понять какой тип переменной от нас требуют можно только по названию аргумента в самой функции. Но что если аргумент назван не понятно? Придёться шерстить код чтоб понять, какой тип переменной нужно передать. Это ужасно.
Просто решил поделиться своей болью. Что думаете вы?
Python
Что вы думаете об динамической типизации в Python?
Есть тайпхинтинг (указание предполагаемого типа переменной) и докстринги (описание функций, классов). В нормальном ide это все еще и удобно отображаться будет
Надо различать статическую/динамическую и сильную/слабую типизацию.
В языке C типизация статическая (надо явно объявлять типы переменных), но слабая (разрешено автоматическое неявное преобразование типов) - так что надёжность C-кода ещё ниже, чем надёжность JavaScript-кода.
Сильная (неявное преобразование типов запрещено) статическая типизация позволяет писать многократно более надёжный код - да, за счёт того, что код пишется чуть медленнее. Динамические языки позволяют очень быстро написать скрипт, содержащий множество ошибок, которые интерпретатор не обнаружит.
Хуже всего дела обстоят в JS - там в принципе контроля типов не существует.
Из популярных динамических языков более-менее нормальный контроль типов есть только в PHP (с Ruby работать не приходилось, так что про контроль типов в этом языке ничего не знаю).
Аннотации типов в Python - филькина грамота. Такой код будет выполнен без каких либо предупреждений и ошибок и напечатает xyz:
И никакая IDE не сможет показать все несоответствия типов. Даже полноценные статические анализаторы выявить все ошибки не могут, а уж пародия на статический анализатор, работающая в реальном времени в IDE, тем более.
Но в Python ситуация всё же чуть лучше, чем в JS - за счёт запрета на автоматическое преобразование string <-> number. Впрочем, это не делает типизацию Python сильной: другие автоматические преобразования типов в языке разрешены, так что в Python та же слабая динамическая типизация.
В языке C типизация статическая (надо явно объявлять типы переменных), но слабая (разрешено автоматическое неявное преобразование типов) - так что надёжность C-кода ещё ниже, чем надёжность JavaScript-кода.
Сильная (неявное преобразование типов запрещено) статическая типизация позволяет писать многократно более надёжный код - да, за счёт того, что код пишется чуть медленнее. Динамические языки позволяют очень быстро написать скрипт, содержащий множество ошибок, которые интерпретатор не обнаружит.
Хуже всего дела обстоят в JS - там в принципе контроля типов не существует.
Из популярных динамических языков более-менее нормальный контроль типов есть только в PHP (с Ruby работать не приходилось, так что про контроль типов в этом языке ничего не знаю).
Аннотации типов в Python - филькина грамота. Такой код будет выполнен без каких либо предупреждений и ошибок и напечатает xyz:
def tst(a : dict, b: float) -> bool: return a + b
print(tst('x', 'yz'))
Т.е. в коде типы объявлены, а по факту интерпретатору Python на все эти объявления глубоко насрать.И никакая IDE не сможет показать все несоответствия типов. Даже полноценные статические анализаторы выявить все ошибки не могут, а уж пародия на статический анализатор, работающая в реальном времени в IDE, тем более.
Но в Python ситуация всё же чуть лучше, чем в JS - за счёт запрета на автоматическое преобразование string <-> number. Впрочем, это не делает типизацию Python сильной: другие автоматические преобразования типов в языке разрешены, так что в Python та же слабая динамическая типизация.
типизация упрощает жизнь компилятору или интерпретатору и отчасти программистам , но для последних это лишние телодвижения.. в питоне 3.10 ее можно задавать при желании (видно доходят правильные мысли до разработчиков). по мне очень нужная вещь
поэтому существуют аннотации типов и подсказки в твоей ide.
если аргумент назван непонятно - бей по рукам его создателю и не используйте его код. говнокодеров в любом языке хватает
если аргумент назван непонятно - бей по рукам его создателю и не используйте его код. говнокодеров в любом языке хватает
в котлине тоже вроде не пишут тип переменной. var, val и еще много всякой фигни. мне java больше нравится
Сергей *****
Пишут, но это не является обязательным условием, а var и val - это изменяемая и неизменяемая переменная
Похожие вопросы
- Что такое типизация в языках программирования или как типизация реализована в python??
- Задача на Python. Одномерное динамическое программирование
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Нейронные сети на Python 3.4
- Помогите, как сделать авторизацию в программе на python?
- Что писать на Python?
- Есть ли смысл изучать python
- Подскажите ресурс\книги с примерами по высшей математике и их решений на языке Python
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле