C# - Головна Простір імен
► System (5)► Microsoft (1) Для учнів (початківців)
► Відео уроки (4)► Навчання (177) ► Приклади програм (19) ► Секрети Сі Шарп (4) Для професіоналів
► Навчання (6)► Приклади програм (1) |
Перевірка кодів повернення функцій і методівРозглянемо випадок, коли ми викликаємо метод обробки інформації, який виконує ділення першого свого параметра на другий.
using System; namespace DivByZero { class DivByZrolApp static int Divide(int x, int y) { int result; result = x / y; } static void Main{string[] args) { int j; for (int i = -3; i < =3; i++) { j = Divide{10, i); // Помилка ділення на нуль } Console.ReadLine(); } } } Для виправлення цієї помилки змінимо метод Divide, щоб він перевіряв значення дільника перед виконанням операції ділення: static int Divide(int x, int у) { int result; if (y != 0) result = x / у; return result; } else return 0; Тепер помилка ділення на нуль не виникне, так як, якщо дільник дорівнює нулю, поділ не виконується. Однак метод Divide повинен якимось чином просигналізувати викликає методу про виникнення помилки. Наша реалізація цього методу при помилці повертає нульове значення, однак очевидно, це не найкращий спосіб. У самому справі, нульове значення повертається і в тому випадку, якщо дільник дорівнює нулю, а ця ситуація не є помилковою. Зауважимо, що повернення особливого значення методом або функцією використовується дуже часто в інших мовах програмування в якості ознаки помилки. Передбачається, що після звернення до функції операційної системи (такий, наприклад, як відкриття файлу, читання блоку даних з файлу і т. п.) викликає програма перевіряє код повернення, роблячи при виникненні помилки які-небудь дії. Ось як ми можемо використовувати модифікований варіант методу Divide, повертає нульове значення при виникненні помилки ділення на нуль: j = Divide(10, i) ; if (j == 0) Console.WriteLinef "Помилка ділення на нуль"); У реальних програмах зустрічається досить велика глибина вкладеності функцій і методів, коли один метод викликає інший, той, у свою чергу, звертається до третього і четвертого і т. д. Рядок лістингу програми, призначені для обробки кодів повернення для всіх цих функцій або методів, захаращують вихідний текст програми, роблячи його «нечитабельним». Крім того, програміст може за забудькуватості опустити перевірку коду повернення якої-небудь однієї функції або методу, що призведе до аварійного завершення програми під час його роботи.
Застосування механізму виключень
Класичні схеми обробки помилок, засновані на перевірці допустимості параметрів і аналізі кодів повернення функцій і методів, володіють істотними недоліками. Практично всі сучасні мови програмування забезпечені потужним засобом обробки помилок, заснованим на використанні так званих винятків (exceptions). He є винятком (вибачте за тавтологію) і мова програмування С#. Засоби обробки виключень в мові С# роблять вихідний текст програм зрозуміліше і простіше. З їх допомогою програміст може організувати структурну обробку помилок, як прогнозовані, так і виникають несподівано. Система обробки помилок, використана в бібліотеці класів Microsoft .NET Framework, працює виключно із застосуванням механізму виключень. Тому, яку б програму ви не розробляли на мові С#, ви обов'язково зіткнетеся з необхідністю обробляти або викликати виключення (в інших мовах програмування це не так; програми C++, наприклад, можна створювати і без обробки виключень).
Переглядів: 2202 |