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
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

typePerson = auto class

name: string;

age: integer;

end;

var p := new Person('Иванов',20); // конструктор автокласса генерируется автоматически

writeln(p); // вызывается сгенерированный автоматически метод ToString

Здесь в отличие от действия writeln по умолчанию выводятся значения не только публичных, а всех полей.

Обработка исключений

Обработка исключений: обзор

Когда во время выполнения программы происходит ошибка, генерируется так называемое исключение , которое можно перехватить и обработать . Исключение представляет собой объект класса, производного от класса Exception, создающийся при возникновении исключительной ситуации.

Имеется ряд стандартных типов исключений. Можно также определять пользовательские типы исключений.

Если исключение не обработать, то программа завершится с ошибкой. Для обработки исключений используется оператор try... except.

Обычно исключения возбуждаются в подпрограммах, поскольку разработчик подпрограммы, как правило, не знает, как обработать ошибочную ситуацию. В месте вызова подпрограммы уже, как правило, известно, каким образом следует обрабатывать исключение. Например, пусть разработана следующая функция:

functionmymod(a,b: integer): integer;

begin

Result := a - (a divb) * b;

end;

Если вызвать mymod(1,0), то будет возбуждено исключение System.DivideByZeroException целочисленного деления на 0.

Рассмотрим наивную попытку обработать ошибочную ситуацию внутри функции mymod:

functionmymod(a,b: integer): integer;

begin

ifb = 0 then

writeln('Функция mymod: деление на 0');

Result := a - (a divb) * b;

end;

Подобное решение является плохим, поскольку программист, разрабатывающий функцию mymod, не знает, как она будет использоваться. Например, при вызове функции mymod в цикле мы увидим на экране многократное сообщение об ошибке.

Простейший способ - оставить исходный вариант функции и обрабатывать исключение System.DivideByZeroException:

try

readln(a,b);

writeln(mymod(a,b) mod(a-1));

...

except

onSystem.DivideByZeroException do

writeln('Деление на 0');

end;

Отличие от вывода внутри функции состоит в том, что при разработке программы мы сами определяем действие, которое необходимо выполнять при обработке исключения. Это может быть специфическое сообщение об ошибке, вывод в файл ошибок или пустой оператор (в случае, когда требуется беззвучно погасить исключение).

Однако, данное решение обладает существенным недостатком: исключение System.DivideByZeroException будет возбуждено и при a=1 и не будет связано с функцией mymod. Для устранения подобного недостатка определим собственный класс исключения и возбудим его в функции mymod:

typeMyModErrorException = class(System.Exception) end;

functionmymod(a,b: integer): integer;

begin

ifb = 0 then

raisenew MyModErrorException('Функция mymod: деление на 0');

Result := a - (a divb) * b;

end;

Тогда обработка ошибок будет выглядеть так:

try

readln(a,b);

writeln(mymod(a,b) mod(a-1));

...

except

onSystem.DivideByZeroException do

writeln('Деление на 0');

one: MyModErrorException do

writeln(e.Message);

elsewriteln('какое-то другое исключение')

end;

Если сделать MyModErrorException наследником класса System.ArithmeticException, как и System.DivideByZeroException, то последний код можно упростить:

typeMyModErrorException = class(System.ArithmeticException) end;

...

try

readln(a,b);

writeln(mymod(a,b) mod(a-1));

...

except

one: System.ArithmeticException do

writeln(e.Message);

elsewriteln('Какое-то другое исключение')

end;

Наконец, можно поступить следующим образом. Перехватим в функции mymod исключение System.DivideByZeroException и в ответ сгенерируем новое - MyModErrorException:

functionmymod(a,b: integer): integer;

begin

try

Result := a - (a divb) * b;

except

one: System.DivideByZeroException do

raise newMyModErrorException('Функция mymod: деление на 0');

end;

end;

Стандартные классы исключений

Все классы исключений являются потомками класса System.Exception, включающего следующий интерфейс:

type

Exception = class

public

constructorCreate;

constructorCreate(message: string);

propertyMessage: string; // только на чтение

propertyStackTrace: string; // только на чтение

end;

Свойство Message возвращает сообщение, связанное с объектом исключения.

Свойство StackTrace возвращает стек вызовов подпрограмм на момент генерации исключения.

Ниже приводятся некоторые классы исключений, определенные в пространстве имен System и являющиеся производными от класса System.SystemException:

System.OutOfMemoryException - недостаточно памяти для выполнения программы;

System.StackOverflowException - переполнение стека (как правило, при многократных вложенных вызовах подпрограмм);

System.AccessViolationException - попытка доступа к защищенной памяти;

System.ArgumentException - неверное значение параметра подпрограммы;

System.ArithmeticException - базовый класс всех арифметических исключений. Наследники:

System.DivideByZeroException - целочисленное деление на 0;

System.OverflowException - переполнение при выполнении арифметической операции или преобразования типов;

System.FormatException - неверный формат параметра (например, при преобразовании строки в число);

System.IndexOutOfRangeException - выход за границы диапазона изменения индекса массива;

System.InvalidCastException - неверное приведение типов;

System.NullReferenceException - попытка вызвать метод для нулевого объекта или разыменовать нулевой указатель;

System.IO.IOException - ошибка ввода-вывода. Наследники:

System.IO.IOException.DirectoryNotFoundException - каталог не найден;

System.IO.IOException.EndOfStreamException - попытка чтения за концом потока;

System.IO.IOException.FileNotFoundException - файл не найден.

Исключения, определяемые пользователем

Для определения своего типа исключения достаточно породить класс - наследник класса Exception:

typeMyException = class(Exception) end;

Тело класса-исключения может быть пустым, но, тем не менее, новое имя для типа исключения позволит его разграничить с остальными исключениями:

try

...

except

onMyException do

writeln('Целочисленное деление на 0');

onException do

writeln('Файл отсутствует');

end;

Исключение может содержать дополнительную информацию, связанную с точкой, в которой произошло исключение:

type

FileNotFoundException = class(Exception)

fname: string;

constructorCreate(msg,fn: string);

begin

inheritedCreate(msg);

fname := fn;

end;

end;

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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