Blok - parantez veya yok ise tek ifade? [kapalı]


59

Hangisi daha iyi / daha genel olarak kabul edilir?

Bu:

if(condition)
{
  statement;
}

Veya:

if(condition)
  statement;

Birincisini tercih etme eğilimindeyim, çünkü if if bloğunda gerçekte ne olduğunu söylemeyi kolaylaştıracağını düşünüyorum, başkalarının parantezleri daha sonra eklemelerini (veya unutarak bir hata oluşturmayı) kurtardığını ve tüm if ifadelerinizi yaptığını düşünüyorum. bazıları parantezli, bazıları olmayan üniforma. İkincisi, yine de, sözdizimsel olarak doğru ve kesinlikle daha kompakt. Hangisinin başkaları tarafından daha çok tercih edildiğini görmek merak ediyorum.


2
Ama açılış desteğini yanlış pozisyonda tutuyorsun. Bu kesin.
Christian Mann

Birçok dilde, bir blok bir ifadedir, dolayısıyla, sözdizimsel olarak, her zaman (if) ifadesidir
Ingo

2
Dil belirtmediğinden beri ... Peki ya statement if condition;?
Dave Sherohman

@ Hıristiyan - iyi bir. Bundan ayrı bir soru daha olurdu, değil mi?
Zannjaminderson

@Ingo - iyi nokta.
Zannjaminderson

Yanıtlar:


131

Birincisi daha iyi çünkü ikincisi hataya açık. Örneğin, bir şeyi hata ayıklamak için geçici olarak kodu yorum yaptığınızı varsayalım:

if(condition) 
//      statement;
otherStatement;

Veya acele kod ekleme:

if(condition) 
    statement;
    otherStatement;

Bu tabii ki kötü. Öte yandan, birincisi zaman zaman kendimi çok ayrıntılı hissediyor. Bu nedenle, yeterince kısa ve basitse, her şeyi tek bir satıra yerleştirmeyi tercih ederim:

if(condition) statement;

Bu, yapının gerçekte yaptığı şeyi yaptığı gibi görünmesini sağlayarak sözdizimsel gürültüyü azaltıyor, daha az hataya neden oluyor. Bu sözdiziminin yalnızca çok basit, kısa koşullar ve ifadeler için kullanılması koşuluyla, bunu tamamen okunabilir buluyorum.


35
Her şeyi bir satıra koymak için iyi bir nokta.
Neil Aitken

7
@ artjomka: Eğer ifade uzunsa ve kendi satırına gitmek zorunda kalırsa, okunabilirlik için ayraç kullanıyorum. Mesele şu ki, incelemek yerine, çabucak okuyan bir insan için belirsiz olan en kısa, en az sözdizimsel olarak en gürültülü yapıyı görmek istiyorsunuz.
dsimcha

15
Daha önce belirtilen sebeplerden dolayı diş telli olanı tercih ederim. Tek astarı sevmiyorum, çünkü hata ayıklayıcısındaki çizgiyi aştığımda ne olduğu hemen belli değil. Hangi koşulun değerlendirildiğini görmek için ayrı bir adım atmam gerekiyor.
Jim A

10
@TMN boşluk boş, monitörler büyük ve beyniniz kodu ayrıştırmanıza yardımcı olan şekli tanımayı öğreniyor.
Murph

5
@Murph: boşluk boş mu? Bunu özlemiş olmalıyım. Ekranımda gerçekten çok yer kaplıyor. Aslında% 50'den fazla. Kitabımda hangisi büyük bir atık gibi görünüyor. Şahsen kod karesinde santimetre kare başına içeriği en üst düzeye çıkarmaktan hoşlanıyorum.
Konrad Rudolph 16

44

Her zaman sadece güvende olmak için parantez kullanırım.

Bunu yazarken sorun değil, ancak birisinin gelecekte ortaya çıkacağını ve etrafına parantez koymadan başka bir ifade ekleyeceğini biliyorsunuz.


20
İnsanlar bunun gerçekten olduğunu gördü mü? Bunu 10 yıllık programlamada hiç gördüğümü sanmıyorum. Belki de çok fazla korunaklı oldum. :)
David

