Треки
/
C#
C#
/
Вправи
/
Інструменти Техасу
Інструменти Техасу

Інструменти Техасу

Навчальна вправа

Вступ

Фільтрування винятків

when - це ключове слово для фільтрування винятків. Його розміщують після інструкції catch, і воно може приймати булевий вираз (англ. Boolean), що містить будь-які значення, доступні в області видимості на той момент. Якщо вираз обчислюється як правда, то виконується блок, повʼязаний із цією інструкцією catch, інакше перевіряється наступна інструкція catch, якщо вона є.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

Визначені користувачем винятки

Визначений користувачем виняток - це будь-який клас, визначений у нашому коді, який походить від System.Exception. Він підлягає всім правилам успадкування класів, але, крім того, компілятор і середовище виконання мови ставляться до таких класів особливим чином, дозволяючи генерувати та перехоплювати їхні екземпляри поза звичайним потоком керування, як розглядається у вправі exceptions.

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

Вказівки

Працюючи в Instruments of Texas, ми займаємося експериментальним калькулятором, написаним на C#. Ми створюємо тестовий стенд, щоб перевірити низку функцій калькулятора, починаючи з множення. Ми побачимо, що окрему увагу приділено випадку, коли обидва операнди множення відʼємні.

Клас Calculator уже надано, і його не слід змінювати.

1. Завершіть визначення користувацького винятку CalculationException

Завершіть визначення конструктора CalculationException, який має зберігати (обгортати) будь-який виняток, викинутий калькулятором, а також операнди, які обробляються на момент виникнення винятку.

2. Опрацюйте умови переповнення в калькуляторі та надайте тому, хто викликає, докладнішу інформацію

Реалізуйте метод CalculatorTestHarness.Multiply(), який має викликати метод Calculator.Multiply() екземпляра Calculator, переданого в конструктор, передаючи йому цілі значення x та y. Якщо в методі Calculator.Multiply() станеться переповнення, він викине OverflowException. Цей виняток слід перехопити в методі CalculatorTestHarness.Multiply(), обгорнути в CalculationException, а значення x та y, які передаються, зберегти як операнди винятку. Створений обʼєкт CalculationException слід викинути. Можна знехтувати значенням, яке повертає метод Calculator.Multiply(), якщо він завершився успішно.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. Перевірте операцію множення для коректних вхідних даних

Реалізуйте метод CalculatorTestHarness.TestMultiplication(), який приймає два цілі числа та викликає метод CalculatorTestHarness.Multiply(). Повертається "Multiply succeeded".

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. Перевірте операцію множення для відʼємних вхідних даних

Змініть метод CalculatorTestHarness.TestMultiplication() так, щоб повертався "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>", якщо обидва цілочисельні аргументи відʼємні (менші за нуль).

Замість заповнювача <INNER_EXCEPTION_MESSAGE> слід підставити повідомлення внутрішнього винятку CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. Перевірте операцію множення для додатних вхідних даних

Змініть метод CalculatorTestHarness.TestMultiplication() так, щоб повертався "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>", якщо принаймні один із цілочисельних аргументів не є відʼємним.

Замість заповнювача <INNER_EXCEPTION_MESSAGE> слід підставити повідомлення внутрішнього винятку CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C# Exercism

Час розпочати Інструменти Техасу?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.