Что такое строгая типизация?

Ответ

Строгая типизация (strong typing) — это свойство языка программирования, при котором тип переменной фиксируется и проверяется на этапе компиляции. Язык не позволяет выполнять операции между несовместимыми типами без явного приведения.

Ключевые характеристики:

  1. Контроль типов на этапе компиляции. Ошибки несоответствия типов обнаруживаются до запуска программы.
  2. Отсутствие неявных, потенциально опасных преобразований. Например, целое число не будет автоматически преобразовано в строку.
  3. Повышение надежности и предсказуемости кода.

Пример в Swift:

var count: Int = 10
// count = "десять" // Ошибка компиляции: Cannot assign value of type 'String' to type 'Int'

let result = count + 5.5 // Ошибка компиляции: Binary operator '+' cannot be applied to operands of type 'Int' and 'Double'
// Требуется явное приведение:
let correctResult = Double(count) + 5.5

Swift — строго типизированный язык с выводом типов (type inference). Компилятор может определить тип из контекста, но после этого тип становится фиксированным и проверяется строго.

let message = "Hello" // Компилятор выводит тип String
// message = 42 // Ошибка: Нельзя присвоить Int переменной типа String.

Противоположность — слабая типизация (например, JavaScript), где типы могут неявно преобразовываться во время выполнения.

Ответ 18+ 🔞

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

Вот представь себе, что ты в армии, сука. У тебя есть автомат — это Int. И есть граната — это String. Так вот, строгая типизация — это такой старший прапорщик-компилятор, который стоит у тебя за спиной и орет: «Ты куда, мудак, сука, гранату в ствол автомата пихаешь?! Они же разные, блядь! Хочешь стрелять — патроны, Int, сука, используй! Хочешь кидать — гранату, String, бери в руку!»

Вот тебе главные приколы этой системы, блядь:

  1. Контроль на этапе построения плана. Ошибки ловятся ещё до того, как ты нажмёшь «пуск» и всё нахуй взорвёшь. Не в бою, а на учениях, так сказать.
  2. Никакого самодеятельного «автомата на гранату». Язык тебе не позволит просто так, по-тихому, число в текст превратить. Сказал «цифра» — будь добр, явно всем покажи, что ты её сейчас в буквы переделываешь.
  3. Код становится предсказуемым, как удар током от оголённого провода. Ты точно знаешь, где что лежит и что с чем можно делать.

Смотри, как это в Swift выглядит, ёпта:

var патроны: Int = 10
// патроны = "десять" // Ошибка компиляции: Ты чё, больной? Нельзя строку в число пихать!

let итог = патроны + 5.5 // Ошибка компиляции: Э, стопэ, дружок-пирожок! Целое (`Int`) и дробное (`Double`) — это разные гильзы, блядь!
// Надо явно сказать, что ты делаешь:
let правильныйИтог = Double(патроны) + 5.5 // Вот так, видишь? Явно превратил `Int` в `Double`. Теперь можно.

А Swift он вообще хитрожопый, блядь. Он может сам догадаться, что у тебя в руках, но потом приклеит это к тебе намертво.

let приветствие = "Здарова" // Компилятор смотрит: ага, в кавычках. Значит, это `String`, текст.
// приветствие = 100500 // Ошибка: Нихуя себе поворот! Ты же только что текст держал, а теперь число суёшь? Не, так не пойдёт.

А противоположность этому — слабая типизация. Это как в том же JavaScript: ну, вроде автомат, а вроде и граната, а хуй его знает, что выстрелит — пуля или осколки. Типы там сами по себе во время работы могут превращаться, как оборотни, блядь. Одни сплошные сюрпризы, в рот меня чих-пых.