9
Hayır demek isterdim ama ne yazık ki bunu gördüm.
Neil Aitken

13
Her zaman parantez kullanırsınız, böylece parantez kullanmayı asla unutmazsınız - bu kadar basit.
Murph

12
+1 ila @Murph. Aynı nedenden ötürü etrafta kimse yokken ve park yerlerinde dönüş sinyallerimi kullanıyorum!
Dan Ray,

7
Daldan gövdeye veya dallar arasında birleşirken hataların önlenmesine yardımcı olmak için bu iyi bir uygulamadır.
JBRWilkinson

27

Mümkün olduğunda diş teli kullanmadan modeli tercih ediyorum .

Aşağıdaki açıklama uzuncadır. Lütfen bana eşlik et. Bu tarzı tercih etmem için zorunlu bir sebep vereceğim. Ayrıca, her zamanki karşı tartışmanın neden geçerli olmadığını düşündüğümü açıklayacağım.

(Yakın-) boş satırlar atık

Bunun nedeni kapanış parantezinin ekstra bir kod satırı gerektirmesidir - ve açılış parantezinin de stile bağlı olarak değişmesidir. 1

Bu büyük bir anlaşma mı? Yüzeysel olarak hayır. Sonuçta, çoğu insan aynı zamanda mantıksal olarak biraz bağımsız blokları ayırmak için kodlarına boş satırlar koyar ve bu da okunabilirliği büyük ölçüde geliştirir.

Bununla birlikte, dikey alanı boşa harcıyorum. Modern monitörler aslında geniş bir yatay alana sahiptir. Ancak dikey alan hala çok, çok sınırlıdır (dik olarak çevrilmiş bir monitör kullanmıyorsanız, ki bu nadir değildir). Bu sınırlı dikey boşluk olan bir sorun: yaygın bireysel yöntemler mümkün olduğunca kısa olmalıdır ve olmadan tüm bloğu görebilirsiniz böylece o tekabül ayraçları (veya diğer blok ayraçlar) farka bir ekran yüksekliğinin en fazla olması gerektiğini kabul ediyor kaydırma.

Bu temel bir sorundur: Ekrandaki tüm bloğu artık göremediğiniz zaman, kavraması karmaşıklaşır.

Sonuç olarak, gereksiz boş satırları görmezden geliyorum. Tek boş satırların bağımsız blokları sınırlamak için çok önemli olduğu durumlarda (sadece bu metnin görsel görünümüne bakın), ardışık boş satırlar kitabımda çok kötü bir stildir (ve benim deneyimime göre genellikle acemi programcıların bir işaretidir).

Aynı şekilde, basitçe bir destek tutan ve ekonomik hale getirilebilecek çizgiler de olmalıdır. Parantezlerle sınırlandırılmış bir tek deyim bloğu, bir ila iki çizgiyi boşa harcar. Ekran yüksekliği başına sadece 50 hat çizgisiyle, bu fark edilir.

Diş telini çıkarmak belki zarar vermez

Parantezi atlamaya karşı yalnızca bir argüman var: birisi daha sonra söz konusu bloğa başka bir ifade ekleyecek ve parantez eklemeyi unutmayacak, böylece yanlışlıkla kodun anlamını değiştirecek.

Bu gerçekten büyük bir anlaşma olurdu.

Ama benim tecrübeme göre, öyle değil. Ben özensiz bir programcıyım; ve henüz programlama deneyimi benim on yılda, ben olduğunu söyleyebiliriz kez değil bir tekil bloğa fazladan deyimi eklerken parantez eklemek için unutulmuş.

Bunun yaygın bir hata olması gerektiğini bile yanlış buluyorum: bloklar programlamanın temel bir parçası. Blok düzeyinde çözünürlük ve kapsam belirleme, programcılar için otomatik, yerleşik bir zihinsel süreçtir. Beyin sadece bunu yapar (aksi takdirde, programlama konusundaki mantık çok daha zor olurdu). Diş tellerini yerleştirmeyi hatırlamak için gereken ilave bir zihinsel çaba yoktur: programcı ayrıca , yeni eklenen ifadeyi doğru bir şekilde girmeyi hatırlatır ; bu yüzden programcı zihinsel olarak bir bloğun dahil olduğunu işlemiş durumda.

