Basic Pascal Tutorial/Chapter 5/Enumerated types/bg

From Free Pascal wiki
Jump to navigationJump to search

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

 ◄   ▲   ► 

5A - Изброени типове

(author: Tao Yue, state: unchanged)

Можете да декларирате ваши собствени изброими типове данни. Можете да направите това в раздела за типове на програмата:

type
 datatypeidentifier = typespecification;

Един от начините е да създадете изброим тип. Спецификацията на изброим тип има следния синтаксис:

(identifier1, identifier2, ... identifiern)

Например ако искате да декларирате месеците в годината, ще трябва да напишете:

type
  TMonthType = (January, February, March, April,May, June, July, August, September, October, November, December);

За да направите така, че месеците да започват от 1:

type
  TMonthType = (January=1, February, March, April,May, June, July, August, September, October, November, December);

Може да укажете повече от един идентификатор за една и съща стойност:

type
  TMonthType = (January=1, FirstMonth=1,February=2, SecondMonth=2...);

На долния пример, резултатът ще бъде January=1, February=2, May=5,June=6, July=7:

type
  TMonthType = (January=1, February, May=5,June, July);

След това можете да декларирате променлива:

var
  Month : TMonthType;

Може да присвоите всяко от изброените на променливата:

Month := January; or Month := TMonthType(0);

Всички бройни функции са валидни за изброения тип. ord(January) = 0, и ord(December) = 11. Или ако променливата Month трябва да се промени на следващия календарен месец, тогава може да се извика Succ(Month). И Съобразете да направите проверка дали има следващ месец с Month < High(TMonthType). Броя на елементите в изброения тип може да се намери чрез ord(High(TMonthType)) + 1.

Има някои ограничения обаче. Изброените типове са известни само на програмата -- те не могат да се четат или записват в текстов файл. Трябва първо да прочетете данните и след това да ги преобразувате в изброения тип. Също така, идентификатор, който е използван в дефиницията на типа (като January например) не може да се използва в дефиницията на друг тип.

Една от целите на изброените типове е да позволят на програмиста да използва "смислени" имена на данните. В допълнение, тези типове позволяват процедурите и функциите да се подсигурят с валидни параметри, тъй като могат да бъдат подадени само променливи от този изброен тип и те могат да съдържат само една стойност от няколкото изброени.

Write и Writeln могат да се използват за изпечатване на низ, който представя текущата ст-т на променлива от изброен тип. WriteStr(string-var,enum-var) може да се използва за присвояването на този низ в друга низова променлива (string-var). Ако модулът typinfo е включен в програмата, низът за стойността на променливата може да се получи и с извикване на GetEnumName(TypeInfo(TMonthType), Ord(Month)).

За да обходите цялата дефиниция на изброения тип:

for i := Ord(Low(TMonthType)) to Ord(High(TMonthType)) do
  begin
     x:= GetEnumName(TypeInfo(TMonthType), Ord(i));
  end;
 ◄   ▲   ►