Лексические соглашения


Ввод и вывод

Строки

 

Класс STRING описывает символьные строки. Он имеет специальный статус, поскольку нотация допускает манифестные строковые константы, обозначающие экземпляры STRING .

Строковая константа записывается в двойных кавычках, например,

 

"ABcd Ef ~*_ 01"

 

 

Символ двойных кавычек должны предваряться знаком % , если он появляется как один из символов строки.

Неконстантные строки также являются экземплярами класса STRING , чья процедура создания make принимает в качестве аргумента ожидаемую начальную длину строки, так что

 

text1, text2: STRING; n: INTEGER;

...

create text1.make (n)

 

 

динамически размещает строку text1 , резервируя пространство для n символов. Заметим, что n - только исходный размер, не максимальный. Любая строка может увеличиваться и сжиматься до произвольного размера.

На экземплярах STRING доступны многочисленные операции: сцепление, выделение символов и подстрок, сравнение и т.д. (Они могут изменять размер строки, автоматически запуская повторное размещение, если размер строки становится больше текущего.)

Присваивание строк означает разделение (sharing): после text2 := text1 , любая модификация text1 модифицирует text2 , и наоборот. Для получения копии строки, а не копии ссылки, используется клонирование text2 := clone (text1) .

Константную строку можно объявить как атрибут:

 

message: STRING is "Your message here"

 

 

Два класса библиотеки KERNEL обеспечивают основные средства ввода и вывода: FILE и STD_FILES .

Среди операций, определенных для объекта f типа FILE , есть следующие:

 

create f.make ("name") -- Связывает f с файлом по имени name.

 

f.open_write -- Открытие f для записи

 

f.open_read -- Открытие f для чтения

 

f.put_string ("A_STRING") -- Запись данной строки в файл f

 

 

Операции ввода-вывода стандартных файлов ввода, вывода и ошибок, можно наследовать из класса STD_FILES , определяющего компоненты input , output и error . В качестве альтернативы можно использовать предопределенное значение io , как в io.put_string ("ABC") , обходя наследование.

 

 

Идентификатор - это последовательность из символа подчеркивания, буквенных и цифровых символов, начинающаяся с буквы. Нет ограничений на длину идентификатора, что позволяет сделать ясными имена компонентов и классов.

Регистр в идентификаторах не учитывается, так что Hi , hi , HI и hI - все означают один и тот же идентификатор. Было бы опасным позволять двум идентификаторам, различающимся только одним символом, скажем Structure и structure , обозначать различные элементы. Лучше попросить разработчиков включить воображение, чем рисковать возникновением ошибок.

Нотация включает набор точных стандартных соглашений по стилю (см. лекцию 26 курса "Основы объектно-ориентированного проектирования"): имена классов (INTEGER , POINT ...) и формальные родовые параметры (G в LIST [G] ) записываются в верхнем регистре; предопределенные сущности и выражения (Result , Current ...) и константные атрибуты (Pi ) начинаются с буквы верхнего регистра и продолжаются в нижнем регистре. Все другие идентификаторы (неконстантные атрибуты, формальные аргументы программ, локальные сущности) - в нижнем регистре. Хотя компиляторы не проверяют эти соглашения, не являющиеся частью спецификации, они важны для удобочитаемости текстов программных продуктов и последовательно применяются в библиотеках и текстах этой книги.