Şimdi, ben am değil parantez atlayarak hataları neden olmaz diyerek. Demek istediğim, hiçbir şekilde ya da böyle bir kanıtımız olmadığı. Sadece zarar verip vermeyeceğini bilmiyoruz .

Bu yüzden birisi bana, bilimsel deneylerden toplanan, pratikte bunun gerçekten bir sorun olduğunu gösteren, zor veriler gösterebilinceye kadar, bu teori “ tam da böyle bir hikaye ” olmaya devam ediyor : hiç test edilmeyen çok zorlayıcı bir hipotez gereken olmayan bir bağımsız değişken olarak kullanılır.


1 Bu problem bazen her şeyi - parantez dahil - aynı satıra koyarak çözülür:

if (condition)
{ do_something(); }

Ancak, çoğu insanın bunu hor gördüğünü söylemenin güvenli olduğuna inanıyorum. Dahası, diş telsiz varyantla aynı problemlere sahip olacaktı, bu yüzden her iki dünyanın da en kötüsü.


6
Parantezlerin çıkarılması okunabilirliğe zarar verir ve kod değiştirildiğinde kolayca sorunlara neden olabilir.
Josh K

15
@Josh: ilk iddia, Python gibi dillerin gösterdiği gibi saçmadır (aksi takdirde düşünürseniz kanıtlarla destekleyin). İkincisi cevabımda karşılık oldu. Destekleyecek kanıtın var mı? Aksi taktirde yorumunuz, metnimi gerçekten okumadığınızı gösterir. Lütfen eleştirmeden önce yapın.
Konrad Rudolph

8
Düşünceleriniz için +1, ancak bence konumunuz kendini yitiriyor. “Bana zor deneyleri, bilimsel deneylerden toplanan, bunun gerçekten pratikte bir sorun olduğunu gösterdiğini göster” diyorsunuz ve yine de konumunuzu savunmak için anekdotsal deneyime (kendi) dayanıyorsunuz. “Tecrübelerime göre… on yıllık deneyimimde… bunu uygunsuz buluyorum…” diyorsunuz. Bilimsel deneylerden toplanan, "Diş tellerini atlamak zarar vermez" iddiasını destekleyen sert veriler gösterebilir misiniz? Bir görüşü desteklerken kişisel deneyim iyidir, ancak vermek istediğinizden daha fazla “kanıt” istemeyin.
bedwyr

3
@bedwyr: Niteliksel bir fark var. Birincisi, ben aslında verilerle ikna olacağı açıklığa kavuşturmak ve ben eşit derecede açık maden sadece bir hipotez olduğunu yapmak değil verilerle desteklenmektedir. İkincisi, iddianın yanlış olduğu ve neden desteklenmesi gerektiğine olan inancım için (en azından benim için) makul bir argüman belirttim. Bu beni üçüncülüğe götürüyor: Buradaki sapkınlık, haklarını ispat etmeme değil, iddialarını kanıtlamaya muhalefetin üzerinde. Olasılık problemine ek olarak, kodlama tarzımı destekleyen alakasız bir gerçek argümanı da gösterdim.
Konrad Rudolph

4
@Konrad - python , aksi halde gösterilmez, çünkü çentiklenme belirgindir ve dolayısıyla parantezler örtüktür . Burada bulunan tipteki iyi parlak programcılar muhtemelen hata yaparlarsa, çoğu zaman (çoğu zaman yalnızca birkaç kez sorunla karşılaştığım) hata yapmazlar ama çok daha az iyi olan Orada kodlama standartlarına en çok ihtiyaç duyulan nedenlerden biri olan aptalca şeyler yapan programcılar var. (Ve son başvuru tarihleri ​​ve stres bizi en iyi duruma getirebildiğinden daha az.)
Murph

19

İkinciyle giderim. Daha özlü ve daha az ayrıntılı.

En düşük ortak paydaya yazmaya çalışmıyorum, bu nedenle diğer geliştiricilerin bugün programlamada en yaygın kontrol akış yapılarından birini nasıl yazacaklarını bilmelerini bekliyorum.


