Koşullamalar Atama

4 Cevap

Geçenlerde bir sürü kod bu tür gördüm:

if ($foo = $bar->getFoo())
{
    baz($foo);
}

Bu iyi ya da kötü uygulama olarak kabul edilir?

Kod bu tür kullanabilirsiniz Örneğin, Netbeans IDE bir uyarı veriyor:

Possible accidental assignment, assignments in conditions should be avoided

Sen ne düşünüyorsun?

4 Cevap

Ben bir atama için ekstra bir çizgi önlemek için zaman zaman kullanarak itiraf etmeliyim yararlı bir araçtır. Bir yandan, bazı çünkü tarafından kötü bir uygulama olabilir:

  • Bu diğer ortak dillerde kullanılabilir bir deyim değil
  • Daha az okunabilir

Diğer taraftan:

  • Örtülü boolean dönüşüm diğer dillerde oluşmaz, ancak yaygın olarak onlar var nereye sayılır ediyoruz. Tersine, koşullu atama operatörleri (örnek olarak) Ruby ve JavaScript var, ancak PHP. Biz bizim dil kullanımı sadece benzer bütün dillerde bulunanlara yapıları sınırlamak gerekir? Muhtemelen değil.
  • Kime daha az okunabilir?

Ben çoğu zaman daha az okunabilir bulmak, ama bu benim için tamamen kişisel bir tercihtir, çünkü ben bunu önlemek için deneyin dikkat etmelisiniz. Ben yararlı bulmak nerede, bunu kullanmak.

Bu hataları gizlice için kolay bir yol var, ama PHP yaygın bir uygulamadır. Özellikle while (($dir = readdir($handle)) !== FALSE) gibi şeyler yapıyoruz dizin geçişleri gibi şeyleri sırasında

Bunu önlemek için eğer. Kaçının.

Bu geçerli sözdizimi ve beklendiği gibi sonuç olacak olsa da, kötü bir alışkanlıktır. Okunabilirliği Eğer == demekti = koyarak kötü bir alışkanlığı geliştirmek için bir potansiyel var, eksik, ve gözlerini bir uygulama içinde gerçek hata bulmak için çalışırken, bu çizgiye dönmeye devam edecektir. Ben bu yazı stili kullanmak olmaz. Bu durumda, sadece dönüş değerini almak ve sonra geri dönüş değerini doğrulamak ... ya da daha iyisi, önlemek için taşıma kullanım istisnası tabloların eğer sürü batağa saplanmış.

Ben hattı bu tür görmeye o kadar alışkınım çünkü bu sözdizimi tüm zaman kullanabilirsiniz ... Ben,% 100 okunabilir bulabilirsiniz. Atama için ek bir kod satırı alarak bana alan bir atık gibi görünüyor.