Jak widać z odpowiedzi, możliwe jest zdefiniowanie metody na różne sposoby w jednym wierszu, ale pytanie brzmi: czy powinieneś? Każda definicja powinna być napisana w sposób jasny i przejrzysty ze względu na konserwację i czytelność, więc jeśli pojedyncza linia stanie się nieporęczna lub zagmatwana, należy ją rozłożyć. Niektóre języki wydają się zachęcać do zwięzłego kodowania jako sposobu na uczenie się kodowania, ale styl kodowania Ruby zachęca do elegancji, czytelności i łatwości utrzymania ponad starannością. Wykonaj pierwsze trzy, a pokłonimy się Tobie.
Tin Man
Odpowiedzi:
104
Możesz uniknąć konieczności używania średników, jeśli używasz nawiasów:
Generalnie unikaj metod jednokreskowych. Chociaż są dość popularne w środowisku naturalnym, istnieje kilka cech charakterystycznych ich składni definicji, które sprawiają, że ich użycie jest niepożądane. W każdym razie - w metodzie jednowierszowej nie powinno być
więcej niż jedno wyrażenie .
# 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
Jedynym wyjątkiem od reguły są metody z pustym treścią.
W Rubim wartość zwracana przez metodę jest wartością zwracaną przez ostatnią instrukcję. Nie potrzebujesz returntutaj, ponieważ nie jest to klauzula ochronna.
Damien
1
Uznano za pozytywnymi, ponieważ chociaż nie jest to potrzebne , returnmoże zwiększyć czytelność dla osób mniej obeznanych (lub zaznajomionych z) Rubim. To jedna z tych rzeczy z YMMV ...
Odpowiedzi:
Możesz uniknąć konieczności używania średników, jeśli używasz nawiasów:
def hello() :hello end
źródło
Po prostu podaj pełną, świeżą odpowiedź:
Generalnie unikaj metod jednokreskowych. Chociaż są dość popularne w środowisku naturalnym, istnieje kilka cech charakterystycznych ich składni definicji, które sprawiają, że ich użycie jest niepożądane. W każdym razie - w metodzie jednowierszowej nie powinno być więcej niż jedno wyrażenie .
# 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
Jedynym wyjątkiem od reguły są metody z pustym treścią.
# good def no_op; end
Z bbatsov / ruby-style-guide .
źródło
def add a,b; a+b end
Średnik to terminator instrukcji wbudowanej dla Rubiego
Lub możesz użyć
define_method
metody. (Edycja: ten jest przestarzały w Ruby 1.9)define_method(:add) {|a,b| a+b }
źródło
Inny sposób:
define_method(:greet) { puts 'hello' }
Może być użyty, jeśli nie chcesz wprowadzać nowego zakresu dla metody podczas jej definiowania.
źródło
define_method
został "sprywatyzowany" w Ruby 1.9Jeszcze inny sposób:
def greet() return 'Hello' end
źródło
return
tutaj, ponieważ nie jest to klauzula ochronna.return
może zwiększyć czytelność dla osób mniej obeznanych (lub zaznajomionych z) Rubim. To jedna z tych rzeczy z YMMV ...