2016-09-18 9 views
2

Например, что я должен использовать, когда необходимо создать столбец в таблице, только если такой столбец не существует?Выбор между if() и try-catch

Я могу написать код, который будет проверять, существует ли столбец, и только потом добавить его, поэтому я могу и без проверки, обернув мой метод в try-catch (если есть исключения catch , а если нет - колонка будет добавлена)

Результат будет таким же.

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

Какой метод является более грамотным или правильным?

+2

Как правило, исключения являются * исключительными * событиями. –

+1

Я столкнулся с тем же, но с размером массива. Я мог бы проверять каждый раз, если я обгоняю размер массива с помощью [if()], но когда я использовал try catch, меня больше не интересовал размер массива, просто Если я обгоняю размер, оператор catch будет обрабатывать ошибку и продолжать делать код –

+0

Исключение - это сбой. Если вы хотите узнать больше, прочитайте главу об исключениях в [этой книге] (https://en.wikipedia.org/wiki/Object-Oriented_Software_Construction). Когда вы дойдете до конца файла, когда вашей таблице нужен другой столбец, это не сбой. –

ответ

2

Интересно, что ваш вопрос зависит от языка программирования, о котором вы говорите.

В таких языках, как C, Java, C++, C# ... люди предпочитают шаблон LBYL (Look Before You Leap); тогда как языки, такие как python, сильно подчеркивают «EAFP» (проще просить прощения, чем разрешения).

Значение: в python вы используете try/catch много (даже «счетный цикл» реализован как try/catch); тогда как в C#, Java, C++ вы предпочитаете делать, если/else вместо этого.

И эти соглашения действительно важны для наблюдения - большинство программистов на языке Cx просто предполагают, что вы не используете try/catch для моделирования потока управления. Другими словами: вы должны следовать той парадигме, которую будет использовать большинство других разработчиков на этом языке.

1

Я не думаю, что есть «правильный» путь. В любом случае работает так, что вы достигнете своей цели независимо от того, что. Однако для чистого кода мое (очень субъективное) представление состоит в том, что исключения должны использоваться только как «буквальные» вещи и указывать на то, что произошло нечто исключительное (или неожиданное). Таким образом, в большинстве случаев вы просто будете перераспределять время выполнения с исключениями. Если, однако, вы пытаетесь отсканировать документ и всегда ожидаете иметь определенное количество столбцов, это может быть правильный путь для исключения, поскольку неправильное количество столбцов будет именно таким: исключение.