11
kesinlikle! Sonuçta, eğer kodu yazmak zorsa, bakımı da zor olmalı! ;-)
Steven A. Lowe

3
@Steven Diş tellerini unutursanız, burada başka problemler olduğunu düşünüyorum.
TheLQ

succint == daha az ayrıntılı
UncleZeiv

5
@SnOrfus: biraz alaycı, çünkü fazladan 2 karakter önemsiz ek yükler ve çok yaygın bir bakım hatasını önler. Kilometreniz Değişebilir ;-)
Steven A. Lowe

1
Bana göre girinti, neler olduğunu açıkça ortaya koyuyor. İlk form fazladan ekran boşluğu yakıyor ve bu yüzden benim için olumsuz.
Loren Pechtel

16

Aşağıdakileri kullanırım (burada fikir birliği):

if (condition) {
    any_number_of_statements;
}

Bu da mümkün:

if(condition) single_compact_statement;

Çok iyi değil, özellikle C / C ++ dillerinde:

if(condition) 
    single_compact_statement;

(Burada Python'da seçenek yok ;-)


In Perl , kullanmak istiyorum:

$C = $A**3 if $A != $B;

veya

$C = $A**3 unless $A == $B;

(Bu sözde kod değildir ;-)


1
Benim düşüncelerim tam. Single ifadesi ifcümlenin ardından tek bir satırda iyi görünüyorsa , parantez kullanmam. Başka bir ifcümle (veya birden çok satır kullanan herhangi bir cümle) için her zaman ayraç kullanırım. Özellikle, bir elsemadde varsa, her durumda daima diş telleri vardır.
eswald,

9
Daha önce hiç kimsenin perl'i sahte kodla karıştırdığını görmedim. Rasgele karakterler evet, sözde kod - hayır.
Joe D

3
Acaba bir Perl program jeneratörü sadece bir Perl tercümanına bağlayarak / dev / rasgele bağlayarak mı ...
Christian Mann

Ruby'nin buradaki yaklaşımını seviyorum. Perl tarzı tek satır <statement> if <condition>veya çok satırlı blok tarzı if <condition>/ <do something>/ sunar end(yakut parantezleri önler, bu nedenle burada açılı ayraç ima edilir ifve bitiş ayracı değişmez end). Hatta tuhaf multiline ama gerçekten sadece tek satır if if ifadesi sunmuyor.
Ben Lee

Tek astar çoğu hata ayıklayıcıyla çalışmaz ('if' yan tümcesinin içeriği yürütmek üzereyken bir mola tetiklemek mümkün değildir).
Peter Mortensen

11

Parantez yöntemini kullanıyorum - yukarıdaki tüm nedenlerden ötürü bir artı daha.

Kod birleşiyor. Otomatik birleşmelerden dolayı kırıldıysa, bu tek ifadeyle çalıştığım projelerde gerçekleştiği biliniyor. Korkunç olan şey, kod yanlış olmasına rağmen girintinin doğru görünmesidir , bu yüzden bu tür böceklerin tespit edilmesi zordur.

Ben de diş telleriyle çıkıyorum - kendi hatlarında. Seviyeleri bu şekilde tespit etmek daha kolay. Evet, dikey perde emlak israfı yapıyor ve bu gerçek bir dezavantaj. Dengede olsa, buna değer olduğunu düşünüyorum.


10

Diş teli yok. Başka bir programcı koduma ikinci bir ifade eklerse, birinin arabamı kullanmasına izin vermemden ve bir uçurumdan geçmelerinden daha fazla hatam yok.


3
Kesinlikle! Bu bizim hatamız değil, sözdizimini bilmiyor.
kirk.burleson

3
Kötü örnek. İyi bir tanesi, yanlış yerleştirilmiş pedallara sahip bir otomobildir - fren yerine gaz. Bu senin araban, başka kimseyi umursamıyorsun. Pedalların benzersiz konumlandırılması hakkında bilmedikleri bir sorun var. Bu durumda iyi bir araba mühendisi misiniz?
yegor256,

Onlara sarhoş olabileceğini bilerek onlara arabanı vermiş olman senin suçun olurdu. Benzer şekilde, bakımı kolaylaştırmak için gelecekteki geliştiriciler hakkında mümkün olduğunca az varsaymaya çalışmalıyız.
Aram Kocharyan

8

Bu argümanı burada bir kereden fazla yaptık ve genel görüş birliği her zaman parantez kullanmaktır. Ana sebepler okunabilirlik / bakım kolaylığı ile ilgilidir.

Bloğa kod eklemeniz ifgerekiyorsa, ayraçları hatırlamanız / aramanız gerekmez. Gelecekteki programcılar kodu okuduğunda, parantezler her zaman belirgindir.

Artı tarafta, ReSharper otomatik olarak Visual Studio'daki tembel programcılara parantez ekleyecek ve sanırım diğer IDE'ler için de ekler olduğunu varsayıyorum .


3
Kategorik olarak okunabilirlik iddiasını satın almıyorum. Python var olan en okunaklı dillerden biridir ve sınırlayıcıya ihtiyacı yoktur. Bu iddia doğru değil. Ayrıca sürdürülebilirlik iddiasını da satın almıyorum, çünkü bugüne kadar kanıtlanmamış ve hala tekrar tekrar düzeltildi. Ama bu durumda aslında ampirik kanıtlarla ilgileniyorum. Bu, bir çalışmanın kolayca bulabileceği ve bir kez ve herkes için razı olabileceği bir şeydir.
Konrad Rudolph

Python, sınırlayıcılar yerine girintiyi kullandığından, geçerli bir karşılaştırma olmadığını ima ederler.
Murph

@Konrad - ampirik kanıt: Yeni bir programcı olduğumda, önceki programcının kaşlı ayraçlar ile uğraşmadığını fark etmeden, eğer bir bloksuzsa blokaja şahsen kod ekledim. Şahsen diğer insanların bunu kendi gözlerimle yaptığını gördüm. Verilmiş, yalnızca bir kez kodunu çalıştırdıktan sonra sorunu bulmak için yardıma ihtiyaç duyduğumu gördüm, ancak bunun kötü test becerileriyle ilgisi vardı.
şimşek

@ shimonyk: temelde gözlemleriniz bu sorunun önemsiz olduğuna dair iddiamı destekliyor mu? Bu arada, kişisel gözlemler fıkra şeklindedir, ampirik kanıt olarak sayılmazlar.
Konrad Rudolph

@Konrad çok iyi, lütfen kaynaklarınızı da belirtin. Referans yaptığınız bir meslektaş tarafından gözden geçirilmiş çift-kör çalışmanız olduğunu varsayıyorum? Olmazsa, başkalarının yanlış olduğunu ispatlamak için kendi fıkralarınızı sadece yüzdürmek yerine, diğer kanıtları talep etmek, 'kanıtlara' atıfta bulunmak en iyi ikiyüzlüdür. Bu konuda daha ileri düzeyde birisinin yazdığı gibi, "buradaki itiraz, ispat etmeme değil, iddialarını kanıtlamak için muhalefetin üzerinde."
şimşek

7

İlk sözdizimini neredeyse istisnasız olarak kullanıyorum. Çünkü yanlış yorumlanamaz .

"Beni düşündürme" sadece kullanıcı arayüzleri için geçerli değil, millet ;-)


