Saya telah melihat kode seperti ini:
if(statement)
do this;
else
do this;
Namun, saya pikir ini lebih mudah dibaca:
if(statement){
do this;
}else{
do this;
}
Karena kedua metode ini bekerja, apakah ini hanya masalah preferensi yang digunakan atau akankah satu cara direkomendasikan daripada yang lain?
if-statement
coding-style
curly-braces
jerebear
sumber
sumber
Jawaban:
Masalah dengan versi pertama adalah bahwa jika Anda kembali dan menambahkan pernyataan kedua ke klausa jika atau yang lain tanpa ingat untuk menambahkan kurung kurawal, kode Anda akan pecah dengan cara yang tak terduga dan lucu.
Dari segi pemeliharaan, selalu lebih pintar menggunakan bentuk kedua.
EDIT: Ned menunjukkan hal ini dalam komentar, tapi saya pikir juga perlu menghubungkannya ke sini. Ini bukan hanya omong kosong hipotetis menara gading: https://www.imperialviolet.org/2014/02/22/applebug.html
sumber
if (…) { goto L; goto L; }
tetapi melupakan kawat gigi. Adalah murni kebetulan bahwa `` jika (...) {goto L; goto L; } `kebetulan bukan bug keamanan, karena bug itu masih bug (hanya saja bukan bug dengan konsekuensi keamanan). Pada contoh lain, berbagai hal bisa berjalan berlawanan arah dan kode tanpa gelang bisa secara tidak sengaja aman. Pada contoh ketiga, kode tanpa gelang akan bebas bug dan pengembang akan memperkenalkan kesalahan ketik sambil menambahkan kawat gigi.Satu masalah dengan meninggalkan blok pernyataan adalah ambiguitas lain. Itu adalah bahasa yang terinspirasi C mengabaikan lekukan dan karenanya tidak memiliki cara untuk memisahkan ini:
Dari ini:
sumber
else
mengikat dengan rakus ke terdekat, terdalamif
. Masalah muncul ketika C atau bahasa yang sama sedang dikodekan oleh orang-orang yang tidak mengetahui hal ini, tidak memikirkannya, atau belum memiliki cukup kopi - jadi mereka menulis kode yang menurut mereka akan melakukan satu hal, tetapi spec bahasa mengatakan parser harus melakukan sesuatu yang lain, yang mungkin sangat berbeda. Dan ya, itu argumen kuat lain yang mendukung selalu memasukkan kawat gigi bahkan jika tata bahasa menandai mereka secara teoritis 'tidak perlu'.Pola umum saya adalah bahwa jika cocok pada satu baris, saya akan melakukan:
Jika ada klausa lain, atau jika kode yang ingin saya jalankan
true
panjangnya signifikan, perkuat semua:Pada akhirnya, masalah ini adalah masalah gaya dan keterbacaan subyektif. Akan tetapi, dunia pemrograman secara umum terbagi menjadi dua pihak (untuk bahasa yang menggunakan kurung kurawal): baik menggunakannya sepanjang waktu tanpa terkecuali, atau menggunakannya sepanjang waktu dengan pengecualian. Saya bagian dari kelompok yang terakhir.
sumber
if(true){ do_something(); }
, mengapa mengambil kesempatan untuk memiliki programmer lain memperkenalkan bug serius di jalan (pencarian Apple "gagal goto" total kode ssl sekrup).Saya menggunakan pemformat kode IDE yang saya gunakan. Itu mungkin berbeda, tetapi bisa diatur di Preferensi / Opsi.
Saya suka yang ini:
sumber
"Aturan" yang saya ikuti adalah ini:
Jika pernyataan "jika" sedang diuji untuk melakukan sesuatu (fungsi panggilan IE, konfigurasikan variabel, dll.), Gunakan kawat gigi.
Ini karena saya merasa Anda perlu memperjelas fungsi apa yang dipanggil dan ke mana aliran program, dalam kondisi apa. Membuat programmer memahami dengan tepat fungsi apa yang dipanggil dan variabel apa yang ditetapkan dalam kondisi ini penting untuk membantu mereka memahami apa yang sedang dilakukan oleh program Anda.
Jika pernyataan "jika" sedang menguji untuk berhenti melakukan sesuatu (kontrol aliran IE dalam satu loop atau fungsi), gunakan satu baris.
Dalam hal ini, yang penting bagi programmer adalah menemukan dengan cepat apa kasus luar biasa di mana Anda tidak ingin kode dijalankan, dan itu semua tercakup dalam $ test, bukan di blok eksekusi.
sumber
Memasang kawat gigi sejak saat pertama akan membantu mencegah Anda dari harus men-debug ini:
sumber
;
:)Gunakan tanda kurung untuk semua pernyataan bahkan pernyataan sederhana. Atau, tulis ulang pernyataan sederhana jika menggunakan operator ternary:
Terlihat jauh lebih baik seperti ini:
Tetapi hanya gunakan operator ternary jika Anda benar-benar yakin tidak ada lagi yang perlu dimasukkan dalam blok if / else!
sumber
Saya lebih suka menggunakan kawat gigi. Menambahkan kawat gigi memudahkan membaca dan memodifikasi.
Berikut ini beberapa tautan untuk penggunaan kawat gigi:
Lebih suka Multiline jika
Menghilangkan Kawat Gigi: Bukan Hanya Masalah Gaya
Stack Overflow
sumber
Dari pengalaman saya satu-satunya (sangat) sedikit keuntungan dari bentuk pertama adalah keterbacaan kode, bentuk kedua menambahkan "noise".
Tetapi dengan IDE modern dan autogenerasi kode (atau pelengkapan otomatis) saya sangat menyarankan untuk menggunakan formulir kedua, Anda tidak akan menghabiskan waktu ekstra mengetik kurung kurawal dan Anda akan menghindari beberapa bug yang paling sering.
Ada cukup banyak bug yang memakan energi, orang tidak perlu membuka pintu untuk buang-buang waktu.
Salah satu aturan paling penting untuk diingat ketika menulis kode adalah konsistensi. Setiap baris kode harus ditulis dengan cara yang sama, tidak peduli siapa yang menulisnya. Menjadi keras mencegah bug dari "terjadi";)
Ini sama dengan penamaan secara jelas & eksplisit variabel Anda, metode, file atau dengan indentasi dengan benar ...
Ketika murid-murid saya menerima fakta ini, mereka berhenti berjuang melawan kode sumber mereka sendiri dan mereka mulai melihat pengkodean sebagai kegiatan yang benar-benar menarik, merangsang dan kreatif. Mereka menantang pikiran mereka, bukan saraf mereka!
sumber
Ini masalah pilihan. Saya pribadi menggunakan kedua gaya, jika saya cukup yakin bahwa saya tidak perlu menambahkan pernyataan lagi, saya menggunakan gaya pertama, tetapi jika itu mungkin, saya menggunakan yang kedua. Karena Anda tidak dapat menambahkan lagi pernyataan ke gaya pertama, saya telah mendengar beberapa orang merekomendasikan untuk tidak menggunakannya. Namun, metode kedua tidak menimbulkan baris kode tambahan dan jika Anda (atau proyek Anda) menggunakan gaya pengkodean semacam ini, metode pertama sangat disukai untuk pernyataan sederhana jika:
Namun, saya pikir solusi terbaik untuk masalah ini adalah dengan Python. Dengan struktur blok berbasis spasi, Anda tidak memiliki dua metode berbeda untuk membuat pernyataan if: Anda hanya punya satu:
Meskipun memiliki "masalah" yang sama sekali tidak dapat Anda gunakan dengan kawat gigi, Anda mendapatkan keuntungan bahwa tidak ada lagi garis yang menjadi gaya pertama dan memiliki kekuatan untuk menambahkan lebih banyak pernyataan.
sumber
Saya selalu mencoba untuk membuat kode standar saya dan terlihat sedekat mungkin. Ini memudahkan orang lain untuk membacanya ketika mereka bertugas memperbaharuinya. Jika Anda melakukan contoh pertama Anda dan menambahkan baris di tengah itu akan gagal.
Tidak akan bekerja:
jika (pernyataan) melakukan ini; dan ini; lain lakukan ini;
sumber
Secara pribadi saya menggunakan gaya pertama hanya membuang pengecualian atau kembali dari metode sebelum waktunya. Seperti pemeriksaan argumen di awal suatu fungsi, karena dalam kasus-kasus ini, saya jarang memiliki lebih dari satu hal untuk dilakukan, dan tidak pernah ada yang lain.
Contoh:
Kalau tidak, saya menggunakan gaya kedua.
sumber
Preferensi pribadi saya menggunakan campuran spasi dan kurung seperti ini:
Saya pikir ini terlihat bersih dan membuat kode saya sangat mudah dibaca dan yang paling penting - debug.
sumber
Saya setuju dengan sebagian besar jawaban dalam kenyataan bahwa lebih baik untuk eksplisit dalam kode Anda dan menggunakan kawat gigi. Secara pribadi saya akan mengadopsi seperangkat standar pengkodean dan memastikan bahwa semua orang di tim tahu mereka dan sesuai. Di mana saya bekerja, kami menggunakan standar pengkodean yang diterbitkan oleh IDesign.net untuk proyek .NET.
sumber
Saya lebih suka memasang kurung kurawal. Tetapi kadang-kadang, operator ternary membantu.
Dari pada :
Satu hanya harus dilakukan:
int x = condition ? 30 : 20;
Juga bayangkan sebuah kasus:
Akan jauh lebih baik jika Anda memasukkan kurung kurawal.
sumber