Herhangi biri Bob amcaya “işe yaramaz telleri” çıkarma aşkına meydan okuyabilir mi?


94

Ödeme duvarı içeriğine başvurmaktan nefret ediyorum, ancak bu video tam olarak neden bahsettiğimi gösteriyor. Robert Martin'de tam 12 dakika şuna bakar:

Bazı kod

Ve "Yapmam en sevdiğim şeylerden biri, işe yaramaz hale geldiğinde işe yaramaz tellerden kurtulmak" diyor:

Daha fazla kod

Uzun zaman önce, çok uzak bir eğitimde, bunu yapmamam öğretildi, çünkü olmadığında kontrol edildiğini düşünerek başka bir girintili çizgi ekleyerek bir hatayı tanıtmayı kolaylaştırıyor if.

Bob Amca'ya karşı dürüst olmak gerekirse, uzun bir Java yöntemini, çok daha küçük okunabilir kılan küçük işlevlere indirgiyor. Değiştirmeyi bitirdiğinde, (22.18) şöyle görünüyor:

Yine de daha fazla kod

Bunun diş tellerini çıkarmayı doğrulaması gerekip gerekmediğini merak ediyorum. Ben zaten en iyi uygulamaya aşinayım . Bob Amca bu konuda itiraz edilebilir mi? Bob Amca fikri savundu mu?


6
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum, çünkü bunun cevabı "hayır" ya da "evet, işte bir alıntı" olacak.
Blrfl

35
Birkaç yıl verin, belki de işe yaramaz linebreak'i de kaldıracaktır ve "eğer (görecek (bir şey)) diyecek (bir şey); Aslında edecektir olmak ;-) kod satırını
Steve Jessop

8
@SteveJessop Yıllarca ileride olduğumu duymak güzel. : D Newline olmadan, rezil böcek riski yoktur. Gerekirse diş teli eklemek / çıkarmak ek bir ek yüktür, ancak okurken çok daha fazla tasarruf sağlar.
maaartinus,

9
Bob Amca , Temiz Kod'da sayfa yapmak için iyi puanlar veriyor , sayfa 35. Bir ifblok sadece bir satır ise farketmez. Daha fazla satır eklemeniz gerekirse, ifbloğu bir satıra geri indiren başka bir fonksiyon olmalıdır (fonksiyon çağrısı). Buna bağlı kalırsanız, diş telleri sadece önemli değil - hiç .

13
Sadece return (page==null) ? "" : includePage(mode,page);bu kadar meraklı biriyse yapmalı ... Profesyonelce uygulama geliştirmeye başlayana kadar hiçbir ayraç tarzının havalı olmadığını düşündüm . Gürültü, muhtemel yazım hatası vb. Gibi farklı sesleri ayırt edin. Diş telleri, her zaman orada olmak, zamandan ve bunları daha sonra tanıtmanız gereken ek yüklerden tasarruf etmenizi sağlar.
vaxquis

Yanıtlar:


47

Okunabilirlik küçük bir şey değildir.

Tek bir yöntemi içeren diş telleri söz konusu olduğunda karışık bir aklım var. Onları tek satırlı iade ifadeleri gibi şeyler için kişisel olarak kaldırdım, ancak bu tür parantezleri dışarıda bırakmak aslında çalıştığım yerde bizi çok fazla ısırdı. Birisi ifgerekli parantezleri de eklemeden bir cümleye bir kod satırı ekledi ve C olduğu için sistemi uyarmadan çöktü.

Bu küçük fiyaskodan sonra her zaman diş telleri kullanma konusunda dindar olan kimseye asla meydan okumam.

Bu yüzden okunabilirliğin faydasını görüyorum, ancak bu destekleri dışarıda bıraktığınızda ortaya çıkabilecek sorunların farkındayım.

Bir çalışma veya yayınlanmış bir görüş bulmaya çalışmakla uğraşmazdım. Herkesin bir fikri vardır (yani bir görüş) ve bu bir üslup konusu olduğu için, bir fikir, diğerleri kadar iyidir. Konuyu kendiniz düşünün, artılarını ve eksilerini değerlendirin ve kendi lanet olası zihninizi oluşturun. Çalıştığınız mağazanın bu konuyu kapsayan bir kodlama standardı varsa, bunu takip edin.


