JavaScript является одним из самых популярных языков программирования в мире. Он используется для создания интерактивных веб-приложений, мобильных приложений, игр и многого другого. Однако, одной из основных проблем JavaScript является отсутствие строгой типизации. Это приводит к ошибкам в коде, которые могут привести к непредвиденным последствиям и снижению производительности. Учитывая тот факт, что сейчас мы имеем ситуацию полного доминирования таких форматов как SPA - где все приложение, от логики интерфейсов до верстки и стилизации, написано на JavaScript, проблема типизации встала очень остро...
Ну сегодня поговорим о типах переменных. Точнее о том, что нам с этими типами делать. И что хорошо и что плохо. Есть такой термин "типизация". В сущности по тому, какая типизация принята в данном языке мы относим язык к тому или иному классу. Например, ассемблер считается не типизированным языком. Там нет типов. Там любое данное нужно просто интерпретировать. В одном случае это данное мы будем рассматривать как тип float, а в другом как просто последовательность байтов. Резервирование памяти в этом языке влияет только на то, сколько памяти мы резервируем. Интересен язык bash. Там всё является строками. При необходимости строка может интерпретироваться как число, но в конкретном действии и соблюдении определённых правил. Когда то я любил язык Pascal. Если вы объявили переменную, то она никуда у вас не денется и будет переменной того типа, который вы указали. Строгость языка Pascal внушает уважение. В одной из книжек даже написано, что начинать изучение программирования нужно только с языка Pascal. С автором я никогда не соглашался, поскольку считаю, что главное в программировании это алгоритмическое мышление, но Pascal по-прежнему уважаю и даже иногда пописываю на нём что-нибудь простенькое, если того требует учебный процесс. Pascal это типичный пример с одной стороны статической типизации, т.е. когда тип определяется во время компиляции программы. С другой стороны в Pascal'е типизация строгая. Если вы в программе на языке Pascal попробуете написать что-то типа 2+'34', то это будет ошибкой. А если рядом окажется программист-паскалист, то лучше вам сразу бежать оттуда. Однако есть языки, в которых подобные выражения вполне себе допускаются. Например JavaScript. Язык Си хоть и считается язык со статической и строгой типизацией, но в нём есть хитрые инструменты, позволяющие правилами пренебрегать. Дело, конечно, в указателях, но это отдельный и долгий разговор. Поэтому я бы назвал этот язык языком с не совсем статической и не совсем строгой типизацией. Это язык, который "свой среди чужих и чужой среди своих". Язык Python, которому посвящён данный канал, это язык с динамической типизацией. Тип переменной определяется во время выполнения программы. Написали A=5 и считается, что переменная A имеет целый тип. Но после того, как мы напишем A='qwerty' она тут же превратится в переменную строкового типа. И так произвольное количество раз. Но вот такого безобразия как 2+'2' - этого Python, конечно, не допускает. И с этой точки зрения типизация у Python, конечно, строгая. В Python'е есть, однако, возможность объявлять тип переменной явно. Однако, не стоит обольщаться. Мы, конечно, можем сделать вот такие объявления x: int = 101 y: str Но это абсолютно ничего не значит. Тут же мы можем написать x = 'qwerty' y = 10 и это не будет ошибкой, а переменные получат свой новый тип согласно присвоенным им константам. Точно также можно определить функцию def fn(x: int, y: str) но и это для интерпретатора ничего не значит. Такие объявления он пропускает "мимо ушей". И мы спокойно можем вызвать функцию так fn('sss', 111) Эта питоновская примочка c "объявлением типов", на мой взгляд, просто "ни к селу ни к городу". И так, о чём был сегодняшний мой разговор? Конечно, о многообразии. Сила не в конкретном языке, а в многообразии языков. И сила программиста в том, что он способен быстро перейти с одного языка на другой. Мне, конечно, возразят: да что ты понимаешь, речь же идет о разработках, а это всё стоит денег и нужно готовить программистов, которые бы следовали определённым правилам. Тогда у нас будет меньше потерь и мы заработаем большие деньги. И язык должен быть таким, чтобы программисты ошибок не допускали. Слушайте, оставьте программистов в покое. Занимайтесь лучше обучением ИИ, он теперь у вас есть, а люди пусть останутся людьми. Сила человека не в следовании правилам, а в возможности их несоблюдения. На то он и человек и это ЗАКОН, а не правило. Мой канал Философия программирования Базовый курс программирования на Python