4
Bunu yapardım ama programcıların dili bilmeleri gerektiği ve düşünmeleri gerektiği konusunda savaştım.
kirk.burleson

2
Gelecekte kendi kendime ... ortak nezaket olarak görüyorum.
Steven A. Lowe

5

Ben şahsen ikinciyi tercih ederim. İlki çirkin, garip görünüyor ve yatay alanı boşa harcıyor. İkincisi ile ilgili temel problemler makrolardır ve kodunuzu daha sonra yanlış bir şekilde değiştiren insanlar.

Bunun için "makro kullanma" diyorum. Ben de "Lanet kodunu doğru gir" derim. Programlama için kullanılan her metin editörünün / IDE'nin otomatik olarak girintiyi nasıl yaptığını göz önüne alarak, bunu yapmak o kadar zor olmamalı. Emacs'ta kod yazarken, önceki satırda yanlış bir şey yazıp yazmadığımı belirlemek için otomatik girintiyi kullanırdım. Emacs çentik batırmaya başladığında, genellikle yanlış bir şey yaptığımı biliyorum.

Uygulamada, benden önce ne şekilde kodlanmış bir kongre düzenlendiğini takip ediyorum. Fakat bunlar beni rahatsız ediyor (ve Python'u kodladığımda ve bu tüm braket felaketi gittiğinde beni çok mutlu ediyor):

if (condition) {
    statement;
} // stupid extra brace looks ugly

Sonra

if (condition) // the brackets have now just become noise
{ statement; } // also can't see the indentation, harder to read

Her ne kadar dürüst olmak gerekirse, bir if ifadesindeki iki ifade, beni tek bir ifadeden çok daha fazla rahatsız ediyor. Çoğunlukla, çünkü parantez gerekli ve if ifadesinde sadece iki ifadeyle komik görünüyor.


Makrolar yazacaksanız, kodun herhangi bir bölümüne zaten girilmeden girilebildiklerinden emin olmak için bunları yazmalısınız.
Covar,

4

İki hatlı sürümü parantezsiz kullanıyorum (2. form), ancak yer kazanmak için kullanmıyorum.

Bu formu kullanıyorum çünkü onu daha okunaklı, görsel olarak çekici ve yazması daha kolay buluyorum. Bu formu yalnızca bu koşullar yerine getirildiğinde kullanırım; yani ifdurumun tek bir satıra güzel bir şekilde oturması ve karşılık gelen ifadenin aşağıdaki satıra güzel bir şekilde uyması gerekir. Aksi takdirde, okunabilirliği artırmak için kaşlı ayraç kullanacağım.

Bu formu kullanırsam, ififadeden önce ve sonra (veya varsa yorumun üstünde ) boş bir satır (veya yalnızca bir ayraç içeren bir satır) olduğundan emin olun . Bu bilinçli bir şekilde takip ettiğim bir kural olmasa da, bu soruyu okuduktan sonra şimdi anlıyorum.

Ekran alanını korumak benim için bir öncelik değil. Daha fazla alana ihtiyaç duyarsam daha büyük bir ekran kullanırdım. Ekranım zaten dikkatime odaklanmam gereken herhangi bir şeyi okuyabilecek kadar büyük. Bir kerede tüm ekranımı kapatacak kadar çok kod satırına odaklanmam gerekmiyor. Eğer bir kerede daha fazla görüntülemeden anlayamadığım bir kod parçasıyla çok fazla iç içe geçmiş bir durum varsa, mantığın yeniden yapılandırma ile daha iyi temsil edilip edilemeyeceğini düşünmem gerekir.

Aşağıda, bu ififadenin bu şeklini nasıl kullandığımı gösteren bazı örnekler verilmiştir .

    string GuardConditions(Plan planForWorldDomination)
    {
        if (planForWorldDomination == null)
            throw new ArgumentNullException("planForWorldDomination");

        if (!planForWorldDomination.IsComplete())
            return "Doh!";

        planForWorldDomination.Execute();
    }

    void ProcessingLogic()
    {
        OneBlankLineAbove();

        if (simpleCondition)
            simpleStatement();

        OneBlankLineBelow();
        OneBlankLineAbove();

        // optional comment on the line above an if statement
        if (simpleCondition)
            simpleStatement();

        OneBlankLineBelow();
    }

    void Assignment(string drive)
    {
        OneBlankLineAbove();

        string prompt;
        if (simpleCondition)
            prompt = "simple assignment";
        else
            prompt = null;

        OneBlankLineBelow();
    }

    string Return()
    {
        OneBlankLineAbove();

        if (simpleCondition)
            return "simple return";
        else
            return null;

        OneBlankLineBelow();
    }

3

Diş teli. Her zaman. Ben onların hayranıyım çünkü kod biraz tutarlılık veriyor. Ayrıca @ dsimcha'nın yazdığı gibi - ek kod satırları eklerken hata yapma şansınız azdır.

Tek satırlık kod etrafındaki parantezlerin "çirkinliği", hata ayıklama ve / veya kod ekleme durumlarında olası olan ek işlerden daha az zararlıdır.


1
Bahsettiğin hatayı yapan hiç kimseyi görmedim.
kirk.burleson 11:10

1
Daha yeni dün, birilerinin kod parçasına yazdım. :-) Sadece yukarı akışın nasıl görüneceğini merak ediyorum, koddaki diğer eklemelerin yanı sıra, iflasının hepsine kaşlı ayraçlar ekliyor çünkü gerçekten benden farklı bir taraftan görünüyor. :-) (sakin ol, şaka yapıyorum, sadece yapmam gerekeni yaptım ...)
Vedran Krivokuća

