Вы предпочли бы это:Хорошая практика для явного возврата значений функции?
def add(a, b)
puts "ADDING #{a} + #{b}"
return a + b
end
по этому поводу?
def add(a, b)
puts "ADDING #{a} + #{b}"
a + b
end
Вы предпочли бы это:Хорошая практика для явного возврата значений функции?
def add(a, b)
puts "ADDING #{a} + #{b}"
return a + b
end
по этому поводу?
def add(a, b)
puts "ADDING #{a} + #{b}"
a + b
end
Это 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'
Вы узнаете гораздо больше ярлыков, когда идете.
Достаточно честный. Я пришел из предыстории программирования на C и C++, поэтому опускание ключевого слова 'return' выглядело мне неоднозначно. – stanigator
Я согласен, что сначала это выглядит странно, но вы действительно учитесь любить его. особенно для лямбда-функций :) –
Вы имеете в виду http://en.wikipedia.org/wiki/Anonymous_function, когда дело доходит до лямбда-функций? – stanigator
Все зависит от контекста. Обычно нет необходимости явно указывать: рубисты знают, что последнее выражение является возвращенным. Однако в некоторых редких случаях последнее выражение нелегко понять, как в процессе взаимодействия или какой-то неясной структуры, поэтому было бы неплохо это выразить. Но, как правило, нет необходимости.
EDIT:
И очевидно, когда вы пытаетесь вернуть выражение, которое не последний из вашего метода, вы есть использовать возвращение. Как вы могли бы сделать с ленивыми нагруженными аксессорами
Pros для return a + b
:
Минусов:
Меньше ошибок? Как так? – steenslag
Я нахожу, что иногда, если есть несколько мест для последних выражений, я забываю изменить один из них, когда я не использовал return для их маркировки. –
Style Guide говорит опускать явный возврат товара
Избегайте возврата, где не требуется.
# bad
def some_method(some_arr)
return some_arr.size
end
# good
def some_method(some_arr)
some_arr.size
end
Понял.На самом деле это не объясняет, почему это так (я прочитал раздел в ссылке). – stanigator
Ха-ха. Очень верно. Я думаю, что принятый ответ «Рубинового пути» - это единственный «реальный» судья. –
посмотрите на это: http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/
объясняет, как возвращение работает на проки, лямбды и блоков.
Я бы сказал, что опускание заявления «возврат» является каноническим, но мне интересно узнать, есть ли веские причины для этого соглашения ... против этого соглашения ... – maerics
@maerics: Вот почему я разместил этот вопрос для обсуждения. – stanigator