Про анотації типів у Python
Колись Python був доволі вдало спроектованою мовою і я з задоволенням на ньому писав .
Потім , десь починаючи з Python 2 . 5 , мова почала скурвлюватися .
Зрештою , я майже перестав її використовувати : змінився і характер розробок , і кращі альтернативи .
Але краєм ока я за ним спостерігаю і навіть , інколи , щось пописую .
Ось недавно у мене і стався маленький проект під Raspberry Pi і Python там виявився доцільним .
Заодно , я краєм ока глянув на анотацію типів .
І побачив шизофренію :
А тепер детально , що не так .
Python являється мовою з динамічною типізацією .
Якщо ви пишете скрипт , чи користуєтесь техніками на кшталт DDD , то це в тему .
Але тут є і два основні недоліки : динаміка дорога в плані швидкодії і , що набагато гірше , неочевидна для програміста .
Поки це невеликий скрипт , це не є проблемою , програміст тримає в голові те , що він передає та хоче отримати , але вже на кількох тисячах рядків або командній роботі це починає давати збої і потрібна інформація про типи , як окремий випадок так званих “ контрактів ” .
Наприклад , “ я передаю число і очікую , що мені повернуть нове число ” .
Зазвичай контракти реалізуються на основі статичної типізації , коли вказується тип параметрів і значення , що повертається .
Це я і спробував зробити у typed_twice ( ) .
У мовах типу Lisp , SmallTalk чи Erlang програміст працює з так званим о́бразом програми і його текстовий редактор бере звідти дані про типи , структуру , зміни в ній , тощо .
Оскільки Python є скриптовою мовою , він не створює такого о́браза , а кожного разу читає , а потім виконує код програми .
Отже , йому нема звідки знати , які типи використовуються , тому залишається тільки статичний аналіз .
Але Python — мова з динамічною типізацією .
Так от , анотації типів і є спробою ввести статику , але не скасовувати динаміку .
Я спочатку подумав , що я чогось не розумію , тому звернувся до документації :
Це виявилося спробою всидіти на двох стільцях .
Тобто вони , в МІНОРНІЙ гілці , поламали сумісність ! і свідомо пішли на порушення контракту просто заради того , щоб ДОПОМОГТИ ТЕКСТОВОМУ РЕДАКТОРУ !
Це те саме , що штовхати справну автівку , щоб їй було легше !
Казкові , просто казкові люди !
З іншої сторони , якщо ти розумієш необхідність статичної типізації , краще взяти щось статичне , наприклад Java , C # , Go чи Swift , а не цю пародію на Java .
Тим більше , що у Java завезли приємне виведення типів .
А якщо дуже хочеться , то це все можна було зробити , не засмічуючи мову , і не ламаючи сумісність на декораторах , десь так :
