Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Roman A. TaycherОтветов: 3

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

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

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

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

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

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

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

rubyoopimplicitreturn-value

Ответы

Ответ 1 · рейтинг 5 · Andrew Grimm

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

Ответ 2 · рейтинг 3 · zed_0xff

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

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

Ответ 3 · alex.zherdev

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы