Ruby'de bir satırda bir yöntemi nasıl tanımlarım?


92

def greet; puts "hello"; endRuby'de tek satırda bir yöntem tanımlamanın tek yolu mudur ?


11
Cevaplardan da görebileceğiniz gibi, bir yöntemi tek bir satırda farklı şekillerde tanımlamak mümkündür, ancak soru şu ki, öyle mi? Herhangi bir tanım, bakım ve okunabilirlik nedenleriyle açık ve temiz bir şekilde yazılmalıdır, böylece tek satır hantal veya kafa karıştırıcı hale gelirse, dağıtın. Bazı diller, kısa kodlamayı kod odaklı olmanın bir yolu olarak teşvik ediyor gibi görünmektedir, ancak Ruby kodlama stili, zarafeti, okunabilirliği ve öğrenimin ötesinde sürdürülebilirliği teşvik eder. İlk üçünü tamamlayın ve size boyun eğelim.
The Tin Man

Yanıtlar:


104

Parantez kullanırsanız noktalı virgül kullanma ihtiyacını ortadan kaldırabilirsiniz:

def hello() :hello end

1
Bu noktalı virgül kullanmaktan daha uzun ...?
Apollys Monica'yı

76

Sadece eksiksiz taze cevabı verin:

Genelde tek satırlık yöntemlerden kaçının. Vahşi doğada biraz popüler olsalar da, kullanımlarını istenmeyen kılan tanım sözdizimleri hakkında birkaç özellik vardır. Her halükarda - tek satırlık bir yöntemde birden fazla ifade olmamalıdır .

# 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

Kuralın bir istisnası boş vücut yöntemleridir.

# good
def no_op; end

Gönderen bbatsov / yakut tarzı-rehber .


39
def add a,b; a+b end

Noktalı virgül, Ruby için satır içi ifade sonlandırıcıdır

Veya define_methodyöntemi kullanabilirsiniz . (Düzenleme: Bu Ruby 1.9'da kullanımdan kaldırıldı)

define_method(:add) {|a,b| a+b }

4
2+ Ruby kullanımdan kaldırılmış gibi görünmüyor mu
michau

9

Diğer yol:

define_method(:greet) { puts 'hello' }

Yöntem tanımlanırken yeni kapsam girmek istemiyorsanız kullanılabilir.


NoMethodError: Object: Class in Ruby 1.9.3 için çağrılan özel yöntem `` define_method ''
Jared,

3
define_methodRuby 1.9'da "özelleştirildi"
edgerunner

8

Yine başka bir yol:

def greet() return 'Hello' end

13
Ruby'de, bir yöntemin dönüş değeri, son ifadenin döndürdüğü değerdir. returnKoruma maddesi olmadığı için buraya ihtiyacın yok .
Damien

1
O olmasa, çünkü Upvoted gerekli , returno daha az usta (veya aşina) Ruby için okunabilirliği ekleyebilir. Şu YMMV şeylerinden biri ...
Potherca
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.