Инструменты пользователя

Инструменты сайта


bb:redbook:111

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:redbook:111 [2016/04/15 17:10]
prospero78 [3. Обращение к полям записи]
— (текущий)
Строка 1: Строка 1:
-===== 1.11 Введение в записи ===== 
  
-==== 1. Понятие записи ==== 
-Записи в **КП** не являются записями как в обыкновенной жизни, но тем не менее, имеют нечто похожее. Записям в жизни //всё-равно//, какого цвета ручка (или может быть это карандаш, фломастер). //Не важно// где выполнена запись — на обрывке листа, полях газеты или тетрадке. Ценность в записи — её //содержимое//. Поэтому, //запись// — это //сущность//, определяющая какую-то информацию. Можно считать, что //запись — это особый вид файла//. Но в отличии от //файла//, которому //безразлично//, что в него записали, у записи есть чёткое //разделение полей//, например: 
- 
-  * Фамилия 
-  * Имя 
-  * Отчество 
-  * Адрес 
-  * Телефон 
- 
-В какой-то //записи//, например, нет отчества, в другой — нет телефона, но есть общее правило: все записи состоят из //полей//. //Поля// могут быть даже не заполненными, но они //есть//. Очень удобно, когда один раз описав поля записи, можно создать //массив записей//. Примерно так создаются //базы данных// (хотя надо понимать, что базы данных шагнули очень далеко, по сравнению с простым набором записей). Можно, конечно, хранить различные фамилии в одном массиве, а имена в другом массиве, а телефоны в третьем массиве, и собирать эти данные по общему индексу для всех массивов, но гораздо более красивое решение — хранить все эти переменные в одной записи в виде полей. Записи используются на столько широко, у них на столько обширные возможности, что в одной главе осветить охватить всё просто не получится. 
-==== 2. Пример записи ==== 
-В тексте модуля, который приведён ниже, представлено объявление одной записи с несколькими полями: 
-  
-<code oberon2> 
-MODULE TestHello07; 
- (* Этот пример показывает как объявлять записи *) 
- 
- IMPORT Log, Math; 
- 
- VAR 
- r: RECORD 
- coord_x, coord_y: INTEGER; 
- enabled: BOOLEAN; 
- color: ARRAY 3 OF INTEGER; 
- END; 
- 
- PROCEDURE Start*; 
- VAR 
- BEGIN 
- END Start; 
- 
-BEGIN 
-END TestHello07. 
-</code>  
- 
-В секции ''VAR'' модуля объявлена переменная ''r'' с ключевым словом ''RECORD''. Это //не тип данных//, это переменная, которая является точкой входа для записи. В самой записи могут быть //любые// поля любого типа, в неограниченном количестве (конечно, учитывая размер свободной памяти и разумность попытки разместить всё под одним объявление ''RECORD''). Более того, в запись может быть включена другая запись, в которую может быть включена другая запись, в которую... 
- 
-Описание полей в записи разделяются точкой с запятой, а само объявление записи ограничивается ключевым словом ''END;''. 
-==== 3. Обращение к полям записи ==== 
-  
-Обращение к полям записи происходит точно также, как и к простой переменной. Обращение к элементу массива в записи, в сущности, ничем не отличается от обращения к элементу простого масcива. Единственное отличие, перед полем записи должно быть указано имя соответствующей переменной с типом RECORD и подряд символ "." ("точка"). Пример такого обращения к записи: 
- 
-Hello07.odc 
-<code oberon2> 
-MODULE TestHello07; 
- (* Этот пример показывает как объявлять записи *) 
- 
- IMPORT Log, Math; 
- VAR 
- r: RECORD 
- coord_x, coord_y: INTEGER; 
- enabled: BOOLEAN; 
- color: ARRAY 5 OF INTEGER 
- END; 
- 
- PROCEDURE Start*; 
- VAR 
- i: INTEGER; 
- BEGIN 
- r.coord_x := 5; 
- r.coord_y := 4; 
- Log.Int(r.coord_x); Log.String(', '); 
- Log.Int(r.coord_y); Log.Ln; 
- r.color[0] := 4; 
- r.color[4] :=  - 10; 
- FOR i := 0 TO 4 DO 
- Log.Int(r.color[i]); Log.String(', ') 
- END; 
- Log.Ln 
- END Start; 
- 
-BEGIN 
-END TestHello07. 
- 
-(!)TestHello07.Start 
-<code> 
-   
- 
-В этом примере присваиваются значения полям ''coord_x'' и ''coord_y''. В массиве ''color'' элементам с номерами 0 и 4 также присваиваются значения. Обратите внимание, на именование полей — все они с //маленькой// буквы. В записях //могут быть// ссылки на процедуры, а процедуры //должны// именоваться с //большой// буквы (а иначе отличить одно от другого без чтения документации, либо исходных кодов — будет тяжело). Если всё сделано правильно, то будет получен такой вывод: 
-<code> 
-компилируется "TestHello07"   156   32 
-старый модуль TestHello07 выгружен 
- 5,  4 
- 4,  0,  0,  0,  -10,  
-</code> 
- 
-из которого можно сделать вывод, что //действительно// поля записи меняют свои значения. 
-==== 4. Заключение ==== 
-  
-Это коротенькое введение очень важно. Так как Компонентный Паскаль очень сильно приспособлен под использование записей в связи с его подходом к построению программ. Пользоваться записями впереди предстоит часто. [↑] 
-  
-[ ← Назад ↑ ] [ Вверх ↑ ] [ Далее → ] 
bb/redbook/111.1460729402.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)