Apa yang disukai gaya untuk satu keputusan dan tindakan pernyataan?

Dalam kasus bahasa yang mendukung satu keputusan dan tindakan tanpa tanda kurung, seperti contoh berikut:

if (var == true)
    doSomething();

Apa cara yang lebih disukai dari tulisan ini? Harus kurung selalu digunakan, atau penggunaan mereka sebagai preferensi individu pengembang? Selain itu, apakah praktek ini tergantung pada ukuran blok kode, seperti dalam contoh berikut:

if (var == 1)
    doSomething(1);
else if (var > 1 && var < 10)
    doSomething(2);
else
{
    validate(var);
    doSomething(var);
}
Larutan

Ada isn't benar-benar jawaban yang benar. Ini adalah apa yang coding standar dalam perusahaan adalah untuk. Jika anda dapat tetap konsisten di seluruh perusahaan maka akan mudah untuk dibaca. Saya pribadi suka

if ( a == b)    {
    doSomething();
}
else {
    doSomething();
}

tapi ini adalah perang suci.

Komentar (0)

Saya sarankan

if(a==b)
{
    doSomething();
}

karena saya menemukan ini jauh lebih mudah untuk melakukannya up-depan daripada mencoba untuk ingat untuk menambahkan kawat gigi ketika saya menambahkan pernyataan kedua untuk keberhasilan kondisi...

if(a==b)
    doSomething();
    doSomethingElse();

sangat berbeda dengan

if(a==b)
{
    doSomething();
    doSomethingElse();
}

lihat Joel's artikel untuk keterangan lebih lanjut

Komentar (1)

Saya cenderung untuk menggunakan kawat gigi di semua kali. Anda bisa mendapatkan beberapa halus bug di mana anda mulai dengan sesuatu seperti:

if(something)
 DoOneThing();
else
  DoItDifferently();

dan kemudian memutuskan untuk menambahkan operasi lain ke lain klausul dan lupa untuk membungkusnya dalam kawat gigi:

if(something)
 DoOneThing();
else
  DoItDifferently();
  AlwaysGetsCalled(); 

AlwaysGetsCalled() akan selalu mendapatkan yang bernama, dan jika anda're duduk di sana di 3am bertanya-tanya mengapa anda kode berperilaku semua aneh, sesuatu seperti itu bisa menghindari anda untuk beberapa waktu. Untuk alasan ini saja, saya selalu menggunakan kawat gigi.

Komentar (0)

Preferensi saya adalah untuk menjadi konsisten, misalnya, jika anda menggunakan tanda kurung pada satu blok, menggunakan tanda kurung semua bahkan hanya dengan satu pernyataan:

if (cond1)
{
   SomeOperation();
   Another();
}
elseif (cond2)
{
   DoSomething();
}
else
{
   DoNothing();
   DoAnother();
}

Tapi jika anda hanya memiliki sekelompok salah satu liners:

if (cond1)
    DoFirst();
elseif (cond2)
    DoSecond();
else
    DoElse();

