Особенности языка

Hits: 80787

В данном разделе приведны примеры, иллюстрирующие различные особенности языка PascalABC.NET, отличающие его от языка Delphi. Некоторые из этих особенностей являются ключевыми (они выделены жирным), некоторые - малозначительны. Ряд особенностей связан с языковыми возможностями, предоставляемыми платформой .NET.

Условно все особенности разделены на простейшие и основные.

 

Простейшие особенности

Простейшие особенности систематически используются при начальном обучении программированию на PascalABC.NET. Большинство из них введено как расширения языка, эффективно используемые при обучении.

Расширенные операторы присваивания   Данный пример иллюстрирует использование расширенных операторов присваивания += -= *= /= для целых и вещественных. Операция /= для целых, разумеется, запрещена.
Внутриблочные переменные   Переменные могут описываться внутри блока begin-end и инициализироваться при описании. Это крайне удобно для промежуточных переменных и соблюдает принцип локальности: переменная описывается непосредственно перед началом своего использования. Внутриблочные переменные позволяют сильно уменьшить количество глобальных переменных в разделе описания.
Автоопределение типа при описании   Если переменная инициализируется при описании, то ее тип можно не указывать: он определяется по типу правой части. Это не только сокращает запись, но и в большинстве случаев делает программу более понятной.
Описание параметра цикла for в заголовке цикла   Переменные-параметры цикла for должны преимущественно описываться в заголовке цикла для соблюдения принципа локальности.
Вычисление суммы N чисел   Данный пример подытоживает четыре предыдущих, используя расширенные операции присваивания, внутриблочные описания, автоопределение типа при описании и описание переменной в заголовке цикла for.
Форматированный вывод

  Для форматированного вывода и вывода нескольких данных одновременно удобно использовать стандартную процедуру WritelnFormat.
Цикл foreach   Программа илюстрирует использование цикла foreach. Цикл foreach используется для доступа на чтение к элементам любого контейнера, в частности, массива или множества.
Тип Char: особенности   Тип Char хранит символ Unicode и занимает 2 байта.
Тип String: особенности   Тип String хранит строку символов переменной длины. Для строк фиксированной длины используется синтаксис string[10].
Множества произвольного типа   Множества могут иметь произвольный базовый тип. К сожалению, по этой причине множества уже не хранятся как битовый вектор, и все операции с ними немного менее эффективны.
Перегрузка имен подпрограмм   Можно определит несколько подпрограмм с одним именем, но разными типами или количеством параметров. Ключевое слово overload для таких подпрограмм использовать не нужно.
Упрощенный синтаксис модулей   Небольшие модули удобно определять в упрощенном стиле - без деления на интерфейс и реализацию. Все определенные в модуле имена будут видны из модуля, подключившего данный.
Перечислимый тип: особенности   Значение перечислимого типа можно выводить с помощью writeln. Кроме того, Константу перечислимого типа можно указывать в формате EnumType.ConstName.

 

Основные особенности

Часть основных особенностей связана с объектно-ориентированным программированием и платформой .NET и используется для обучения современному программированию, другая является чисто технической и приведена здесь для полноты картины.

Ошибки при работе с вещественными значениями   Действия с вещественными значениями не могут привести к переполнению или другой ошибке. При некорректных операциях мы получаем либо значение "бесконечность", либо значение NaN (не число).
Методы класса string   Все типы - классы. Класс string содержит в своем составе ряд мощных методов.
Преобразования Строка-Число   Преобразование из строки в число и обратно можно выполнять с помощью методов классов string, integer, real.
Методы класса Enum   Все перечислимые типы можно обрабатывать с помощью методов класса Enum. В частности, легко получить массив строк - имен констант перечислимого типа.
Динамические массивы: особенности   Память под динамические массивы можно выделять операцией new, как и вызов конструктора. Тип array of T параметра подпрограммы обозначает именно динамический массив, а не открытый массив, как в Delphi.
Прямоугольные динамические массивы   n-мерные массивы также могут быть динамическими.
Процедурные переменные: операции += и -=   Процедурные переменные могут хранить несколько действий, вызываемых последовательно.
Бестиповые файлы: особенности   Бестиповые файлы file изменены по сравнению с Delphi. Отсутствуют процедуры BlockRead и BlockWrite, но в бестиповой файл можно непосредственно записывать данные любых размерных типов.
Инициализаторы полей в записях и классах   Полям записи или класса можно присваивать значение непосредственно. Они инициализируются в момент создания переменной.
Особенности вызова конструктора
  Для вызова конструктора используется опрация new.
