- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Описание языка PascalABC.NET - W Cat
Шрифт:
Интервал:
Закладка:
Идентификаторы и ключевые слова
Идентификаторы служат в качестве имен программ, модулей, процедур, функций, типов, переменных и констант. Идентификатором считается любая последовательность латинских букв или цифр, начинающаяся с буквы. Буквой считается также символ подчеркивания _.
Например, a1, _h, b123 - идентификаторы, а 1a, ф2 - нет.
С каждым идентификатором связана область действия идентификатора.
Следующие слова являются ключевыми, служат для оформления конструкций языка и не могут использоваться как идентификаторы:
and array as auto begin case class const constructor destructor div do downto else end event except file final finalization finally for foreach function goto if implementation in inherited initialization interface is label lock mod nil not of operator or procedure program property raise record repeat set shl shr sizeof template then to try type typeof until uses using var where while with xor
Ряд слов является контекстно ключевыми (они являются ключевыми только в некотором контексте):
abstract default external forward internal on overload override params private protected public read reintroduce unit virtual write
Контекстно ключевые слова могут использоваться в качестве имен.
Некоторые ключевые слова совпадают с важнейшими именами платформы .NET. Поэтому в PascalABC.NET предусмотрена возможность использовать эти имена без конфликтов с ключевыми словами.
Первый способ состоит в использовании квалифицированного имени. Например:
var a: System.Array;
В этом контексте слово Array является именем внутри пространства имен System, и конфликта с ключевым словом array нет.
Второй способ состоит в использовании специального символа & перед именем. В этом случае имя может совпадать с ключевым словом. Например:
uses System;
var a: &Array;
Комментарии
Комментарии - это участки кода, игнорируемые компилятором и используемые программистом для пояснения текста программы.
В PascalABC.NET имеется несколько типов комментарев.
Последовательность символов между фигурными скобками { } или символами (* и *) считается комментарием:
{ Это
комментарий }
(* Это
тоже комментарий *)
Комментарием также считается любая последовательность символов после символов // и до конца строки:
var Version: integer; // Версия продукта
Комментарии разных типов могут быть вложенными:
{ Это еще один
(* комментарий *)}
Описание переменных
Переменные могут быть описаны в разделе описаний, а также непосредственно внутри любого блока begin/end.
Раздел описания переменных начинается с ключевого слова var, после которого следуют элементы описания вида
список имен: тип;
или
имя: тип := выражение;
или
имя: тип = выражение; // для совместимости с Delphi
или
имя := выражение;
Имена в списке перечисляются через запятую. Например:
var
a,b,c: integer;
d: real := 3.7;
s := 'PascalABC forever';
al := new List<integer>;
p1 := 1;
В последних трех случаях тип переменной автоматически определяется по типу правой части.
Переменные могут описываться непосредственно внутри блока. Такие описания называются внутриблочными и представляют собой оператор описания переменной.
Кроме того, переменные-параметры цикла могут описываться в заголовке операторов for и foreach.
Описание констант
Раздел описания именованных констант начинается со служебного слова const, после которого следуют элементы описания вида
имя константы = значение;
или
имя константы : тип = значение;
Например:
const
Pi = 3.14;
Count = 10;
Name = 'Mike';
DigitsSet = ['0'..'9'];
Arr: array [1..5] of integer = (1,3,5,7,9);
Rec: record name: string; age: integer end = (name: 'Иванов'; age: 23);
Arr2: array [1..2,1..2] of real = ((1,2),(3,4));
Описание меток
Раздел описания меток начинается с зарезервированного слова label, после которого следует список меток, перечисляемых через запятую. В качестве меток могут быть использованы идентификаторы и положительные целые числа:
a1,l2,777777;
Метки используются для перехода в операторе goto.
Описание типов
Раздел описания типов начинается со служебного слова type, после которого следуют строки вида
имя типа = тип;
Например, type
arr10 = array [1..10] of integer;
myint = integer;
pinteger = ^integer;
IntFunc = function(x: integer): integer;
Обычно описание используется для составных типов (статические массивы, процедурные переменные, записи, классы) чтобы дать имя сложному типу. Если для типа определена именная эквивалентность типов, это единственный способ передать переменные этого типа в подпрограмму.
Описание типов для классов использовать обязательно:
type
A = class
i: integer;
constructor Create(ii: integer);
begin
i:=ii;
end;
end;
Если описание типа используется просто для того чтобы заменить одно имя на другое, то такие типы называются синонимами типов:
type
int = integer;
double = real;
Описания типов могут быть обобщёнными, т.е. включать параметры-типы в угловых скобках после имени типа.
type
Dict<K,V> = Dictionary<K,V>;
Arr<T> = array of T;
Использование такого типа с конкретным параметром-типом называется инстанцированием типа:
var
a: Arr<integer>;
d: Dict<string,integer>;
При описании рекурсивных структур данных указатель на тип может фигурировать раньше описания самого типа в определении другого типа:
type
PNode = ^TNode;
TNode = record
data: integer;
next: PNode;
end;
При этом важно, чтобы определения обоих типов находились в одном разделе type.
В отличие от Delphi Object Pascal следующее рекурсивное описание верно:
type
TNode = record
data: integer;
next: ^TNode;
end;
Отметим, что для ссылочных типов (классов) разрешается описание поля с типом, совпадающим с типом текущего класса:
type
Node = class
data: integer;
next: Node;
end;
Область действия идентификатора
Любой используемый в программе идентификатор должен быть предварительно описан. Идентификаторы описываются в разделе описаний. Идентификаторы для переменных могут также описываться внутри блока.
Основная программа, подпрограмма, блок, модуль, класс образуют так называемое пространство имен - область в программе, в которой имя должно иметь единственное описание. Таким образом, в одном пространстве имен не может быть описано двух одинаковых имен (исключение составляют перегруженные имена подпрограмм). Кроме того, в сборках .NET имеются явные определения пространств имен.
Область действия идентификатора (т.е. место, где он может быть использован) простирается от момента описания до конца блока, в котором он описан. Область действия глобального идентификатора, описанного в модуле, простирается на весь модуль, а также на основную программу, к которой данный модуль подключен в разделе uses.
Кроме этого, имеются переменные, определенные в блоке и связанные с некоторыми конструкциями (for, foreach). В этом случае действие переменной i простирается до конца соответствующей конструкции. Так, следующий код корректен:
var a: array of integer := (3,5,7);
for i: integer := 1 to 9 do
write(a[i]);
foreach i: integer in a do
write(i);
Идентификатор с тем же именем, определенный во вложенном пространстве имен, скрывает идентификатор, определенный во внешнем пространстве имен. Например, в коде
var i: integer;
procedure p;
var i: integer;
begin
i := 5;
end;
значение 5 будет присвоено переменной i, описанной в процедуре p; внутри же процедуры p сослаться на глобальную переменную i невозможно.
Переменные, описанные внутри блока, не могут иметь те же имена, что и переменные из раздела описаний этого блока. Например, следующая программа ошибочна:
var i: integer;
begin
var i: integer; // ошибка
end.
В производных классах, напротив, можно определять члены с теми же именами, что и в базовых классах, при этом их имена скрывают соответствующие имена в базовых классах. Для обращения к одноименному члену базового класса из метода производного класса используется ключевое слово inherited:
type
A=class
i: integer;
procedure p;
begin

