Как видно из ответов, можно определить метод разными способами в одной строке, но вопрос в том, должны ли вы? Любое определение должно быть написано ясным и понятным способом из соображений обслуживания и удобочитаемости, поэтому, если однострочная строка становится громоздкой или запутанной, разложите ее. Некоторые языки, кажется, поощряют лаконичное кодирование как способ быть тщательно продуманным, но стиль кодирования Ruby поощряет элегантность, удобочитаемость и ремонтопригодность выше усердия. Выполните первые три и мы вам поклонимся.
Железный Человек
Ответы:
104
Вы можете избежать необходимости использовать точку с запятой, если будете использовать круглые скобки:
Это больше, чем при использовании точки с запятой ...?
Apollys поддерживает Монику
76
Просто дайте полный свежий ответ:
В общем, избегайте однострочных методов. Хотя они довольно популярны в дикой природе, в их синтаксисе определения есть несколько особенностей, которые делают их использование нежелательным. Во всяком случае - в однострочном методе должно быть
не более одного выражения .
# baddeftoo_much; something; something_else; end# okish - notice that the first ; is requireddefno_braces_method; body end# okish - notice that the second ; is optionaldefno_braces_method; body; end# okish - valid syntax, but no ; make it kind of hard to readdefsome_method() body end# gooddefsome_method
body
end
Единственным исключением из правила являются методы с пустым телом.
В Ruby возвращаемое значение метода - это значение, возвращаемое последним оператором. Здесь вам не нужно, returnтак как это не оговорка о защите.
Дэмиен
1
Проголосовали, потому что, хотя это и не нужно , он returnможет добавить удобочитаемость для тех, кто менее разбирается в Ruby (или знаком с ним). Это одна из тех вещей YMMV ...
Ответы:
Вы можете избежать необходимости использовать точку с запятой, если будете использовать круглые скобки:
def hello() :hello end
источник
Просто дайте полный свежий ответ:
В общем, избегайте однострочных методов. Хотя они довольно популярны в дикой природе, в их синтаксисе определения есть несколько особенностей, которые делают их использование нежелательным. Во всяком случае - в однострочном методе должно быть не более одного выражения .
# bad def too_much; something; something_else; end # okish - notice that the first ; is required def no_braces_method; body end # okish - notice that the second ; is optional def no_braces_method; body; end # okish - valid syntax, but no ; make it kind of hard to read def some_method() body end # good def some_method body end
Единственным исключением из правила являются методы с пустым телом.
# good def no_op; end
Из bbatsov / ruby-style-guide .
источник
def add a,b; a+b end
Точка с запятой - это встроенный терминатор оператора для Ruby.
Или вы можете использовать
define_method
метод. (Изменить: это устарело в Ruby 1.9)define_method(:add) {|a,b| a+b }
источник
По-другому:
define_method(:greet) { puts 'hello' }
Может использоваться, если вы не хотите вводить новую область действия для метода при его определении.
источник
define_method
был «приватизирован» в Ruby 1.9Еще один способ:
def greet() return 'Hello' end
источник
return
так как это не оговорка о защите.return
может добавить удобочитаемость для тех, кто менее разбирается в Ruby (или знаком с ним). Это одна из тех вещей YMMV ...