Найти в Дзене
PHP Боярин

Сколько знаков равенства достаточно?

Программисты портят все вокруг. Даже знак равенства они умудрились испохабить.

Вот что думает нормальный человек, когда видит выражение со знаком равенства? Правильно: значение слева равно значению справа. А программист знает, что у него есть две разные операции: присваивание и сравнение. Поэтому вот этот псевдокод программист понимает нормально, а обычный человек - как ребус:

a = a + 1 (тут мы увеличиваем значение переменной a на единицу, а не пытаемся доказать, что 0 = 1)

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

Например, в Pascal было очень легко отличить присваивание от сравнения. Чтобы мы не перепутали, присваивание сопровождалось двоеточием:

a := 0; (присваивание)
if a = 0 then (сравнение)

В MSX Basic вы должны были догадаться по контексту:

a = 10 (это присваивание)
if a = 10 then (это сравнение)

В Golang решили, что присваивание с двоеточием это зашибись, но можно и простой знак равенства приспособить.

k := 3 (создаем переменную и сразу присваиваем значение)
k = 4 (присваиваем значение уже существующей переменной)
if (k == 0) (а вот это уже сравнение)

В моем любимом PHP не стали мудрить и сделали как в Си:

$a = 1 (присваивание)
if ($a == $b) (сравнение)

И все бы было хорошо, но PHP - язык со слабой типизацией. Когда слева и справа в сравнении разные типы, он производит приведение типов (type casting), поэтому результатом следующих сравнений будет true (истина):

"2" == 2
"2babaka" == 2
100 == "1e2"
[] == false
"false" == true
Гражданин не может понять, почему "false" == true
Гражданин не может понять, почему "false" == true

Это приводит к множеству забавных ситуаций, поэтому у нас есть еще один оператор для сравнения. Встречайте, это оператор под названием "ну прям уаще равно, мамой клянус" - "==="! Да, это, натурально, три знака равенства подряд.

Этот оператор сравнивает значения с учетом типа. Слева и справа должны быть одинаковые значения одинакового типа, иначе оператор вернет false (ложь).

Приведение типов порождает огромное количество безумного веселья, к которому мы обязательно вернемся.

А пока запомните: максимальная типизация, использование строгих сравнений - путь к спокойствию и уверенности.

#программирование #php #программирование для начинающих