2009-02-23 4 views
1

Какая разница между словами:Использование обратного ключевого слова в блоке кода

if (abc == "a") 
{ 
// do something here... 
return; 
} 

и так же, как и выше, но без возвращения ключевого слова?

Я кодер C#, и я знаю, что ключевое слово return, за которым следует тип или переменная, возвращает этот элемент, но в приведенном выше контексте возврату кажется просто выход из блока кода, но он делает какой-либо функционал или производительность изменить код?

Благодаря

ответ

13

«возвратные» выходит из функции, а не только вшита код блока. Так что, если ваш блок кода был в контексте функции, например, так (я не знаю, C# поэтому я использую синтаксис Java):

int thisIsAFunction(int a) { 
    if (abc == "a") 
    { 
     // do something here... 
     return 1; 
    } 
    // do something else here... 
} 

если abc == "a" то «делать что-то еще здесь» не будет запустить. Но если вы удалили оператор return внутри блока if, он будет работать.

3

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

+0

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

+0

Не обязательно. Я верю во многих случаях (например, в большинстве рекурсивных базовых случаев), оператор 'return' делает код более удобочитаемым. Это зависит от конкретного случая. Это может повредить или улучшить читаемость. Но я согласен, что он может действовать как goto, если его неправильно использовать. –

+0

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

1

В вашем случае нет - но если у вас был другой код после вашего оператора «если», который вы только хотели запустить, если ваше утверждение было ложным (например, если abc != "a"), то return позволяет обойти это и выйти из функция/метод.

0

Выполнение оператора возврата приведет к выходу из метода выполнения. Без возврата он просто продолжит следующее утверждение.

3

MSDN

Ответный оператор завершает выполнение метода, в котором он появляется, и возвращает управление вызывающему методу. Он также может вернуть необязательное значение. Если метод является типом void, оператор return может быть опущен.

Пример

//this would do nothing 
public void method() 
{ 
    return; 
} 


//this would return true 
//notice the return type of bool this means 
//the method expects a true\false value 
public bool method2() 
{ 
    return true; 
} 

public void test() 
{ 
    if(method2()) 
     method() 
} 

Теперь, если вы запускали тест method2 всегда возвращают истину и method1 бы только закончить его обработку

0

Да, ваш метод не имеет типа возвращаемого значения в данном случае. , например.

public void Foo 
{ 
if (abc == "a") 
{ 
    // do something here... 
    return; 
} 
// some other code 
} 

Это говорит о том, если абд = «а», а затем выйти из метода так, что какой-либо другой код не будет выполнен.

1

В этом случае вы можете использовать break. Это не работает, если инструкции или блоки кода вообще.

И да, возврат выходит из закрывающей функции.

2

Оператор return завершает текущий метод, а не только блок кода (для/while/if/etc).Так что полезно для ситуаций, как следующее:

public void MyMethod(object myObject) 
{ 
    if (myObject == null) 
    { 
     return; // exits method. 
    } 

    // do something with myObject 
} 

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

0

Это может быть более чистый способ написания кода. Обычно я делаю это в предложении охраны в начале или рядом с методом. Если у вас есть условие ошибки, просто «вернуть» из метода. Это избавит вас от остальной части вашей работы в блоке else. Кажется тривиальным, но это помогает снизить сложность кода.

+0

Компилятор фактически перепишет метод, похожий на описанный вами. В качестве альтернативы вы можете создать исключение при наличии ошибки. – StingyJack

+0

Конечно, но я использую этот подход «возврат» и на некомпилированных языках. И это не всегда относится к исключению, это может быть просто потому, что в данном случае ничего не нужно делать. – Tom

Смежные вопросы