Тщательное использование операторов «if» или блоков «try/catch»?

StackOverflow https://stackoverflow.com/questions/328976

Вопрос

Поделитесь своими мыслями о том, что является лучшей практикой кодирования/делает код более эффективным/выглядит красивее/неважно:Увеличиваете и совершенствуете свою способность использовать операторы if для предвидения и выявления потенциальных проблем?Или просто эффективно использовать try/catch в целом?

Допустим, это для Java (если это имеет значение).

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

Это было полезно?

Другие советы

if блоки работают немного быстрее;если вам не понадобится дюжина из них, это лучшая идея, чем try/catches.Исключения должны быть исключительными, а не каждый раз при запуске кода.Я использую исключения для редких событий, таких как отключение сервера (хотя они происходят несколько раз в день) и if блоки для любой из моих контролируемых переменных.

Независимо от того, какой код вы пишете, в конечном итоге вы будете использовать оба.Я не могу говорить за среду выполнения Java, но в среде выполнения .NET наблюдается снижение производительности, связанное с использованием блоков try-catch.В результате я стараюсь использовать их только в тех областях, где у меня есть четкий способ обработки однажды пойманного исключения (даже если оно просто регистрирует существование проблемы).

Если вы обнаружите, что используете в своем коде много блоков try-catch или if-else или ваши методы имеют тенденцию быть довольно длинными, рассмотрите возможность рефакторинга кода на большее количество более мелких методов.Замыслу вашей логики будет легче следовать, а также легче проводить модульное тестирование.

Я думаю, что если заявления, то лучше.Вы не можете окружить каждую строку кода try..catch (ну, вы можете, но не должны этого делать).Вы можете окружить блок кода try catch, но не каждую строку.

А исключения замедляют работу.

Мои 2р:Лучше всего использовать try/catch:

  • это дает понять другим программистам, что вы выполняете обработку исключений
  • компилятор понимает, что вы делаете, и может выполнить для вас более подходящие проверки во время компиляции.

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

Судя по тому, что мне сказали более опытные разработчики и аналитики, try/catch более объектно-ориентирован и более процедурен.

Мне лично все равно.

Я осознаю тот факт, что попытка/catch работает медленнее и приводит к снижению производительности, но если я собираюсь использовать дюжину if для проверки, прежде чем смогу сделать то, что хочу, я всегда буду использовать try/ catch, чтобы сэкономить на количестве строк кода.

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

Иногда я явно включаю некоторые операторы if в try/catch, но в любом случае.

Я использую if, когда нужно проверить лишь небольшое количество вещей (1 или 2), прежде чем делать то, что мне нужно.

Есть одна вещь, о которой здесь не упомянуто.

При использовании оператора if-else при каждом запуске кода гарантированно будет оценено выполнение хотя бы одного условия.Я уверен, что мы все знаем, как работает if-else-elseif, но чтобы внести ясность...тот если часть утверждения всегда будет оцениваться, если она ложна, то следующая еще-если оценивается и так далее, пока не останется только еще осталось оценить.

Таким образом, использование оператора if-else повлияет на вашу производительность.Незначительно (в большинстве случаев), но для выполнения оценок требуется время процессора.

операторы try-catch и поправьте меня, если я ошибаюсь, не учитываются во время выполнения, пока они не потребуются (т. е.выдается исключение).Таким образом, простое обертывание кода в try-catch не повлияет на производительность до тех пор, пока оно не перехватит исключение.

Кроме того, не ловля приводит к снижению производительности, а бросок.

И еще один важный момент: операторы try-catch НИКОГДА не должны использоваться для условной логики.Их следует использовать только для того, для чего они предназначены:Обработка исключений!

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

Обычно хорошей идеей является наличие обработчика исключений на самом верхнем уровне вашего приложения, чтобы перехватывать исключения до того, как их увидит пользователь.В ASP.NET это можно сделать в событии Application_Error файла global.asax.В других языках/средах вы бы сделали это в своем основном цикле, каким бы он ни был.

Но учтите, что есть некоторые исключения, которые лучше не замечать.Иногда возникновение исключения указывает на то, что состояние вашего приложения серьезно скомпрометировано и ему нельзя доверять.Единственное безопасное, что можно сделать, это убить и перезапустить.

@PersonalPerson — Извините, но это просто ленивое программирование.Вместо того, чтобы использовать try-catch из-за слишком большого количества операторов if, почему бы не провести рефакторинг вашего кода (т.поместите свою логику проверки в отдельный метод).Это сделает ваш код более чистым и читабельным, а также сохранит лучшие практики повышения производительности.

Никогда не пытайтесь писать код так, чтобы количество строк было наименьшим.Это всегда закончится плохо.Конечно, вы можете найти более элегантный способ написать что-то, от чего ваши приятели-программисты будут охать и ахать, но это просто делает текст менее читабельным.

Клянусь, я уже работал с вашим кодом, и от него у меня заболела голова.

Использование исключений — это универсальный метод слабосвязанного уведомления другой части кода о том, что произошло что-то не так.Представьте себе, что если вы хотите обработать какое-то исключительное условие, используя if..и еще..вам нужно вставить в другую часть вашего кода некоторые произвольные переменные и другие вещи, которые, вероятно, вскоре легко привели бы к появлению кода спагетти.

Давайте теперь представим, что вы используете любую внешнюю библиотеку/пакет, и ее автор решил добавить в свой код другой произвольный способ обработки неправильных состояний - это заставит вас приспособиться к ее способу работы с ней - например, вам понадобится чтобы проверить, возвращают ли определенные методы true или false или что-то еще.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top