2

Şahsen ben parantez ile giderim.

Neden?

Eğer birisi gelirse ve if ifadesine kod eklemek gerekirse, kapsamın nerede olduğu% 100 açıktır.

ifBlokta ne kadar ifade olursa olsun ifadelerin biçimini tutarlı tutar .

Bununla birlikte, proje tarzı onsuz gitmek ise, buna bağlı kalın.


1

Neredeyse her zaman dirsekleri sadece güvenli tarafta olmak için kullanırım. Bununla birlikte, bazen bloğun içeriği gerçekten kısa ise, onları bırakıp tek satırlık hale getireceğim:

if (x==5) Console.WriteLine("It's a five!");

Sanırım biri bir kısalık hayranı değil.
JohnFx,

2
Okunabilirlik uğruna kısalık? Kesinlikle hayır. Kod, golf yarışması değil.
Josh K,

3
Okunabilirliğin şahsen kısalık için harika bir neden olduğunu düşünüyorum. Her durumda: Beyaz alan kod golf kural defterime dahil edilmiyor.
JohnFx

Bununla ilgili tek sorun, kötüye kullanmaya borç
vermesidir

2
O zaman kötüye kullanma. Bunu kodlama standardı olarak kullanmıyorum. Gerçekten çok kısa bir şartın ve bunu izleyen çok kısa bir ifadenin olması çoğu zaman olur ve bu iyi sonuç verir. Örneğin, bir if (assert) log.write ("assert başarısız oldu");
JohnFx