Terlihat bersih (jika anda don't pikiran dummy nama metode ;) itu, tapi yang's just me.

Hal ini juga berlaku untuk loop konstruksi dan sejenisnya:

foreach (var s as Something)
    if (s == someCondition)
        yield return SomeMethod(s);

Anda juga harus mempertimbangkan bahwa ini adalah konvensi yang mungkin lebih cocok untuk .NET (perhatikan bahwa Jawa peepz ingin memiliki mereka pertama kurung kurawal pada baris yang sama seperti jika).

Komentar (0)

Kapur ini salah satu kurangnya pengalaman, tetapi selama tujuh tahun bertugas sebagai kode monyet I've tidak pernah benar-benar melihat orang membuat kesalahan dengan tidak menambahkan kawat gigi saat menambahkan kode untuk blok yang doesn't memiliki kawat gigi. Yang's tepat nol kali.

Dan sebelum wisecrackers mendapatkan untuk itu, tidak ada alasan tidak't "semua orang selalu menggunakan kawat gigi".

Jadi, pertanyaan jujur-aku benar-benar ingin mendapatkan yang sebenarnya balasan bukan hanya downvotes: apakah itu pernah benar-benar terjadi?

(Edit: I'telah mendengar cukup outsourcing-cerita horor untuk memperjelas sedikit: apakah itu pernah benar-benar terjadi kompeten programmer?)

Komentar (1)

Saya personnally sisi dengan McConnell's penjelasan dari Kode yang Lengkap.

Menggunakannya setiap kali anda bisa. Mereka meningkatkan kode's mudah dibaca dan menghapus beberapa dan langka kebingungan yang mungkin terjadi.

Ada satu hal yang's lebih penting meskipun....Konsistensi. Yang pernah gaya yang anda gunakan,pastikan anda selalu melakukannya dengan cara yang sama.

Mulai menulis hal-hal seperti:


Jika A == true
FunctA();

Jika B == "Test" { FunctB(); }

Anda terikat untuk akhirnya mencari bug aneh di mana kompilator tidak't memahami apa yang anda coba lakukan dan itu akan menjadi sulit untuk menemukan.

Pada dasarnya menemukan satu yang anda merasa nyaman setiap kali menulis dan menempel untuk itu. Saya percaya dalam menggunakan blok delimeters('{', '}') sebisa mungkin adalah cara untuk pergi.

Saya don't ingin memulai pertanyaan di dalam yang lain, tapi ada sesuatu yang berkaitan dengan hal yang ingin saya sampaikan untuk mendapatkan mental anda jus yang terjadi. Salah satu keputusan menggunakan tanda kurung yang telah dibuat. Di mana anda menempatkan pembukaan braket? Pada baris yang sama sebagai pernyataan atau di bawahnya. Menjorok kurung atau tidak?


Jika A == false {
//memanggil dan yang lainnya
}
//atau
Jika B == "BlaBla"
{
//memanggil dan yang lainnya
}
//atau
Jika C == B
{
//memanggil dan yang lainnya
}

Silakan don't jawaban untuk ini karena ini akan menjadi sebuah pertanyaan baru. Jika aku melihat bunga ini, aku akan membuka pertanyaan baru yang anda input.

Komentar (0)

Itu doesn't benar-benar peduli, asalkan anda're konsisten dengan itu.

Ada tampaknya menjadi kecenderungan untuk menuntut kesamaan dalam satu pernyataan, yaitu jika ada's kurung di salah satu cabang, ada's kurung di mana-mana. Kernel Linux standar coding, untuk satu, mandat itu.

Komentar (0)

Saya akan sangat menganjurkan selalu menggunakan kawat gigi, bahkan ketika mereka're opsional. Mengapa? Mengambil potongan ini dari C++ code:

if (var == 1)
  doSomething();
doSomethingElse();

Sekarang, seseorang datang yang isn't benar-benar membayar perhatian yang cukup dan memutuskan bahwa sesuatu harus terjadi if (var == 1), sehingga mereka melakukan hal ini:

if (var == 1)
  doSomething();
  doSomethingExtra();
doSomethingElse();

It's semua masih indah menjorok tapi itu tidak't melakukan apa yang dimaksudkan.

Dengan selalu menggunakan kawat gigi, anda're lebih mungkin untuk menghindari hal ini semacam bug.

Komentar (0)

Ruby baik menyingkirkan salah satu masalah dalam diskusi. Standar untuk satu kapal adalah:

do_something if (a == b)

dan untuk multi-line:

if (a == b)
  do_something
  do_something_else
end

Hal ini memungkinkan ringkas satu baris pernyataan, tetapi memaksa anda untuk menata kembali pernyataan jika anda pergi dari satu - untuk multi-line.

Hal ini tidak (belum) tersedia di pulau Jawa, maupun dalam banyak bahasa lainnya, AFAIK.

Komentar (0)

Sun's Kode Konvensi untuk Bahasa pemrograman Java memiliki ini untuk mengatakan:

if-else kelas laporan harus memiliki bentuk berikut:

if (kondisi) { pernyataan; }

if (kondisi) { pernyataan; } else { pernyataan; }

if (kondisi) { pernyataan; } else if (kondisi) { pernyataan; } else { pernyataan; }

Komentar (0)

Tidak ada cara yang benar atau salah untuk menulis pernyataan di atas. Ada banyak diterima coding gaya. Namun, bagi saya, saya lebih suka menjaga coding style terdiri di seluruh proyek. ie. Jika proyek ini menggunakan K&R gaya, anda harus menggunakan K&R.

Komentar (0)

I've selalu digunakan kurung di semua kali kecuali untuk kasus di mana saya'm memeriksa variabel NULL sebelum membebaskan, seperti yang diperlukan dalam C

Dalam hal ini, saya pastikan itu's jelas bahwa itu's pernyataan tunggal dengan menjaga segala sesuatu pada satu baris, seperti ini:

if (aString) free(aString);
Komentar (0)

Seperti orang lain telah disebutkan, lakukan jika pernyataan dalam dua baris tanpa kawat gigi dapat menyebabkan kebingungan:


if (a == b)
    DoSomething();
    DoSomethingElse(); 
Komentar (0)

Aturan emas adalah bahwa, ketika bekerja pada proyek yang sudah ada, mengikuti standar coding.

Ketika saya'm di rumah, saya memiliki dua bentuk.

Yang pertama adalah satu baris:

if (condition) doThis();

dan yang kedua adalah untuk beberapa baris:

if (condition) {
   doThis();
}
Komentar (0)

Bos kami membuat kami menempatkan { } setelah keputusan pernyataan tidak peduli apa, bahkan jika itu's pernyataan tunggal. It's benar-benar menjengkelkan untuk menambahkan dua baris tambahan. Satu-satunya pengecualian adalah ternary operator.

Saya kira itu's hal yang baik saya memiliki kode monitor dalam orientasi potret di 1200x1600.

Komentar (0)

Saya cenderung setuju dengan Joel Spolsky pada yang satu dengan yang artikel (Membuat Kode yang Salah Lihat Salah) dengan contoh kode berikut :

if (i != 0)
bar(i);
foo(i);

Foo sekarang unconditionnal. Yang benar-benar buruk!

Saya selalu menggunakan tanda kurung untuk pengambilan pernyataan. Hal ini membantu kode rawatan dan itu membuat kode lebih sedikit bug rawan.

Komentar (0)

Saya lebih suka

if (cond)
   {
   //statement
   }

bahkan dengan hanya satu pernyataan. Jika anda akan menulis sesuatu sekali, tidak ada keraguan bahwa hal itu bekerja, dan tidak pernah direncanakan pada yang lain coder pernah melihat kode itu, pergi ke depan dan menggunakan format apapun yang anda inginkan. Tapi, apa yang ekstra bracketing benar-benar biaya anda? Kurang waktu dalam tahun dari yang dibutuhkan untuk mengetik posting ini.

Ya, saya ingin indent saya kurung untuk tingkat blok, juga.

Python adalah bagus dalam lekukan mendefinisikan blok. Pertanyaan yang diperdebatkan dalam bahasa seperti itu.

Komentar (0)

Aku digunakan untuk mengikuti "menggunakan kurung kurawal selalu" line seperti apparatchik. Namun, saya've dimodifikasi gaya saya untuk memungkinkan untuk menghilangkan mereka pada satu garis ekspresi kondisional:

if(!ok)return;

Untuk setiap multistatement skenario meskipun aku'm masih berpendapat bahwa kawat gigi harus wajib:

if(!ok){

    do();

    that();

    thing();
}
Komentar (1)

Saya menggunakan kurung kurawal sekitar setiap pernyataan jika dan hanya jika setidaknya salah satu dari mereka membutuhkan itu.

Komentar (0)

Di Perl jika anda melakukan tes sederhana, kadang-kadang anda akan menulis itu dalam bentuk ini:

do_something if condition;

do_something unless condition;

Yang dapat benar-benar berguna untuk memeriksa argumen di mulai dari sebuah subroutine.

sub test{
  my($self,@args) = @_;

  return undef unless defined $self;

  # rest of code goes here

}
Komentar (0)