Что такое строгая типизация? Чем она отличается от статической?

Ответ

Строгая типизация (Strong Typing) означает, что язык программирования накладывает строгие ограничения на смешивание переменных разных типов. Неявные преобразования типов (implicit conversions) либо запрещены, либо сведены к минимуму.

Разница между статической и строгой типизацией:

  • Статическая типизация отвечает на вопрос КОГДА происходит проверка типов (на этапе компиляции).
  • Строгая типизация отвечает на вопрос КАК происходит проверка (насколько строги правила смешивания типов).

Go является языком как со статической, так и со строгой типизацией.

Пример строгой типизации в Go:

Нельзя просто сложить int и float64 без явного приведения типа.

var a int = 5
var b float64 = 2.5

// var c = a + b // Ошибка компиляции: invalid operation: a + b (mismatched types int and float64)

// Для выполнения операции требуется ЯВНОЕ приведение типа:
var c = float64(a) + b
fmt.Println(c) // Вывод: 7.5

В языках со слабой типизацией (например, JavaScript) операция 5 + '5' может дать непредсказуемый результат ('55' или 10), так как язык пытается неявно преобразовать типы. В Go такая операция вызовет ошибку компиляции, что делает код более предсказуемым и надежным.

Ответ 18+ 🔞

А, слушай, про типизацию! Ну это вообще отдельная песня, блядь. Вот представь: строгая типизация — это как суровый, блядь, прораб на стройке. Не даст тебе, сука, гвозди в бетономешалку засунуть, потому что это нихуя не совместимо. Всё по правилам, блядь, никакого самодеятельного смешивания хуйни в одну кучу.

Так, а теперь чтобы не запутаться, как последний идиот:

  • Статическая — это про КОГДА тебе по ебалу надают за косяк. То есть сразу, нахуй, при компиляции, пока ещё ничего не запущено. Не ждёт, сволочь, пока всё в проде ебнется.
  • Строгая — это про КАК ЖЕСТКО тебе это ебало набьют. То есть насколько правила драконовские. Нельзя — так нельзя, нихуя, даже не чирикай.

Go, этот красавчик, блядь, он у нас и статический, и строгий одновременно. Два в одном, ёпта! Как бутылка водки с пивом, только полезнее для кода.

Смотри, как он строгость свою проявляет, сука:

Вот ты пытаешься сложить int и float64. А Go тебе: «Ты че, больной? Это же разные, блядь, типы! Идиот, ты что, с дуба рухнул?»

a := 5        // int, ёпта
b := 2.5      // float64, ёмаё

// c := a + b // ОШИБКА, ПИЗДЕЦ! invalid operation: a + b (mismatched types int and float64)
// Компилятор просто охуевает от такой наглости и останавливает всю движуху.

Чтобы это сработало, надо явно, как на паспортном контроле, блядь, показать пропуск — привести тип. Никаких недоговорок!

c := float64(a) + b // Вот так, сука, по-взрослому. Превратил целое в дробное, и только потом складывай.
fmt.Println(c) // 7.5, ура, товарищи!

А в каких-нибудь, блядь, слаботипизированных языках (язык не назову, а то обидятся, мартышлюшки) там такое творится... 5 + '5' — и хрен пойми, что получится: то ли строка '55', то ли число 10. Сам интерпретатор, чувак, гадает на кофейной гуще, что ты имел в виду. Пиздец, а не разработка.

А у нас в Go — чётко, ясно, предсказуемо. Накосячил с типами — получи ошибку компиляции, сиди и думай, э бошка, где проебался. Зато потом не будешь, как дурак, ночью искать, почему на проде всё ебнулось.