1

Parantezleri tutarlılık için tercih ediyorum, ancak çok fazla beyaz alan boşa harcamamayı tercih ediyorum (bu yüzden daha kolay biçimlendirilmiş kodlar sınırlı görüş alanımdaydı). Bu yüzden bunu yeterince kısa satırlar için yazıyorum:

If (cond) { statement; }

İlginç, gerçekten böyle bir kod görmüyorum, ama hoşuma gitti.
Thomas Eding,

0

Genellikle diş telleri kullanırım ama kullanmadığım bazı durumlar var.

object GetObject() {
    // calculate obj1
    if(obj1 != null)
        return obj1;

    // calculate obj2
    if(obj2 != null)
        return obj2;

    // calculate obj3
    if(obj3 != null)
        return obj3;

    return defaultObj;
}

Bana göre, onları oraya eklemek aptalca olurdu. Birisi bundan sonra bir ifade eklerse return, kapsam belirleme sorunlarından daha büyük sorunlarımız var.


Kolayca kullanabilirsinizreturn (obj != null) ? obj : "Error";
Josh K

@Josh, bkz: düzenleme
Kendi kendine not -

Bu durumda gibi bir şey kullanırdım Object returnObj = defaultObj; /* Three else-if's to change it to obj1/2/3 */ return returnObj;.
Josh K,

@Josh, stackoverflow.com/questions/36707/… adresinden okuyun . İlk cevap üzerine ilk yorumda, "Birden fazla çıkış noktasına sahip olmak elinizden çıksa da, tüm işlevinizi bir IF bloğuna koymaktan daha iyi olduğunu düşünüyorum ."
Kendine not -

0

IDE kod formatlaması varsa, parantez kullanmıyorum.

Öte yandan, kodun otomatik biçimlendirmeyi desteklemeyen diğer editörlerde düzenlenebildiği yerlerde, diğer yazılarda belirtildiği gibi parantez koymak tehlikelidir. Ama yine de diş teli kullanmamayı tercih ediyorum ve bu benim için sorun olmadı.

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.