Определение методов внутри класса   Методы могут определяться непосредственно в теле класса как в C++ и Java.
Методы в записях   В записях могут быть методы. Это ощутимо меняет стиль обучения и позволяет учить объектному программированию на более раннем этапе.
Сборка мусора и отсутствие деструкторов   Память, выделенную конструктором, явно освобождать не надо. Автоматический сборщик мусора возвращает память, занимаемую объектами, на которые никто не ссылается.
Вывод записей и классов с помощью write   Для вывода переменных типа класс или запись в операторе writeln следует переопределить виртуальный метод ToString.
Создание и подключение dll   Библиотеки dll легко создать и использовать. Синтаксически библиотека dll представляет собой модуль, где вместо ключевого слова unit используется слово library.
Вызов функции из dll на C#   PascalABC.NET - полноценный .NET-язык, легко совмещаемый с другими .NET-языками. В данном примере показывается, как в программе на PascalABC.NETвызвать функцию из dll, созданной на C#.
Вызов функции из неуправляемой dll   Функции из обычных (неуправляемых) dll вызывать столь же легко.
Определение типа во время выполнения программы   Точный тип во время выполнения определяется с помощью метода GetType.
Упаковка и распаковка   При присваивании размерного типа объекту типа Object происходит упаковка. Для распаковки следует использовать явное приведение типа.
Перегрузка операций   Для типов, определенных пользователем, можно перегружать операции.
Обобщенные подпрограммы   Можно определять подпрограммы, параметризованные некоторым типом. Этот тип выводится в момент вызова подпрограммы по типам параметров.
Обобщенные классы   Класс может быть параметризован типом.
Ограничения на параметры обобщенных классов   Параметры обобщенных классов и подпрограмм могут удовлетворять дополнительным условиям, например, реализовывать интерфейс или иметь конструктор по умолчанию.
Интерфейсы   Интерфейс похож на абстрактный класс без полей, методы которого не имеют реализации.
Явная реализация интерфейса   Класс может реализовывать методы интерфейса неявно или явно. Явная реализация интерфейса может быть вызвана только через ссылку на интерфейс.
Стандартные исключения   Иерархия исключений заимствуется из .NET.
Методы расширения   Можно расширять типы, определенные ранее, новыми методами.
Атрибуты   Атрибут - дополнительная характеристика-описатель объекта. Атрибуты разработали с целью не вводить дополнительные ключевые слова в язык. Атрибутом можно пометить класс, запись, перечислимый тип, подпрограмму, метод, поле, параметр, возвращаемое значение, свойство, событие.
Перечислимый тип: флаги   Перечислимый тип с помощью атрибута [Flags] может быть превращен в тип-флаг.
События event   События event представляют собой процедурные переменные, имеющие ряд ограничений. Они предназначены для хранения обработчиков событий.
Структурная эквивалентность типов   Здесь приводятся все составые типы в PascalABC.NET, эквивалентные структурно. Остальные составные типы поддерживают лишь именную эквивалентность.
     
     

News

30.08.17. PascalABC.NET 3.3 is out. GraphWPF and Graph3D units are added.

29.08.16. PascalABC.NET 3.2 is out. New features: yield, yield sequence

12.02.16. PascalABC.NET 3.1 is out. New features: tuples syntax (a,b), tuples assignment (a,b) := (b,a), extension operators, new syntax of extension methods

28.08.15. PascalABC.NET 3.0 is out.

28.08.15. PascalABC.NET is free now and distributed under LGPLv3 license. Repository is located here.

Our Twitter