Что случилось с неявными возвращаемыми значениями в Ruby?

Итак, я начал смотреть на Ruby, и многие вещи выглядят неплохо, но меня очень отталкивают неявные операторы return. Я понимаю, что по умолчанию все возвращается self или nil, но не последнее значение оператора.

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

В чем смысл неявного возврата? Есть ли способ сделать некоторые вещи проще?

Считается ли хорошей практикой всегда иметь возврат для предотвращения неявного возврата?

Я так сильно переживаю по этому поводу?

P.S. Часто ли люди используют неявный возврат, когда хотят вернуть определенную вещь из метода, разве это не облегчает другим людям в вашей группе взлом кода друг друга? Конечно, документируйте все и дайте значимые имена, которые вы могли бы сказать, но в реальной жизни люди не всегда так поступают.


person Roman A. Taycher    schedule 11.06.2010    source источник
comment
Попробуйте немного ... Многие вещи на первый взгляд кажутся неправильными, пока вы не дадите шанс. Это идиома, вы можете четко заявить о своих доходах, если считаете иначе.   -  person Gishu    schedule 11.06.2010
comment
Спасибо, что спросили об этом. Я вспомнил, что это то, чего я не упомянул в списке рубиновых ошибок. stackoverflow.com/questions/372652/   -  person Andrew Grimm    schedule 11.06.2010


Ответы (3)


Убедитесь, что вы не добавили операторы puts в конец метода или блока, если вы не хотите вернуть nil.

person Andrew Grimm    schedule 11.06.2010

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

И это заставляет методы выглядеть действительно самоочевидными и улучшает удобочитаемость. Думаю, это очень естественно.

person zed_0xff    schedule 11.06.2010
comment
Но разве явный возврат (или его отсутствие на другом языке) не помогает улучшить читаемость на других языках (вы можете сразу сказать, куда вы возвращаетесь, и если вы не возвращаете ничего / ничего важного)? - person Roman A. Taycher; 11.06.2010
comment
Вы все еще можете сделать явный возврат. Кроме того, такие инструменты, как YARD, позволяют делать заявления о возвращаемом значении (и, следовательно, о том, можете ли вы на него положиться). - person Konstantin Haase; 11.06.2010
comment
Я понимаю, что вы все еще можете это сделать, это просто на многих других языках, если вы не видите оператор return, вы знаете, что функция / метод ничего не возвращает, null или self. И что такое Двор? - person Roman A. Taycher; 11.06.2010
comment
Я видел ошибки (не мои), вызванные отсутствием явного return. Помимо асимметрии с ранним возвратом, часто не очевидно, что на самом деле будет возвращено. Однако я никогда не видел в этом проблемы в LIPS. - person cdunn2001; 22.06.2013

Хороший вопрос.

Вероятно, это одна из тех рубиновых функций, которые следует лечить с помощью TLC .. а, TATFT .. Я имею в виду, сильное тестирование :)

Кроме того, это хороший стимул для предоставления RDoc для ваших методов, в котором будет четко указано, что эти методы возвращают.

person alex.zherdev    schedule 11.06.2010