W Cat - Описание языка PascalABC.NET

Тут можно читать онлайн W Cat - Описание языка PascalABC.NET - бесплатно полную версию книги (целиком) без сокращений. Жанр: Детская образовательная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

W Cat - Описание языка PascalABC.NET краткое содержание

Описание языка PascalABC.NET - описание и краткое содержание, автор W Cat, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru


PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения, средства параллельного программирования.


PascalABC.NET является мультипарадигменным языком: на нем можно программировать в структурном, объектно-ориентированном и функциональном стилях.


PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм.

Описание языка PascalABC.NET - читать онлайн бесплатно полную версию (весь текст целиком)

Описание языка PascalABC.NET - читать книгу онлайн бесплатно, автор W Cat
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Чтобы разрешить использование некоторых действий с переменными, имеющими тип параметра обобщенного класса или подпрограммы, используются ограничения на обобщенные параметры, задаваемые в секции whereпосле заголовка подпрограммы или класса:

type

MyPair = class

whereT: System.ICloneable;

private

x,y: T;

public

constructor(x,y: T);

begin

Self.x := x;

Self.y := y;

end;

functionClone: MyPair;

begin

Result := new MyPair(x.Clone,y.Clone);

end;

end;

В секции whereчерез запятую перечисляются следующие ограничения:

На 1 месте: слово classили слово recordили имя класса-предка.

На 2 месте: список реализуемых интерфейсов через запятую.

На 3 месте: слово constructor, указывающее, что данный тип должен иметь конструктор по умолчанию.

При этом каждое из мест, кроме одного, может быть пустым.

Для каждого типа-параметра может быть своя секция where, каждая секция where завершается точкой с запятой.

Пример.Обобщенная функция поиска минимального элемента в массиве. Элементы должны реализовывать интерфейс IComparable.

functionMinElem(a: array ofT): T;

whereT: IComparable;

begin

varmin: T := a[0];

for vari := 1 toa.Length-1 do

ifmin.CompareTo(a[i])<0 then

min := a[i];

Result := max;

end;

К сожалению, нет возможности использовать операцию <, поскольку операции не входят в интерфейсы.

Элементы функционального программирования

Лямбда-выражения

Лямбда-выражение - это выражение специального вида, которое на этапе компиляции заменяется на имя подпрограммы, соответствующей лямбда-выражению и генерируемой компилятором на лету.

Здесь излагается полный синтаксис лямбда-выражений.

Здесь рассказывается о захвате лямбда-выражением переменных из внешнего контекста.

Лямбда-выражения запрещается использовать при инициализации полей класса или записи, внутри вложенных подпрограмм, в подпрограмме при наличии вложенной подпрограммы, в разделе инициализации модуля.

Синтаксис лямбда-выражений достаточно сложен и в данном пункте иллюстрируется на примерах.

Пример 1.

varf: integer -> integer := x -> x*x;

f(2);

Запись x -> x является лямбда-выражением, представляющем собой функцию с одним параметром x типа integer, возвращающую x*x типа integer. По данной записи компилятор генерирует следующий код:

function#fun1(x: integer): integer;

begin

Result := x*x;

end;

...

varf: integer -> integer := #fun1;

f(2);

Здесь #fun1 - это имя, генерируемое компилятором. Кроме того, код функции #fun1 также генерируется компилятором.

Пример 2. Фильтрация четных

Обычно лямбда-выражение передаётся как параметр подпрограммы. Например, в следующем коде

var a := Seq(3,2,4,8,5,5);

a.Where(x -> x mod 2 = 0).Print;

лямбда-выражение x -> x mod 2 = 0 задаёт условие отбора чётных чисел из массива a.

Пример 3. Сумма квадратов

var a := Seq(1,3,5);

writeln(a.Aggregate(0,(s,x)->s+x*x));

Иногда необходимо явно задавать тип параметров в лямбда-выражении.

