Операторы

Миф №1: «Оператор присваивания := — это сложно и нелогично»
Многие, кто переходит на Delphi с C-подобных языков, первым делом спотыкаются о знак :=. Кажется, зачем усложнять? На самом деле это одно из самых продуманных решений в языке. В классическом Pascal (и Delphi) символ = зарезервирован для сравнения, а := чётко показывает: «я присваиваю значение». Вы никогда не перепутаете if x = 5 (проверка) с x = 5 (присваивание), как это бывает в C.
Разница критична для отладки: компилятор сразу выдаст ошибку, если вы случайно напишете if x := 5 вместо сравнения. Это не баг, а фича, которая спасла тысячи часов нервотрёпки. На практике привыкание занимает ровно один вечер — после этого знак равенства в других языках начинает казаться двусмысленным.
Миф №2: «Логические операторы в Delphi работают не так, как везде»
Слышали, что and, or и not в Pascal «тормозят» или ведут себя непредсказуемо? Это заблуждение родом из старых учебников. В современных версиях Delphi (от 2009 и новее) логические операторы короткозамкнутые (short-circuit evaluation). Это значит, что если первое условие в and ложно, второе даже не вычисляется.
Пример: if (Assigned(obj)) and (obj.Value > 10) — безопасно, ошибки доступа не будет. Раньше (до Delphi 7) такое поведение нужно было включать директивой {$B-}. Сейчас оно включено по умолчанию. Так что миф о «нелогичности» живёт только в головах тех, кто не открывал документацию последние 10 лет.
Миф №3: «Case — бесполезная замена if-else, только для чисел»
Начинающие часто считают case устаревшей конструкцией. На самом деле это мощный инструмент, который во многих сценариях работает быстрее и читается легче, чем цепочка if...else if. В Delphi case поддерживает не только целые числа, но и символы, перечисления и даже строки (уточнение: строки — через case с хэшированием, начиная с Delphi 2010).
Сравните два куска кода:
- Четыре вложенных
if— глаза разбегаются, сложно найти логическую ошибку. - Один
caseс четырьмя ветками — структура видна сразу, как расписание поездов.
И главное: компилятор Delphi оптимизирует case в таблицу переходов (jump table). Это даёт константное время выполнения, независимо от количества вариантов. Ни один if не может похвастаться таким.
Миф №4: «Оператор with — зло, его нельзя использовать»
Сколько копий сломано вокруг with! Аргумент: «он делает код нечитаемым, особенно при вложенных with». Согласен, with может быть опасен, если не знать меры. Но это как обвинять молоток в том, что им можно разбить палец.
Вот когда with действительно полезен (и безопасен):
- Работа с одной записью (record) в коротком блоке — код становится короче на 30%.
- Пакетное изменение свойств компонента на форме.
- Чтение полей глубоко вложенной структуры (без with это каша из
MyObj.SubObj.Data).
Правило простое: один with на блок, без вложений, и всегда проверяйте, не перекрываются ли имена. В 2026 году это не более опасно, чем использовать цикл for. Просто не будьте тем парнем, который пишет with Object1, Object2, Object3 do.
Миф №5: «Оператор goto — динозавр, который уместен только в учебниках 1980-х»
Да, во времена структурного программирования goto объявили вне закона. И это справедливо для 99% случаев. Но в Delphi есть ситуации, где goto — не позор, а элегантное решение. Например, выход из глубоко вложенного цикла (когда три уровня for и нужно прервать всё разом).
Конечно, современные альтернативы (исключения, Break с меткой) существуют, но они добавляют лишний код. Один goto EndLoop читается мгновенно и не создаёт оверхеда. Главное — использовать его как редкое исключение, а не как основной инструмент. Если в вашем проекте больше трёх goto — вы что-то делаете не так. Но бояться его как огня — тоже крайность.
Миф №6: «Оператор @ не нужен, всё и так передаётся по ссылке»
Путаница с указателями — классика жанра. Многие думают, что var-параметры и оператор @ (взятие адреса) — это одно и то же. Нет. @ даёт вам сырой адрес в памяти, и это незаменимая вещь при работе с WinAPI, динамическими структурами (списки, деревья) или прямым доступом к памяти.
Вот список случаев, где без @ не обойтись:
- Передача процедур и методов как параметров (callback).
- Создание собственных коллекций на указателях (для максимальной производительности).
- Взаимодействие с DLL на C (где указатели — основной способ передачи).
- Работа с массивами фиксированной длины, когда нужен доступ по смещению.
Оператор @ — это не страшный зверь, а просто инструмент. Как отвёртка: если вы ею гвозди забиваете, то да, будет больно. Но для своей задачи (работа с адресами) он незаменим.
Итог: что на самом деле стоит запомнить про операторы Delphi
Подытожим коротко. Операторы Delphi — не архаизм, а продуманная система, которая прошла проверку десятилетиями. Они не «странные», а просто другие — и в этом их сила. Все мифы, которые мы разобрали, возникают из-за поверхностного знакомства или копирования устаревших советов.
По-настоящему опасны не операторы, а непонимание их работы: незнание короткозамкнутых вычислений, боязнь case или with, паника перед указателями. Потратьте один вечер на осознанное чтение документации (или хорошей статьи) — и вы перестанете верить в страшилки. Delphi 2026 — это современный, мощный язык, где операторы работают предсказуемо и эффективно. Доверяйте компилятору и проверенным практикам, а не слухам из курилки.
Добавлено: 27.04.2026