7
Girinti kapalı ve yanıltıcı iken, ben de bu kadar yakın biraz ısırdı.
Andy,

12
O C'yi Çünkü olmadan GCC 6 en-Wmisleading-indentation .
wchargin

2
@CandiedOrange: Yerleşik dogmaya meydan okuyan Bob Amca.
Robert Harvey,

1
@RobertHarvey Bunu netleştirmedim mi? Evet, o zorlu dogma. MY dogma'ya meydan okuyor. Ben sadece iyi bir öğrenci olmaya çalışıyorum ve en azından düşünün. Ama Bob Amca o kadar karizmatik ki, nesnelliğini yitirip kaybetmediğimi merak ediyor. Koolaidi içmeden önce bir panzehir bulmak için yardım için yalvarıyorum.
candied_orange

1
@CandiedOrange: Bu kesinlikle bir bağlam meselesidir. Sadece dogmayı kör bir şekilde kabul edenler bağlamı göz önüne almaz; Kurallar, yararını tamamladıktan ve gerçekte bir engel haline geldikten uzun süre sonra, yönetilen dillerde "yalnızca bir dönüş" kuralını hala kullananlardır.
Robert Harvey,

133

Burada ya da burada ya da bisiklet tutkunlarının boyandığı her yerde yayınlanmamış promosyonlar ya da ayraçsız stilleri reddedebilirsiniz.

Bisiklet sürülerinden uzaklaşırken , 2014 yılının OS X / iOS SSL hatalarını hatırladınız mı?

if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

Evet, köşeli ayraç bloklarının neden olmadığı " https://www.imperialviolet.org/2014/02/22/applebug.html

Tercihler küme stiline bağlı olabilir. Yazmak zorunda olsaydım

if (suiteSetup)
{
    includePage(mode, suiteSetup);
}

Ben de yer kazanmaya meyilli olabilirim. Fakat

if (suiteSetup) {
    includePage(mode, suiteSetup);
}

sadece bir "ekstra" satırı kullanır.


Sormadığını biliyorum, ama yalnız çalışırsam, ben bir kafirim. Diş tellerini çıkarırsam, tercih ederim

if (suiteSetup != null) includePage(mode, suiteSetup);

İOS SSL tarzı hata ile aynı görsel soruna sahip değildir, ancak Bob Amca'nınkinden daha fazla "gereksiz" satır kaydeder;) Alışırsanız iyi okur ve Ruby'de ana kullanım alanı vardır ( includePage(mode, suiteSetup) unless suiteSetup.nil?). Pekala, sadece bir sürü görüş olduğunu biliyorum.


