Стендап Сьогодні
📢 Канал в Telegram @stendap_sogodni
🦣 @stendap_sogodni@shevtsov.me в Федиверсі

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

17.07.2025

Мови програмування та їхні узбіччя

Обговорення попереднього поста про jsdate.wtf нагадало мені чомусь старі гоночні ігри. Є серед них такі, де як тільки зʼїжджаєш з дороги, починаєш їхати повільніше та повільніше, аж поки не “завʼязнеш” десь в багнюці. А є NFS: Underground, де межа дороги є стінкою, по якій навіть можна досить успішно ковзати.

Так само різні мови по-різному реагують, коли ти виходиш за межі дозволеного. JavaScript, наприклад, намагається кожне хибне значення хоч якось прийняти. Тобто дозволяє повзти до останнього. З одного боку, це й гарно, що вона така доброзичлива. Особливо в умовах вебскриптів — от взяли ми два текстових значення з inputів, бац — і перемножили їх як числа. Можна й не знати, що число — це інший тип. А далі те число — і вивели як рядок.

Але чим далі від дороги ти відхиляєшся, тим важче просуватися далі, через накопичення нечіткої логіки. Та тим довше потім вертатися назад — чистити програму. Причому — і це головне — в JavaScript ця відповідальність лягає на плечі програмістів, а не мови. Поганий парсер дат? А що ж ти в нього сміття тулиш, треба було перевірити рядок заздалегідь. І таке інше. В цій моделі JavaScript - це такий Mario Kart мов програмування.

Те, що мова динамічна, ще не робить її маріокартом. Наприклад, в Ruby немає неявного перетворення типів, та й парсер дат суворіший. Хоча, певно, всі динамічні мови схильні “увʼязати”. А статичні теж є різні: схильність Swift викинути помилку “цей код надто складний, щоб я міг його перевірити” ще і як дозволяє завʼязнути.

Як протилежний приклад (з мені знайомих): в Go незалучена змінна вважається помилкою. Хочеш ти або не хочеш, але зайвої змінної мати не будеш. Мова за тебе про це попіклується. Навіть коли ти не дуже гарно знаєш, куди рухатись, “стінки” мови тебе спрямують.

Хоч звучить що стінки — це завжди гарно, але є й третій варіант, коли замість стінок ти падаєш з траси. Таку асоціацію навіюють помилки C++ чи Clojure. Багато коли краще вже “проскочити по узбіччю”, ніж ретельно уникати всіх помилок.