W Cat - Описание языка PascalABC.NET
- Название:Описание языка PascalABC.NET
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
W Cat - Описание языка PascalABC.NET краткое содержание
PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения, средства параллельного программирования.
PascalABC.NET является мультипарадигменным языком: на нем можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм.
Описание языка PascalABC.NET - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Result := x;
end;
begin
var a := Seq(1,5,3);
writeln(MinElement(a) + Sum(2,3));
end.
Если внутри функции не присвоить переменной Result некоторое значение, то функция вернет в результате своего вызова непредсказуемое значение.
В PascalABC.NET имеется упрощенный синтаксис описания однооператорных процедур и функций:
procedureWriteStar := write('*');
и
functionAdd(a,b: real): real := a + b;
При этом для возвращаемого значения функции возможен автовывод типов:
functionAdd(a,b: real) := a + b;
Параметры процедур и функций
Параметры, указываемые при описании подпрограммы, называются формальными . Параметры, указываемые при вызове подпрограммы, называются фактическими .
Если формальный параметр описан с предваряющим ключевым словом varили const, то его называют параметром-переменной и говорят, что он передается по ссылке . Если же параметр описан без слов varили const, то его называют параметром-значением и говорят, что он передается по значению . Слово ссылка используется в PascalABC.NET также в другом значении - для ссылочных типов.
Если параметр передается по значению, то при вызове подпрограммы значения фактических параметров присваиваются соответствующим формальным параметрам. Типы фактических параметров-значений должны быть совместимы по присваиванию с типами соответствующих формальных параметров.
Например, пусть имеется следующее описание процедуры:
procedurePrintSquare(i: integer);
begin
writeln(i*i);
;
Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего выполнится тело процедуры.Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Фактические параметры-переменные должны быть переменными, а их типы должны быть эквивалентны типам соответствующих формальных параметров.
Например, если описана процедура
procedureMult2( vara: integer);
begin
a := a*2;
;
то после вызова Mult2(d) значение d увеличится в 2 раза.В качестве фактического параметра-значения можно указывать любое выражение, тип которого совпадает с типом формального параметра или неявно к нему приводится. В качестве фактического параметра-переменной можно указывать только переменную, тип которой в точности совпадает с типом формального параметра.
При передаче параметра по ссылке в подпрограмму передается адрес фактического параметра. Поэтому если параметр занимает много памяти (массив, запись, строка), то обычно он также передается по ссылке. В результате в процедуру передается не сам параметр, а его адрес, что экономит память и время работы. При этом если параметр меняется внутри подпрограммы, то он передается с ключевым словом var, если не меняется - с ключевым словом const:
Например:
type
Person = record
name: string;
age,height,weight: integer;
end; procedurePrint( constp: Person);
begin
write(p.name,' ',p.age,' ',p.height,' ',p.weight);
end;
procedureIncAge( varp: Person);
begin
Inc(p.age);
end;
Отметим особенности передачи динамических массивов в качестве параметров подпрограмм.
Поскольку динамический массив является ссылкой, то при изменении формального параметра-динамического массива внутри подпрограммы меняется соответствующий фактический параметр. Например, в результате работы программы
procedurep(a: array ofinteger);
begin
a[1] := 2;
end;
varb: array ofinteger := (1,1);
begin
p(b);
writeln(b[1]);
end.
будет выведено 2. Передавать динамические массивы по ссылке имеет смысл только в случае если память под динамический массив перераспределяется внутри подпрограммы:
procedureq( vara: array ofinteger);
begin
SetLength(a,10);
end;
Переменное число параметров
Для указания того, что подпрограмма должна иметь переменное число параметров, используется ключевое слово params, за которым следует описание динамического массива. Например:
functionSum( paramsa: array ofinteger): integer;
begin
Result := 0;
fori: integer := 0 toa.Length do
Inc(Result,a[i]);
При вызове подпрограммы на месте формального параметра paramsможет быть любое ненулевое количество фактических параметров совместимого типа, перечисляемых через запятую:
vars: integer := Sum(1,2,3,4,5);
s := s + Sum(6,7);
В списке параметров ключевое слово paramsможет указываться только для последнего параметра, причем, этот параметр не должен быть параметром по умолчанию. Параметры paramsвсегда передаются только по значению.
Параметры по умолчанию
В заголовке подпрограммы можно использовать параметры по умолчанию. Для этого достаточно после параметра поставить знак присваивания и значение. Если при вызове не указать значение параметра по умолчанию, то будет использовано то значение, которое указано в описании подпрограммы. Параметры по умолчанию должны передаваться по значению и идти последними в списке параметров.
Например:
procedurePrintTwo(a,b: integer; delim: char := ' ');
begin
write(a,delim,b);
end;
...
PrintTwo(3,5);
PrintTwo(4,2,';');
Все варианты вызова подпрограммы с параметрами по умолчанию могут участвовать в разрешении перегрузки.
Опережающее объявление
В некоторых ситуациях возникает необходимость вызвать подпрограмму, описанную далее по тексту программы. Например, такая необходимость возникает при косвенной рекурсии (подпрограмма A вызывает подпрограмму B, а та в свою очередь вызывает подпрограмму A). В этом случае используется опережающее объявление подпрограммы, состоящее из ее заголовка, за которым следует ключевое слово forward. Например:
procedureB(i: integer); forward;
procedureA(i: integer);
begin
...
B(i-1);
end;
procedur eB(i: integer);
begin
...
A(i div2);
end;
Запрещено делать опережающее объявление для уже описанной подпрограммы.
Для методов ключевое слово forwardзапрещено. В нем нет необходимости, потому что можно вызывать методы, определенные в теле класса позднее.
Читать дальшеИнтервал:
Закладка: