Tek Hat İfadeleri ve İyi Uygulamalar


11

Son zamanlarda, birçoğunuzun kaşlarını çatabileceğini bildiğim, ancak sonunda, tek bir (bazen) tekrarlayan yöntemin yapısından ziyade küresel kod yapısını izlememe yardımcı olan bir alışkanlık kazandım: bir sayı gruplama ifadeleri tek bir satırda, şöyle:

textBox1.Text = "Something!"; textBox2.Text = "Another thing!"; textBox3.Text = "Yet another thing!";

aksine

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

Genel kod "güzelliği" korumak ve program yapısını kolayca izlememe yardımcı olmak için tekrarlayan görevler için bunu yapmak için kullanıyorum, ama iyi bir uygulama olmayabilir. Aslında çok kullanıyorum, bu yüzden bu konudaki düşüncelerin neler olduğunu bilmek istiyorum. Ayrıca, kodumu korumak zorunda kalacak herhangi birinin bu yaklaşımla ilgili sorunları olduğunu düşünüyor musunuz?



1
Bakacak olursam sorun yaşayacağım. Yapacağım ilk şey ";" için CTRL + F yapmak ve satır sonu koydu. Ama bu sadece benim :-). Ben sadece bir reasson, örneğin false varsayılan değeri olan birkaç metin kutusunun etkin özelliklerini başlatmak için bir satır gibi:: textBox1.Enabled = textBox2.Enabled = false;
Arun

2
Bir kodlama stili sorusu soruyorsanız, dili belirtmeniz yardımcı olacaktır.
Caleb

3
Verilen örnekte ortaya çıkmasa da, hepsini bir satıra koyuyorsanız, ikinci veya üçüncü veya ... ifadesine nasıl bir kesme noktası koyacaksınız?
Marjan Venema

1
Ve ayrıca, kodun yine de düzgün bir görünüme kavuştuğu otomatik biçimlendirmeye (Java) alışkınım.
Kwebble

Yanıtlar:


22

Gerçekten okunabilirliğin hem sizin için hem de kesinlikle kodu okuyan herkes için büyük zarar göreceğini düşünüyorum. İlk kez yazdığınızda her şey anlamlıdır çünkü aktif olarak zihninizde. Hangi değişkenlerin ve fonksiyonların nerede olduğunu görmek için kodu tararken farklıdır ... kendi kodunuzu tarama yeteneğinizi yok ediyorsunuz. Yani hayır-hayır büyük, ve bad ötesinde başkasının eğer hiç kodunuzu okumak zorundadır.

Ayrıca, kodu nasıl okuduğunuzu da düşünün. Her zaman yukarıdan aşağıya, aşağı doğru kayar. Yönteminiz bununla örtüşmez ve hatta kod okumada mümkün olan en çirkin sorunlardan birini sunar; yatay kaydırma . Bunun okuma kodunu ne kadar zorlayabileceğini asla küçümsemeyin. Asla yatay kaydırma yapmazsınız, asla yatay kaydırma yapmazsınız, neredeyse her bağlamda son derece doğal değildir.

Ayrıca, sorununuz tekrarlayan kod girişi ise ... Ctrl-C'yi unutmayın. Örnek kodunuzdan, bunları manuel olarak yazmak daha verimli olabilir, ancak bir satır satırını birkaç kez kopyalamanız gerekiyorsa, satır bir artı yeni bir satır kopyalamak kadar etkili gibi görünüyor, yapıştırın x kez ve değişiklikleri yapmak, bir yazım hatası yapmak daha az olasıdır.

Oh, ve yazım hataları! Kodunuzun okunabilirliğine bu şekilde zarar vermek, 50 değişken bildiriminden hangisini yanlış ayarladığınızı bulmanın bir kabus olmasını sağlayabilir. Çoğu derleyici satır VE sütun numaralarında hata verir, ancak bir satırda hata bulmak sütun bulmaktan çok daha kolaydır.


2
a) Kodu okuma / tarama - Kodu tararken çoğu kişi satırın ilk birkaç karakterini okur ve "ilginç" olmadıkça devam eder, sonra birkaç tane daha okur. Derleyici Hataları: Çoğu zaman derleyici hatasını "<x> satırı ile ilgili sorun" olarak yorumluyorum. sadece yapamam; anında işe yaramazsa (nadir), bu yüzden aslında hatayı okudum.
mattnz

19

Satır başına bir ifade, yan yana farklılıkta nelerin değiştiğini görmeyi de kolaylaştırır.


2
Muhtemelen bunun en büyük nedeni, eğer birisi bu kodu birleştirmek zorundaysa, neredeyse tüm birleştirme araçları satırların alt dizeleri yerine satırları izole etmeyi ve taşımayı kolaylaştıracaktır.
anon

@anon Birleştirme araçları için de iyi bir nokta; satır başına bir ifade, temizlemek için daha az birleştirme çakışması anlamına gelir.
Hugo

10

Örnek bunu göstermese de, bir satırda birden çok ifadeyi gruplandırmayla ilgili başka bir sorun var. Tek bir satırdaki beş ifadeden biri istisna atarsa ​​ne olur?

Yığın izlemeniz "N satırındaki EBlah" diyecektir ... ve şimdi bu beş ifadeden hangisinin istisnayı attığını bilmiyorsunuz.

(Aynı şey, herhangi bir türden aşırı uzun bir açıklama ile olur.)


2
Aynı kavram hata ayıklama için de geçerlidir, burada bir kez daha taneciklik genellikle bir satır numarasıdır.
David Hammen

2
Ah evet, bu bir sorun olabilir. “Favori” foo.bar[grill.boo].flip.flap[flop].mickey(minnie).marshmallow(Java / C # sözdizimi) gibi bir şeyde boş bir işaretçi gevşek olduğunda ortaya çıkar . Ekstra satırlarla (ve geçici değişkenler… ve orijinal geliştirici için bir 2D6 Brick Of Clue) bu tür karışıklığı sıralamak her zaman daha iyidir.
Donal Fellows

7

Satır başına bir deyim, yaygın olarak kullanılan bir kodlama stilidir. Sonuç olarak, gelecekte kodunuza bakan çoğu geliştirici muhtemelen satır başına birden fazla ifade gördüğünde sizi uyandıracaktır. Bir şeyi bir şekilde görmeye alışkın olduğunuzda, başka bir şekilde görmek korkutucu olabilir.

Bu nedenle nadir durumlar dışında buna karşı tavsiyede bulunuyorum.


4

Bunu en son 25 yıl önce düşük saat hızlarında çalışan küçük mikrolar üzerinde yorumlanmış dilleri kullanarak yaptım, burada her alan veya satırbaşı geri dönüşü performans artışı sağladı.

Şimdi bunun düşüncesinde wince (iyi bir nedenden dolayı yapıldıysa).

Ne yazık ki bu tür kodların okunması zordur ve bu nedenle sürdürülmesi zordur.


1
Böylece düzgün bir şekilde yazıyorsunuz, daha sonra "makine kopyanız" için boşluk ve diğer hazırlıkları çıkarıyorsunuz. Tıpkı günümüzde javascript'i küçültmek gibi.
CaffGeek

1
Evet - 1986'da kaynak kodunu yeniden işlemek için bir program yazdım - 1986'da. Bir daha asla yapmamayı umduğum başka bir şey.
quickly_now

1

Sözdizimsel olarak, bununla ilgili yanlış bir şey yoktur. Bu gerçekten ekibinizin kodlama stiline bağlıdır.

Gördüğüm kodun çoğu (standart c ++ başlıkları içindeki kod dahil) bu şekilde yapıldığından, ilk yönteminizle giderdim.

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

0

Bu gerçekten alışılmadık bir kodlama tarzı.

Bunun yerine kodun mantıksal bölümlerini sınırlamak için boş satırlar kullanmanızı öneririm.


0

Sağa çok ileri gitmek, birden fazla satır kadar sorun yaratabilir.

Düzinelerce alanla bazı sql ifadeleriyle uğraşmak zorunda kaldım. Normalde, her satıra bir tane koyardım, ancak birkaç kez 3 veya 4'ü arka arkaya birleştirdim. Bu, geliştirme sırasında birkaç kez yukarı ve aşağı kaydırmanız gerektiğinde iyi bir fikir gibi görünüyor.

Bu koda dönen pişmanım. Ek satırlara sahip olmak o kadar çok sorun yaratmaz gibi görünüyor, bu yüzden genellikle temizliyorum.


0

Ayrıca, kodumu korumak zorunda kalacak herhangi birinin bu yaklaşımla ilgili sorunları olduğunu düşünüyor musunuz?

Bir dakika boyunca ellerini başının üstüne koyduktan sonra, tüm okunamayan kodları her satırda bir ifadeye otomatik olarak ayırmak için en sevdiği IDE Regex işlevlerini kullanacak.

Gösterdiğiniz örneğe hızlı bir bakış, ikinci yaklaşımın ne kadar okunabilir olduğunu anlamak için yeterlidir.

Gözlerinizin sonsuza kadar yatay olarak hareket etmesine gerek kalmadan dikey sayfa akışını takip etmek çok daha kolaydır.

Örneğinize bakın: kodun tamamen Textfarklı textBoxnesnelerin özelliği ile ilgili olduğunu ve değer olarak dize içerdiğini hemen bilirsiniz . Oldukça basit.


0

Şahsen böyle bir tarz kullanmazdım. Özetlemek

Artıları

  • kaydırmak için daha az kod satırı
  • şu ifadeyi ifade etmek üzere anlamsal olarak gruplamak için kullanılabilir: "çok sayıda atama öğesi". ANCAK sizi çok rahatsız ederse, böyle bir bloğu her zaman bir işleve yeniden aktarabilirsiniz.

Eksileri

  • okunması zor, kodu yatay olarak okumak genellikle daha kolaydır (gözden geçirme, göz hareketi yok, ...)
  • diff kolayca birleşme de dahil olmak üzere bir kabus haline gelir
  • değiştirmek daha zor (kopyala yapıştır, yorum yapmak, ...)
  • hata ayıklama, bireysel ifadeler yerine satırlarda çalıştıkları için birçok IDE'de bir sorun olabilir.

Bazı "eksilerini" bazen artıları olabilir. Örneğin, bir kod parçasının formun ardışık sekiz işlemi olduğunu varsayalım if (x > maxX) {x=maxX; peggedAny = true;}. Böyle bir işlem kolayca tek bir satıra sığacaksa, ifadeleri ayıran düzinelerce satırdan ziyade bunun gibi sekiz satıra sahip olmayı tercih ederim. Bu tür karşılaştırmalar yeterli yerlerde kullanılmışsa, formun dört ifadesi peggedAny |= pegValueMinMax(ref x, minX, maxX);daha iyi olabilir, ancak okuyan biri pegValueMinMaxne yaptığını görmek için okumalıdır .
supercat

Ayrıca, bir çizginin küçük bir parçası değişirse, bir "fark" bunu tüm çizgide bir değişiklik olarak kabul edecektir. Hat işlevsel olarak bir birim olarak davranırsa, bu iyi bir şey olacaktır. Aksi takdirde, anlamsal bir işlem birden çok satıra bölünmüşse, bazı satırlarda yapılan değişiklikler çalışmayı belirgin olmayacak şekilde etkileyebilir.
supercat
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.