Комплекти добре ли сте, масиви са чудесни.
Да предположим, че искаме да създадем три едномерни масиви за 50 членове в нашата програмна общност. Първият масив е за имена, вторият за имейли, а третият за брой качвания (компоненти или приложения) към нашата общност.
Всеки масив (списък) ще има съвпадащи индекси и много код, за да поддържа паралелно и трите списъка. Разбира се, бихме могли да опитаме с един триизмерен масив, но какво да кажем за неговия тип? Нуждаем се от низ за имена и имейли, но цяло число за броя на качванията.
Начинът за работа с такава структура от данни е използването на Delphi структура на записа.
TMember = Запис...
Например, следната декларация създава тип запис, наречен TMember, този, който бихме могли да използваме в нашия случай.
По същество а структурата на данните за запис може да смесва всеки от вградените типове на Delphi включително всички типове, които сте създали. Типовете записи определят фиксирани колекции от елементи от различни типове. Всеки елемент, или поле, е като променлива, състояща се от име и тип.
Типът TMember съдържа три полета: стойност на низ, наречена име (за да задържи името на член), стойност на тип низ наречен eMail (за един имейл) и цяло число (Cardinal), наречен „Posts“ (за да задържи броя на изпратените до нашите общността).
След като сме настроили типа запис, можем да декларираме променлива да бъде от типа TMember. TMember вече е също толкова добър тип променлива за променливи, колкото всеки от тях Делфи "вградени типове като String или Integer. Забележка: Декларацията за типа TMember, не разпределя никаква памет за полетата име, имейл и публикации;
За да създадем действително екземпляр от записа на TMember, трябва да декларираме променлива от тип TMember, както е в следния код:
Сега, когато имаме запис, използваме точка, за да изолираме полетата на DelphiGuide.
Забележка: горното парче код може да бъде пренаписано с използването на сключова дума.
Вече можем да копираме стойностите на полетата на DelphiGuide в AMember.
Запис на обхвата и видимостта
Типът запис, деклариран в декларацията на формуляр (раздел за изпълнение), функция или процедура, има обхват, ограничен до блока, в който е деклариран. Ако записът е деклариран в секцията на интерфейса на единица, той има обхват, който включва всички други единици или програми, които използват единицата, в която се извършва декларацията.
Масив от записи
Тъй като TMember действа като всеки друг тип обект Pascal, можем да обявим масив от променливи на запис:
Забележка: Ето как да декларира и инициализира постоянен масив от записи в Delphi.
Записи като записи на полета
Тъй като типът запис е легитимен като всеки друг тип Delphi, можем да имаме поле на запис да бъде самият запис. Например, можем да създадем ExpandedMember, за да следим какво изпраща членът заедно с информацията за него.
Попълването на цялата информация, необходима за един запис, сега е някак по-трудно. Необходими са повече периоди (точки) за достъп до полетата на TExpandedMember.
Записвайте с „Неизвестни“ полета
Типът на записа може да има вариантна част (да не се бърка с променлива тип Variant). Вариантните записи се използват например, когато искаме да създадем тип запис, за който има полета различни видове данни, но знаем, че никога няма да се наложи да използваме всички полета в един запис инстанция. За да научите повече за различните варианти в Records, разгледайте помощните файлове на Delphi. Използването на вариант на тип запис не е безопасно за тип и не е препоръчителна практика на програмиране, особено за начинаещи.
Въпреки това, вариантите записи могат да бъдат много полезни, ако някога се окажете в ситуация да ги използвате.