Пример 4. Выбор перегруженной версии процедуры с параметром-лямбдой.

procedure p(f: integer -> integer);

begin

write(f(1));

end;

procedure p(f: real -> real);

begin

write(f(2.5));

end;

begin

p((x: real)->x*x);

end.

В данном примере вызов p(x -> x) вызовет ошибку компиляции, потому что компилятор не может выбрать, какую версию процедуры p выбирать. Задание типа параметра лямбды помогает устранить эту неоднозначность.

Пример 5. Лямбда-процедура.

procedure p(a: integer -> ());

begin

a(1)

end;

begin

p(procedure(x) -> write(x));

end.

Захват переменных в лямбда-выражении

Лямбда-выражение может использовать переменные из внешнего контекста. Такие переменные называются захваченными лямбда-выражением.

Пример 1. Захват переменной в запросе Select.

begin

var a := Seq(2,3,4);

var z := 1;

var q := a.Select(x->x+z);

q.Println;

z := 2;

q.Println;

end.

Здесь лямбда-выражение x->x+z захватывает внешнюю переменную z. Важно заметить, что при изменении значения переменной z запрос a.Select(x->x+z), хранящийся в переменной q, выполняется с новым значением z.

Пример 2. Накопление суммы во внешней переменной.

begin

var sum := 0;

var AddToSum: integer -> () := procedure (x) -> begin sum += x; end;

AddToSum(1);

AddToSum(3);

AddToSum(5);

writeln(sum);

end.

Методы последовательностей

Все последовательности имеют множество методов обработки последовательностей, реализованных как методы расширения.

Список методов последовательностей

* Методы Print

* Метод фильтрации Where

* Метод проецирования Select

* Метод проецирования SelectMany

* Методы Take, TakeWhile, Skip, SkipWhile

* Метод Sorted

* Методы OrderBy, OrderByDescending

* Методы ThenBy,ThenByDescending

* Метод ForEach

* Метод Concat

* Метод JoinIntoString

* Метод Zip

* Метод Distinct

* Методы Union,Intersect,Except

* Метод Reverse

* Метод SequenceEqual

* Методы First, FirstOrDefault

* Методы Last, LastOrDefault

* Методы Single, SingleOrDefault

* Метод DefaultIfEmpty

* Методы ElementAt, ElementAtOrDefault

* Методы Any, All

* Методы Count

* Метод Contains

* Метод Aggregate

* Методы Sum, Average

* Методы Min, Max

* Метод Join

* Метод GroupJoin

* Метод GroupBy

* Метод AsEnumerable

* Методы ToArray, ToList

* Метод ToDictionary

* Метод ToLookup

* Метод OfType

* Метод Cast

Методы для последовательностей

Методы Print

Описание методов

Методы приведены для последовательности sequence ofT.

functionPrint(delim: string := ' '): sequence ofT;

Выводит последовательность на экран, используя delim в качестве разделителя.

functionPrintln(delim: string := ' '): sequence ofT;

Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку.

Пример

Метод фильтрации Where

Описание методов

Методы приведены для последовательности sequence ofT.

functionWhere(predicate: T->boolean): sequence ofT;

Выполняет фильтрацию последовательности значений на основе заданного предиката. Возвращает подпоследовательность значений исходной последовательности, удовлетворяющих предикату.

functionWhere(predicate: (T,integer)->boolean): sequence ofT;

Выполняет фильтрацию последовательности значений на основе заданного предиката с учётом индекса элемента. Возвращает подпоследовательность значений исходной последовательности, удовлетворяющих предикату.

Пример

Метод проецирования Select

Описание методов

Методы приведены для последовательности sequence ofT.

functionSelect(selector: T->Res): sequence ofRes;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


W Cat читать все книги автора по порядку

W Cat - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Описание языка PascalABC.NET отзывы


Отзывы читателей о книге Описание языка PascalABC.NET, автор: W Cat. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x