Использование блока try-catch в функции - PullRequest
0 голосов
/ 20 октября 2010

Это действительно не важный вопрос. Я просто хотел узнать, какой метод более популярен и существует ли какой-то стандарт де-факто.

Это

function foobar
{
    int retVal = 0;
    try
    {
        retVal+=100;
    }
    catch 
    {
        //error handling code
    }
    return retVal;
}

Или это?

function foobar
{
    try
    {
        return 100;
    }
    catch 
    {
        //error handling code
    }
    return 0;
}

Ответы [ 6 ]

3 голосов
/ 20 октября 2010

Это действительно зависит от того, что делает функция.Использование переменной retVal полезно, когда функции необходимо выполнить хотя бы несколько операций для создания возвращаемого значения.Если возвращаемое значение более атомарное, чем это, я бы не стал беспокоиться о дополнительной переменной.

3 голосов
/ 20 октября 2010

К сожалению, это очень сильно зависит от ожидаемого исключения, и если функция должна вернуть значение по умолчанию в случае исключения.

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

Так что и то и другое приемлемо ...

0 голосов
/ 21 октября 2010

Я нахожу это более читабельным (поместите возврат внутрь блока catch):

function foobar
{
    try
    {
        return 100;
    }
    catch 
    {
        //error handling code
        return 0;
    }
}
0 голосов
/ 20 октября 2010

Первый - мой выбор, если в try catch есть несколько процессов, которые влияют на возвращаемое значение.Второй подходит, если вы хотите вернуть постоянное значение.

0 голосов
/ 20 октября 2010

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

0 голосов
/ 20 октября 2010

Этот вопрос не имеет ничего общего с try catch, как со стилями кодирования.В первом варианте у вас есть только путь возврата для функции, в то время как во втором у вас их много.

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

Я стараюсь избегать более одного пути возврата к функции.Мне легче читать для моей команды (они делают то же самое, потому что это является частью наших ориентиров).

...