13
Artı, kullanırsanız } else[if(...)] {, bu ek herhangi bir ek satır eklemez, bu nedenle her şey için yalnızca bir ek satır ekler.
Random832

12
İOS SSL hatasını getirdiğinize sevindim. O zamandan beri, kendimi böyle durumlarda diş telleri kullanmaya başladım.
Zach Lipton

4
"Başarısız başarısız" hatasıyla ilgili olarak, Bob Amca'nın kodlama stilinin diğer yönlerinin de, en önemlisi son derece kısa yöntemler için en güçlü tercihinin onu önlediğini belirtmekte fayda var. İlk başta hiçbir zaman 79 hatlı bir metoda tolerans göstermezdi ve metot daha küçük olanlara bölündü: Büyük olasılıkla, ulaşılamamış kod için derleyici uyarılarının, sorunu engellemesi gereken uyarılar üretilmesi anlamına geliyordu.
Jules

16
"goto fail" tek satırlı bloklardan kaynaklanmadı, özensiz programlama, hatta sloppier kod incelemesi ve bir kez bile manuel olarak koddan geçmeden kaynaklanıyordu.
gnasher729

35
Meh, diş telleri eksikliği bu hataya neden olmadı. Dehşet verici programcılar (ve anlamlı bir kod incelemesi olmaması, test). Geri kalanımızın ellerini bağlayarak değil, sorumluları kovarak sorunu düzeltin!
Orbit'teki Hafiflik Yarışları,

62

Bob Amca, "her zaman diş tellerini kullan" baskın bir bilgelik olduğunda bu kadar yaygın olmayan böyle bir hataya karşı birçok savunma katmanına sahiptir:

  1. Tek hatlı şartlandırmalar için güçlü bir kişisel tercih, bu yüzden çok hatlı olanlar öne çıkıyor ve ekstra inceleme alıyor.
  2. İkinci bir satır eklediğinizde otomatik olarak gölgelenen bir editör.
  3. Sürekli çalıştığı eksiksiz bir birim paketi.
  4. Eksiksiz bir entegrasyon testi seti.
  5. Kodu birleştirilmeden önce yapılan bir meslektaş incelemesi.
  6. Tüm testlerin sürekli bir entegrasyon sunucusu tarafından tekrarı.
  7. Ürün kalitesi departmanı tarafından yapılan testler.

Bence birisi Bob Amca için bir meydan okuma yayınlasaydı, yukarıdaki hususlarla ilgili oldukça iyi bir çürütücü olurdu. Bu erken yakalamak için en kolay hatalardan biridir.


16
Sessizce başarısız olan şeylerden korktuğumdan hiç korkmadım. En azından bir çarpışma olduğunda biliyorsun. Bu şeyleri gördüğümde beynimin arkası karıncalanıyor. Gördüğümde olduğu gibi karışıyor while(true);{break;}. Bunun için gerçekten geçerli bir bağlam varsa, üstesinden gelmek biraz zaman alabilir.
candied_orange

9
includePage()Birden fazla ifadeyle hatalı yazılmış bir makro olmayan otomatik bir kontrol yöntemimiz var mı?
Martin York,

51
@LokiAstari Evet, "Java'da makro yok" denir.
svick

11
Yukarıdakilerin hepsi “yararsız parantez” politikasına ilişkin aşağı yönlü sorunların ““ yararsız parantez politikasını kullanma ”nedenlerinden daha fazla“ canımı yakmasından ”kaçınmanın yoludur. İhtiyacınız olan gerçekler (özel olarak # 1) bir avantajdan çok bir dezavantaj olarak değerlendirilmelidir.
SJuan76

16
@Jules Ah evet! İşyerinde aldığım veya piyasaya sürdüğüm ürünlerin tümü% 100 test kapsamı içeriyor (en azından), eşler arası gözden geçiriliyor (birkaç kez) ve etrafındaki tüm işletmeler Yazılım KG departmanlarına sahipler. Evet. Sanırım profesyonel kariyerinizde de aynı şeyi buldunuz, çünkü her işletmede tek programcılar yerine programcı ekipleri var ve yapmak istedikleri tüm testleri yapmak için onlara fazlasıyla zaman veriyorlar. Evet, tüm işyerlerini mükemmel şekilde tanımlar. Yazılımımızın HER ZAMAN% 100 hatasız gönderildiğinden emin olduğumuzda neden bazı ek hatalar eklemek konusunda endişelenmelisiniz?
SJuan76

31

Çoğunlukla, bu kişisel bir tercih, ancak dikkate alınması gereken bazı şeyler var.

Muhtemel Hatalar

O eklenti için parantez unutmadan kaynaklanan hata Ben kadarıyla, nadir iddia edilebilse de görülen bu onlar do gerçekleşmesi bazen (ünlü unutmamak IOS git başarısız hata). Bu yüzden kod stilinizi düşünürken bunun bir faktör olması gerektiğini düşünüyorum (bazı araçlar yanıltıcı girintiler konusunda uyarır , bu yüzden takım zincirinize de bağlıdır) .

Geçerli Kod ( bir hata olabilir gibi okur )

Hatta Projenizi varsayarak bu tür hatalar muzdarip değil kod okurken, onlar gibi görünmek kod bazı bloklarını görebilirsiniz olabilir zihinsel döngüleri bazı alarak ancak değildir - böcekler.

İle başlayalım:

if (foo)
    bar();

Bir geliştirici yararlı bir yorum ekler.

if (foo)
    // At this point we know foo is valid.
    bar();

Daha sonra bir geliştirici üzerinde genişler.

if (foo)
    // At this point we know foo is valid.
    // This never fails but is too slow even for debug, so keep disabled.
    // assert(is_valid(foo));
    bar();

Veya iç içe geçmiş bir blok ekler:

if (foo)
    while (i--) {
        bar(i);
        baz(i);
    }

Veya bir makro kullanır:

if (foo)
    SOME_MACRO();

“... Makrolar birden çok kod satırı tanımlayabildiğinden, makro do {...} while (0)birden çok satır için kullanıyor mu?


Yukarıdaki örneklerin tümü geçerli koddur, ancak kod bloğundaki içerik ne kadar fazla olursa, hata olmadığından emin olmak için o kadar fazla okumanız gerekir.

Belki kod stiliniz çok satırlı blokların bir ayraç gerektirdiğini tanımlar (ne olursa olsun, kod olmasalar bile) , ancak bu tür yorumların üretim koduna eklendiğini gördüm. Bunu okuduğunuzda, bu satırları en son kim düzenlediyse bir ayraç eklemeyi unuttuğuna dair küçük bir şüphe var, bazen kontrol edilme gereğinin (özellikle kodun bu alanındaki bir hatayı araştırırken) beklendiği gibi çalıştığını düşünüyorum .

Diff Gürültü

Tekli çizgiler için diş teli kullanmanın pratik bir nedeni, farklı sesleri azaltmaktır .

Değişen:

if (foo)
    bar();

Kime:

if (foo) {
    bar();
    baz();
}

... koşullu çizginin değişmiş olarak bir fark olarak görünmesine neden olur, bu da bazı küçük fakat gereksiz ek yükler ekler.

  • Satırlar kod incelemelerinde değiştiğini gösterir, eğer farklı araçlarınız kelime tabanına sahipse, yalnızca küme ayracının değiştiğini kolayca görebilirsiniz, ancak satırın hiç değişip değişmediğini kontrol etmek daha uzun sürer.
    Tüm araçlar kelime temelli farklılaşmayı desteklemiyor, diff (svn, git, hg ... etc) tüm satır değişmiş gibi gösterilecektir, süslü araçlarda bile, bazen düz bir çizgiye hızlıca bakmanız gerekebilir. neyin değiştiğini görmek için temelli fark.
  • ek açıklama araçları (örneğin git blame), satırın değiştirildiğini göstererek, satırın orijinini izlemeyi gerçek değişikliği bulmak için daha fazla adım haline getirir .

Bu ikisi de küçüktür ve kod gözden geçirme veya izlemede ne kadar zaman harcadığınıza ve değiştirilen kod satırlarına bağlı kalmanıza bağlıdır.

Farkında fazladan satır değişikliklerinin olması daha somut bir rahatsızlıktır; kodda değişiklik yapma ihtimalinin yüksek olması, birleşme ve el ile çözülmesi gereken çatışmalara neden olur .


Bunun bir istisnası var {, kendi satırında olan kod tabanları için - bu bir sorun değil.

Diff gürültü bu tarzda yazarsanız argüman tutmaz:

if (foo)
{
    bar();
    baz();
}

Ancak bu, bu kadar yaygın bir kongre değildir; bu nedenle, esas olarak bütünlüğüne cevabın eklenmesi (projelerin bu stili kullanması gerektiğini önermeyen) .


8
Ben bir tanım artı olduğunu yorumladı fark gürültü gürültüsünü seviyorum.
Martin York,

2
Keşke JSON'a kızgın olan herkes fark gürültüsünü düşünse! Sana bakıyorum, son virgül yok.
Roman Starkov

1
Huh, ben {kendi çizgisi tarzının fark yaratan gürültüsünü düşünmemiştim . Bu tarzdan gerçekten nefret ediyorum ve bu tarzın gerekli olduğu projeler üzerinde çalışmaktan hoşlanmıyorum. Belki de aklımda, bu şekilde kodlama zorunluluğu biraz daha az sinir bozucu olur. Kod yoğunluğu önemlidir. Monitörünüzdeki tüm işlevleri bir seferde görebilirseniz, her şeyi kolayca yapabilirsiniz. Okunabilirlik için bir fonksiyonun içindeki ayrı kod blokları arasında boş satırlar bırakmayı seviyorum (grupla ilgili ifadelere) ve başka yerlerde boşa harcamayı zorlamak, amaçlanan kırılmaları daha da zayıflatıyor.
Peter Cordes

1
@ peter-cordes, aynı zamanda {kendi çizgi stili hayranı değil , sadece cevapların eksiksizliği için dahil edildi. Kullanmak için makro güvenen gelince do{}while(0), bu sorun sensin bulmak için güven neredeyse her zaman. Sorun şu ki, kazalar meydana geliyor, hatalar kod incelemesiyle kayabilir ... ve başka türlü gerçekleşmeyen hatalar ortaya çıkabilir.
ideasman42

2
Potansiyel hataları listeliyorsak, ayrı ayrı satırları yorumlayabilmek bir başka iyi şeydir. Birinin ifadesini tek satırlı if if ifadesine kör bir şekilde yorum yapan birinin neden olduğu bir hatayı takip ediyordum. Aşağıdaki ifade, koşulsuz olarak yürütülmek yerine koşullu olarak yürütüldü.
Eldritch Cheese

15

Yıllar önce bir C kodunu hata ayıklamak için getirildim. Böceği bulmak zordu, ama sonunda şöyle bir ifadeye kaynatıldı:

if (debug)
   foo (4);

Ve onu yazan kişinin foobir makro olarak tanımlandığı ortaya çıktı . İçinde iki kod satırı bulunan bir makro . Ve elbette, bu iki çizgiden sadece ilki if. (Böylece ikinci satır koşulsuz olarak yürütüldü.)

Bu, C'ye ve onun ön işlemcisine özgü olabilir - bu, derlemeden önce değiştirmeleri yapar - ama asla unutmadım. Bu tür bir şey size bir iz bırakıyor ve neden güvenli bir şekilde oynamıyorsunuz - özellikle de çeşitli dilleri ve araç zincirlerini kullanıyorsanız ve bu tür bir şennanlının başka yerlerde mümkün olmadığından emin olamazsanız?

Şimdi görünüşe göre ayraçları herkesten farklı olarak kullanıyorum. Tek bir satır için ifben yapardım:

if (debug) { foo (4); }

bu yüzden parantez eklemek herhangi bir ek hat almaz.


6
Bu durumda, bu makroyu kim yazdıysa, hatalı olandır.
gnasher729

6
C önişlemci makrolarını doğru yazmak sezgisel olmayabilir, ancak yapılabilir. Ve bu yapılmalı, gnasher729'un işaret ettiği gibi. Ve sizin örneğiniz, birden fazla ifade içeren herhangi bir makronun gövdesini bir do { ... } while(0)döngüye dahil etmesi gerektiğinin nedenidir . Bu sadece if()ifadeleri ekleyerek her zaman doğru davranılmasını sağlamakla kalmayacak , aynı zamanda ifadenin sonundaki noktalı virgülün doğru yutulmasını da sağlayacak. Böyle basit kurallar hakkında bilgisi olmayan, sadece önişlemci makroları yazmamalıdır. Çağıran sitede savunmak savunmak için yanlış bir yerdir.
cmaster

18
@cmaster: Doğru, ancak makroların (veya diğer dil özelliklerinin) başkaları tarafından nasıl yazıldığı kontrolümün dışında. Diş tellerini nasıl kullandığım kontrolüm altında. Bunun diş tellerini dahil etmek için demir kaplı bir sebep olduğunu söylemiyorum, ama kendimi diğer insanların hatalarına karşı savunmak için yapabileceğim bir şey, bu yüzden bunu yapıyorum.
Wayne,

@ gnasher729, başka birinin suçunu kim umursar ki? Kod incelemeleri yapıyorsanız ve bazı makul kod standartlarını takip ediyorsanız, bu sizin ekiplerinizin hatası olabilir. Ve kullanıcılara ulaşırsa, buggy yazılımı serbest bırakan organizasyonu suçlayacaklar.
ideasman42,

1
Makrolarla gelen her kimse hatalı olandır.
Neme

14

"Bob Amca" fikrini alabilir, fikrini alabilirsin. Ona meydan okumaya gerek yok.

Otoriteye itiraz etmek istiyorsanız, Chris Lattner'ı alın. Swift'de, ifadeler parantezlerini kaybettiyse, ancak her zaman parantez ile birlikte gelirse. Tartışma yok, bu dilin bir parçası. Eğer "Bob Amca" diş tellerini çıkarmaya başlarsa, kod derlemeyi durdurur.

Başkasının kodundan geçmek ve “gereksiz parantezlerden kurtulmak” kötü bir alışkanlıktır. Yalnızca kodun gözden geçirilmesi gerektiğinde ve çatışmalar gereksiz yere oluşturulduğunda fazladan çalışmaya neden olur. Belki "Bob Amca" kod incelemelerine ihtiyaç duymayacak kadar inanılmaz derecede iyi bir programcıdır? Hayatımın bir haftasını boşa harcadım çünkü bir üst programcı "if (p! = NULL)" i "" (! P) "olarak değiştirdi ve kod incelemesi yapmadan, en kötü yerde saklandı.

Bu çoğunlukla zararsız bir tarz tartışmasıdır. Destekler, destek eklemeden başka bir kod satırı ekleyebilme avantajına sahiptir. Bir günlük ifadesi veya bir yorum (yorum izlerse bunu takiben sadece korkunç) gibi. aynı satırda ifade, birçok hata ayıklayıcınızla sorun yaşamanızın pratik dezavantajına sahip. Ama ne istersen onu yap.


1
Sanırım bu “zorlayıcı” dır, çünkü UB (sic!) Düşüncelerini gerçekler olarak sunar - en azından onu dinlediğimde beni vurur.
vaxquis

3
"Ne istersen onu yap" demek aslında Bob Amca ile aynı fikirdeydi çünkü "önemli değil" diye iddia ediyor. Birçok dilde bu bir konudur. Ben her zaman diş telleri kullanmalı ve bu zorlu kimseyi görmemiş olmalısınız, bunun bir sorun olduğunu düşündüm. Şimdi burada Bob Amca buna meydan okuyor ve acaba bu kadar kaçtığını düşündüğü minik yöntemlerle çalıştığı veya onunla dolu olduğu için kaçtığını merak ediyorum. @PaulDraper'ın cevabında bahsettiği böcek türleri nedeniyle tam olarak zararsız olduğunu düşünmemiştim.
candied_orange 5:16

Re hep : sözdizimsel gürültü rahatsız edici ve yakın ayracı için ekstra "boş" satır ayrıca okunabilirliği engelleyen, çizgileri ayrıldığında edilmemelidir paragrafta görsel ayırıcı ekler. Bu, özellikle bahsettiğiniz kısa ve özlü bloklarda önemlidir.
JDługosz

9

Diş tellerini çıkarmama nedenlerim:

  1. karar yorgunluğunu azaltmak. Her zaman ayraç kullanıyorsanız, ayraç kullanıp kullanmayacağınıza karar vermeniz gerekmez.

  2. Geliştirme sürtünmesini azaltın: Sonunda tüm çoklu mantık satırlarını yöntemlere çıkarmak için çabalasanız bile, eğer bir mantık eklemek için bir kümelenmişse bir parantezsizi dönüştürmek zorunda kaldığınızda can sıkıcı bir geliştirme sürüsüdür. Böylece, parantezleri sökme ve daha fazla koda ihtiyacınız olduğunda bunları tekrar ekleme çabası var. Küçük ama can sıkıcı.


0

Genç bir meslektaş, gereksiz ve gereksiz olarak gördüğümüz diş tellerinin aslında onun için faydalı olduğunu söyledi. Tam olarak nedenini hatırlamıyorum, ancak daha iyi kod yazmasını sağlarsa, bu tek başına onları tutmak için bir nedendir.

FWIW, biz tek bir satırda koyarak bu kadar kısa ön koşulların yapmaz bir uzlaşma üzerinde anlaşma un bana dikkat dağıtıcı / okunabilir. Örneğin

if (!param) { throw invalid_argument (blahblah); }
if (n < 2) { return 0; }
// real code for function starts here...

Ayrıca, bu giriş ön koşullarının genellikle vücut için kontrol akışı ifadeleri (örneğin, a return) olduğunu, bu yüzden aynı koşul altında olması ve diş tellerini yazmayı unutmaktan ikinci bir ifade eklemenin korkusu olduğunu düşünüyorum. Bu koşul altında ikinci bir ifade zaten ölü kod olacaktır ve bir anlam ifade etmeyecektir.

Okuma meselesindeki akıcılığın , kişinin beyninin ayrıştırıcısının şartlı ifadenin bir parçası olarak diş tellerine sahip olması için kablolu olmasından kaynaklandığından şüpheleniyorum . Yani C ++ dilbilgisi doğru bir şekilde yansıtmaz, ama belli bir öğrenme yan etkisi olabilir diğer durum böyle olduğunda, ilk dil.


1
Bob Amca, muhtemelen onlarsız daha iyi kod yazdığını düşünüyor.
djechlin

2
Ben ve diğerleri de C ++ 'da akıcı.
JDługosz

1
"eğer daha iyi kod yazmasını sağlarsa, bu tek başına onları tutmak için bir nedendir" ++ Ben de aynı şeyi söyleyen bir Jr. var, bu yüzden onları saklıyoruz.
RubberDuck

... ve bu yüzden Bob Amca'nın istediği şekilde yapmak için tek sebep bu.
djechlin

-1

Bu videoyu şimdi izledim, ayraçları kaldırmanın, kodun hala yeniden yapılandırılmaya ihtiyacı olan yeri görmeyi kolaylaştırdığını fark ettim. Diş tellerine ihtiyacınız varsa, kodunuz muhtemelen biraz daha temiz olabilir.

Bir takımdayken, diş tellerinin kaldırılmasının muhtemelen bir gün beklenmeyen davranışlara yol açacağını söylemiştiniz. Onları koruyalım ve işler ters gittiğinde kendinizi çok fazla baş ağrısından kurtarırsınız.


bu, önceki 10
cevapta

-3

Bunu yapmamam öğretildi, çünkü eğer olmadığında kontrol edildiğini düşünerek başka bir girintili satır ekleyerek bir hatayı tanıtmayı kolaylaştırıyor.

Kodunuz iyi bir şekilde test edilirse , bu tür bir "böcek" karşısında patlayabilir.

İşe yaramaz ve çirkin parantezlerden kaçınarak kodun temizlenmesi takip ettiğim bir uygulamadır.


9
Tabii ki, bunun tersi de geçerlidir: eğer kodunuz hatasızsa, herhangi bir birim testine ihtiyacınız yoktur. Gerçek şu ki, bazen kodlarda hataların, bazen de testlerde hataların olduğu kusursuz bir dünyada yaşıyoruz. (Tecrübelerime göre, ikincisi aslında daha yaygın.) Bu nedenle, testler kesinlikle hata riskini azaltırken, bu riski tekrar tekrar arttırmanın başka yollarını bulmak için mazeret değildir.
ruakh

3
Ruaks adlı kullanıcının yorumuna eklemek için:% 100 birim bir kodu test etmek mümkün değildir.
BЈовић

Lütfen koduma bakın;) TDD'yi uygularken, bu tür hatayı çok hızlı bir şekilde göstermek her zaman mümkündür.
Mik378

@ Mik378 bu kesinlikle doğru değil. Mesele şu ki, diş telleri kullanırsanız, endişelenmenize bile gerek kalmaz.
GoatInTheMachine
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.