Ruby'de parantez içinde mi yoksa dışında mı? [kapalı]


Yanıtlar:


95

Gönderen Yakut Style Elements

Ruby, genel olarak bu cazibeye direnmek için parantez bırakmanıza izin verir.

Parantez, kodun izlenmesini kolaylaştırır. Genel Ruby stili, aşağıdaki durumlar dışında bunları kullanmaktır:

  • Daima boş parantezleri boş bırakın
  • Parantezler, ERb sınırlayıcıları ile çevrelenmiş tek bir komutun dışında bırakılabilir - ERb işaretleri, kodun hala okunabilir olduğundan emin olur
  • Tek bir komut olan bir satır ve tek bir basit argüman parantez olmadan yazılabilir. Şahsen, bunu giderek daha az yaptığımı görüyorum, ancak yine de mükemmel bir şekilde okunabilir. Normal ruby ​​kodunda birden çok argümanı olan ve parantez içermeyen tek satırları sevmiyorum.
  • Pek çok Ruby-tabanlı Etki Alanına Özgü Diller (Rake gibi), ifadelerine daha doğal bir dil hissi vermek için parantez kullanmaz.

27

Gelecekte bana yardımcı olmak için yorum olarak parens kullanıyorum ... şu anki benden daha az beyin hücresi olması muhtemel :-)

2 yıl önce yazdığınız bir koda bakıp onu yanlış anlamaktan daha kötü bir şey yoktur, böylece onu değiştirirken bir şeyi kırarsınız.

Eğer parenler gelecekte beni birkaç dakika (veya saat) kurtaracaksa, ifadeyi kristal netleştirmek için gerektiği kadar koyacağım.


2
+1 "Gelecekte bana yardımcı olmak için yorum olarak parens kullanıyorum ... Şimdiki benden daha az beyin hücresine sahip olma olasılığı yüksek :-)" Bu ÇOK doğru ve tam olarak neden yapıyorum. Kodumu kullanmak zorunda olan beni takip eden herkes için de merhametli olmak. Kısacası, bu bir bakım meselesi.
Teneke Adam

9

T.column veya has_many in rails gibi DSL benzeri şeyler yaparken onları dışarıda bırakıyorum. Geri kalan zamanlarda, genellikle netliğe iner ve muhtemelen eşit bir bölünmedir.


8

Sanırım ikisini de yapıyorum, ancak okunabilirliği artırıyorsa ve belirsiz görünen ifadelerden kaçınıyorsa, onları kesinlikle içinde tutuyorum.


8

İşlev çağrılarını kastediyorsanız, her zaman parantez koyarım çünkü okunması her zaman daha kolaydır. Koşullarda (if, while) demek istiyorsan, sadece gerekli olduğunda parantez koyarım.


2
Katılıyorum. Örneğin php'de $ önekine göre bir değişkeni hızlı bir şekilde tespit edebilirim .. javascript'te bir işlevi parantez () ile yeniden oluşturabilirim. Ruby'de bir var veya func (parantez olmadan) arasındaki farkı görmek her zaman kolay değildir.

7

Mümkünse onları dışarıda bırakmaya çalışıyorum. Kodun okunmasını kolaylaştırdığını düşünüyorum (genel olarak konuşursak).


4

Hangisi daha okunaklıysa, genellikle.

Ancak işlev çağrılarını diğerlerinin parametrelerinin içine yerleştirirken her zaman parantez kullanırım


2

Assert_equal gibi iddialar yaparken onları dışarıda bırakma eğilimindeyim. Belki de alana özgü dil benzeri hale getirmektir.


1

Uzun süredir programlama yapıyorsanız, muhtemelen parantez eklemek için bir "kaşıntı" yaşarsınız ve çoğu durumda bunun için iyi nedenler vardır.

Bana göre kod gözler için daha kolay ve henüz bir sorunla karşılaşmadım - parantezlere ihtiyacınız olacaksa, hata ayıklama betiğine girmeden önce bunu önceden bileceksiniz.


4
"Öğretmenim bana bunun kaçınılmaz olduğunu söylüyor". Öyledir ve hata ayıklaması zor olabilir. Belirsiz parametre atamalarından kaçınmak için bunları kullanmanızı tavsiye ederim.
The Tin Man

1
"Gözleri yormaz" olarak reddedilen IMO, işlev argümanlarının etrafına parantez bırakmanın kötü bir nedenidir.
Marcello Romani

2
ebeveyn olmayan kalabalığa konuşurken geçen gün bu problemle karşılaştım, if owner.is_a? thing //worked fine if owner.is_a? thing && x > 1 //not fine sadece birkaç haftadır ruby ​​öğreniyorum ve çalıştığım yerde mümkün olan en az sayıda karakter kullanılıyor ve başka bir dilden geliyorsan, bir öğrenme var bir fonksiyona sembollere geçen, dolaylı bir hash, bir dizi sembol, ne zaman geçtiğinizi bilmek için eğri ... ben hayran değilim.
Mega Man

@MegaManif owner.is_a? thing and x > 1
anna328p

1
@DmitryKudriavtsev andaynı operatör öncelik yoktur &&vardır
Mega Man
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.