2012-05-10 2 views
3

Вы предпочли бы это:Хорошая практика для явного возврата значений функции?

def add(a, b) 
    puts "ADDING #{a} + #{b}" 
    return a + b 
end 

по этому поводу?

def add(a, b) 
    puts "ADDING #{a} + #{b}" 
    a + b 
end 
+0

Я бы сказал, что опускание заявления «возврат» является каноническим, но мне интересно узнать, есть ли веские причины для этого соглашения ... против этого соглашения ... – maerics

+0

@maerics: Вот почему я разместил этот вопрос для обсуждения. – stanigator

ответ

4

Это The Ruby Way ™ не включать return заявление, если это не абсолютно необходимо.

Я уверен, что есть примеры, но вот простой.

def divide a, b 
    return false if b == 0 
    a/b 
end 

Стоит отметить, что рубин предоставляет средства, необязательно игнорировать много синтаксиса. () являются необязательными, если вы их не гнездились. {} также могут быть опущены во многих случаях.

func(5, 5, {:hello => 'world'}) 
# is the same as 
func 5, 5, hello: 'world' 

Вы узнаете гораздо больше ярлыков, когда идете.

+0

Достаточно честный. Я пришел из предыстории программирования на C и C++, поэтому опускание ключевого слова 'return' выглядело мне неоднозначно. – stanigator

+0

Я согласен, что сначала это выглядит странно, но вы действительно учитесь любить его. особенно для лямбда-функций :) –

+0

Вы имеете в виду http://en.wikipedia.org/wiki/Anonymous_function, когда дело доходит до лямбда-функций? – stanigator

0

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

EDIT:

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

0

Pros для return a + b:

  • читаемость
  • меньше ошибок

Минусов:

  • многословного
+0

Меньше ошибок? Как так? – steenslag

+0

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

2

Style Guide говорит опускать явный возврат товара

Избегайте возврата, где не требуется.

# bad 
def some_method(some_arr) 
    return some_arr.size 
end 

# good 
def some_method(some_arr) 
    some_arr.size 
end 
+0

Понял.На самом деле это не объясняет, почему это так (я прочитал раздел в ссылке). – stanigator

+0

Ха-ха. Очень верно. Я думаю, что принятый ответ «Рубинового пути» - это единственный «реальный» судья. –

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