Форматирование
Рекомендуемое форматирование текста следует из общей синтаксической формы нотации, которую с некоторой натяжкой можно назвать "операторной грамматикой", когда текст класса представляет последовательность символов, разделенных на "операторы" и "операнды". Операторами являются фиксированные символы языка, такие как ключевые слова (do, например) или разделители (точка с запятой, запятая). Операндом является символ, выбираемый программистом (идентификатор, константа).
Основываясь на этом свойстве, форматирование текста следует гребенчато-подобной структуре (comb-like structure), введенной в языке Ada. Идея состоит в том, что каждая синтаксически важная часть класса, такая как инструкция или выражение должна либо:
- размещаться на одной строке вместе с предшествующими и последующими операторами;
- либо с отступами размещаться на нескольких строках, организованных так, чтобы это правило выполнялось рекурсивно.
Рис. 8.1. Гребенчато-подобная структура организации программного текста
Каждая ветвь гребенки является последовательностью чередующихся операторов и операндов, обычно начинающихся и заканчивающихся оператором. В пространстве между двумя ветвями находится либо операнд, либо рекурсивно гребенчато-подобная структура.
Как пример, зависящий от размера его составляющих a, b и c, допустимы следующие формы представления инструкции выбора:
if c then a else b endили
if c then a else b endили:
if c then a else b endОднако вы не можете использовать строку, содержащую просто if c или c end, так как они включают операнд вместе с чем-то еще, пропуская заканчивающий оператор в первом случае, а во втором - начинающий.
Подобным образом можно начать класс после предложения indexing так:
class C inherit -- [1]или
class C feature -- [2]или
class -- [3] C featureНельзя писать
class C -- [4] featureпоскольку первая строка нарушает правило.
Формы [1] и [2] используются в этой книге для небольших иллюстративных классов. Более практичные классы имеют одно или несколько помеченных предложений feature, они в отсутствие предложения inherit должны использовать форму [3] (она предпочтительнее, чем форма [2]):
class C feature -- Initialization ... feature -- Access и т.д.