КОТ++
Прикладное программирование
Системное программирование
Программирование микроконтроллеров

640 Кб должно хватить для любых задач. (c) Билл Гейтс

Трюк с try ... catch

Опубликовано
Комментарии 0

В данном посте хочу поделиться очень хорошим прогерским лайвхаком. С помощью этого трюка можно внедрить в основной код проверку на правильность ввода, на какие-либо другие пользовательские ошибки и многое другое. Ведь как это иногда бывает: писать основной код очень весело, а вот делать различные проверки на ошибки в ходе выполнения программы очень и очень скучно и не охото. Как только вы прочитаете этот пост всё будет иначе!

Нужно знать всего несколько правил:
1) не используйте в основном коде ифы (if) для проверки на ошибки в ходе выполнения;
2) не используйте коды ошибок, вместо них используйте классы ошибок (например в c# собственные классы ошибок наследуйте от Exception, в java от RuntimeException);
3) при проверке на ошибки используйте блоки try ... catch.

И это всё, что нужно знать чтобы лвлапнуться в мире кодинга!

Завершу примерами кода и примечаниями, которые прояснят всё ситуацию.

Проверка заполненности текстовых полей и их валидация (андроид). Смотрите как удобно, у нас нет огромного количества веток из ифов. Если пользователь сделал что-то не так, то мы с помощью throw выбрасываем ошибку и выполнение кода дальше не идёт, а вместо этого в блоке catch пользователю выдаётся сообщение об ошибке, которое зависит от типа исключения.
try
{
       String email = ((EditText)findViewById(R.id.login_edittext_email)).getText().toString();
       String pass = ((EditText)findViewById(R.id.login_edittext_pass)).getText().toString();

       if ((email.isEmpty()) || (pass.isEmpty()))
       {
                throw new EmptyEditTextException();
       }
       else if (!Utils.isValidEmail(email))
       {
                throw new NotValidEmailException();
       }

       ...//создаём параметры для входа
       account.login(params);
}
catch (NotValidEmailException e)
{
       Toast.makeText(getApplicationContext(), "Некорреткный email адрес", Toast.LENGTH_SHORT).show();
}
catch (EmptyEditTextException e)
{
       Toast.makeText(getApplicationContext(), "Не введён логин или пароль", Toast.LENGTH_SHORT).show();
}
Или вот ещё пример на c#. Проверяем сначала всё ли готово для печати, если нет, то показываем ошибку, если да, то начинаем печать. Опять же код мог бы быть куда более раздутым без try ... catch. Обратите внимание, что блоки try ... catch легко можно добавить в уже готовый код. Т.е. сначала можно реализовать основную логику программы, а потом спокойно добавить обработку ошибок.
try
{
       checkExistAdobeReaderPath(); //проверяем указан ли путь до Adobe Reader
       checkOpenedPdfFile(); //проверяем выбран ли PDF на печать
       /*если же какое либо условие не выполнилось то эти функции выкинут exception, а в catch мы их отловим)*/
       printDocument(); //отправляем на печать
}
catch (PdfFileNotOpenedException)
{
       MessageBox.Show("Pdf файл не выбран", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (AdobeReaderPathNullException)
{
       MessageBox.Show("Не указан путь к AdobeReader", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Теги ,
Автор

Комментарии

Нет комментариев к данной статье.

Комментировать

Поля обозначенные как * требуются обязательно. Перед постингом всегда делайте просмотр своего комментария.




[
]
[
]