Можно ли добавить assert в качестве ключевого слова в Delphi?

Я пишу пару "assert(...)" в коде, чтобы убедиться, что предварительные и последующие условия должны быть выполнены. Мы можем указать компилятору Delphi, следует ли компилировать с утверждениями в отладочной версии и без утверждений в релизной версии.

Я хотел бы знать, возможно ли выделить "утверждать", как и другие ключевые слова Pascal?


person stanleyxu2005    schedule 02.04.2010    source источник


Ответы (5)


Assert, как и многие другие, казалось бы, «зарезервированные слова», на самом деле являются так называемыми «стандартными функциями».

Exit, Break, Continue и Assert являются примерами символов, которые не зарезервированы компилятором, а скорее существуют как символы в пространстве имен модуля «System». Причина в том, что в Delphi (или, точнее, в Turbo Pascal) изначально не было таких понятий, как Exit, Break, Continue или Assert. Многие существующие пользователи, возможно, уже использовали эти идентификаторы для своих собственных библиотек. Если бы мы сделали эти идентификаторы зарезервированными словами, мы бы сломали многие существующие приложения. Создавая их как «стандартные функции» и «привязывая» их к системному модулю, мы могли предоставлять дополнительные функции без риска нарушения существующего кода. В какой-нибудь библиотеке, имеющей, скажем, собственную функцию Exit, это не повлияет на использование программой этого идентификатора. Однако, если программист явно хотел использовать стандартную функцию Exit, вы можете полностью указать идентификатор, подобный этому «System.Exit», и компилятор сгенерирует код для выхода из текущей функции, а не для вызова Exit, который ближе по объему.

person Allen Bauer    schedule 02.04.2010
comment
может быть, было бы здорово, если бы следующая Delphi могла добавить больше гибкости в подсветку кода. - person stanleyxu2005; 03.04.2010
comment
Вы объясняете, почему ASSERT() не обрабатывается компилятором как ключевое слово, но это не причина, по которой он и аналогичные операторы управления потоком не могут быть обработаны как отдельный случай < я>маркер. Простой ответ на вопрос, можно ли рассматривать эти операторы как если бы они были зарезервированы подсветкой синтаксиса, — да, и вы могли бы сделать это очень легко. Таким образом, ваш ответ неверен, потому что он объединяет поведение подсветчика с поведением компилятора. - person Deltics; 06.04.2010
comment
Подсветка синтаксиса недостаточно чувствительна к контексту, чтобы знать, является ли конкретный идентификатор версией System.Exit или идентификатором из другой более близкой области. - person Allen Bauer; 20.11.2011
comment
-1 Я понизил этот ответ, потому что он не отвечает на вопрос, можно ли выделить это слово, но объясняет, почему Assert не выделено. - person Wodzu; 04.04.2013

На самом деле Assert не является зарезервированным словом.
Вы можете создать свою собственную процедуру или функцию Assert, и даже если это не рекомендуется, она будет скомпилирована.
Поэтому выделение с помощью Assert невозможно.

person Francesca    schedule 02.04.2010

Нет. Подсветку Delphi нельзя так настроить. Вы можете настроить цвет ключевых слов, но вы не можете указать, какие слова считаются ключевыми.

Если вы имели в виду этот вопрос как запрос функции, отправьте его на Центр качества. Stack Overflow не место для этого.

Поскольку вы проверяете предусловия и постусловия, ваши утверждения должно быть довольно легко найти даже без выделения: они будут первым и последним утверждениями в любой функции.

person Rob Kennedy    schedule 02.04.2010
comment
Я подал именно этот запрос много лет назад. QC - черная дыра для таких вещей: QC # 20639. Он был закрыт как решенный и помечен для повторного тестирования, но, похоже, ничего не изменилось. И Emborcaderogearprise удивляются, почему люди не утруждают себя использованием QC.... - person Deltics; 06.04.2010

Я всегда пишу функцию выхода ЗАГЛАВНЫМИ БУКВАМИ, чтобы она выделялась. вы можете попробовать то же самое с assert.

person Mike Sutton    schedule 02.04.2010

Я так не думаю. В разделе Tools -> Options -> Editor Options -> Source Options вы можете включить или отключить подсветку синтаксиса, но я не вижу опции, позволяющей определить, какой синтаксис следует подсвечивать.

person Mason Wheeler    schedule 02.04.2010