NTFS писал(а):Если хочется странного (синглетоны, вроде, уже обсудили и осудили все, кто мог и хотел), то что мешает вместо чертовой инициализации делать так:
Это очень плохой способ, приводящий к ошибкам, которые невозможно исключить. Как костыль - да, но далекий от идеала. Проблема в том, что у Вас нет возможности ограничить видимость переменной (поля) "_MySingleObject" только для функции "function MySingleObject()". Внутри модуля любая функция может ошибочно обратиться напрямую к "_MySingleObject" и Вы получите потенциальную и нестабильную ошибку. Так что это очень и очень опасное предложение. И нужно иметь веские аргументы, чтобы делать именно так. Создавать отдельный модуль только ради одной функции и одной переменной? Не меньшая глупость. Получите миллионы файлов в проекте со всеми последствиями.
Вместо этого есть глубоко продуманная логика с секциями инициализации и финализации, аналогичную конструктору и деструктору класса. Если кто-то просто не умеет пользоваться этим, то это не повод ругать. Это повод научится правильно использовать. Если Вы противник секции инициализации, то значит Вы и против конструкторов. Это так? Хотя вместо отдельного конструктора действительно лучше использовать AfterConstruction.
Предлагаемая Вами фишка иногда применима, но хорошо применима она не на уровне модулей и глобальных переменных, а на уровне классов, когда вместо полей класса, Вы используете свойства класса, и тут за счет наследования, приватности (хотя как раз в паскале с этим есть проблемы), можно отрегулировать область видимость. Также подобная фишка используется там, где нет необходимости всегда создавать объект, и есть выбор либо иметь 0 экземпляров, либо 1 экземпляр класса. Когда всегда 1 экземпляр, то секция инициализации будет намного более правильной.
Добавлено спустя 2 минуты 28 секунд:vitaly_l писал(а):Правильно ли я понял что, uses из секции implementation - грузится раньше чем uses из шапки модуля?
Не помню. Но uses в шапке модуля используется только для того, чтобы использовать типы, из данных модулей. uses в секции implementation нужен для того, чтобы использовать это только в самой секции implementation.
Не нужно засорять секцию Interface всяким мусором.
Добавлено спустя 2 минуты 7 секунд:NTFS писал(а):Ладно, опытные программисты могут использовать что угодно, хоть переменную итерации вне цикла. А новички, почитав стандарт про секции, начинают лепить там все, что должно стартовать при запуске - и потом очень удивляются, когда "в поле" программа падает без единого сообщения об ошибке.
Новичкам просто еще не объяснили, что такое архитектура программного обеспечения. И они от этого делают 1000 разнообразных ошибок. Новичков нужно вначале научить, а уже потом пускать в разработку реальных проектов.