Pertimbangkan sedikit kode ini:
if (x == 1)
{
throw "no good; aborting" ;
}
[... more code ...]
Sekarang pertimbangkan kode ini:
if (x == 1)
{
throw "no good; aborting" ;
}
else
{
[... more code ...]
}
Kedua kasing bekerja dengan cara yang persis sama. Kasing pertama memiliki keuntungan bahwa Anda tidak perlu "membungkus" sisa kode dalam sebuah else
. Yang kedua memiliki keuntungan mengikuti praktik memiliki secara eksplisit memiliki else
untuk setiap if
.
Adakah yang bisa memberikan argumen yang solid yang mendukung salah satu dari yang lain?
coding-style
exceptions
rlandster
sumber
sumber
else
tampaknya palsu. Cukup sering, tidak ada yang bisa dimasukkan ke dalamelse
blok kecuali Anda membungkuk ke belakang.if
kebutuhanelse
. Pemrogram terakhir yang bekerja pada basis kode kami mengikuti dengan kaku ( well, kadang-kadang ... itu semacam skizofrenia ). Akibatnya, kami memiliki banyakelse { /* do nothing */ }
blok yang sama sekali tidak berarti yang mengotori kode ...Jawaban:
Anda tidak harus menambahkan
else
setelahif
cabang yang memutus aliran kontrol tanpa syarat , seperti yang mengandung athrow
atau areturn
. Ini akan meningkatkan keterbacaan program Anda dengan menghapus tingkat sarang yang tidak perlu yang diperkenalkan olehelse
cabang.Apa yang terlihat kurang lebih baik dengan satu
throw
menjadi benar-benar jelek ketika beberapa lemparan berturut-turut dilanggar:Cuplikan ini melakukan hal yang sama, tetapi terlihat jauh lebih baik:
sumber
else if
.if
tes untuk satu kondisi dan mengatasinya jika kondisinya benar, dan kecuali ada beberapa hal alternatif yang harus terjadi jika kondisinya salah,else if
s tidak perlu. Kami memiliki istilah di kantor saya untuk kode seperti cuplikan pertama dasblinkenlight: " mesin pachinko ."else
.Saya akan menyebut praktik "eksplisit lain" yang Anda sebut sebagai anti-pola, karena mengaburkan fakta bahwa tidak ada kode kasus khusus sebagai lain untuk if Anda.
Keterbacaan / pemeliharaan umumnya ditingkatkan ketika Anda sebagian besar tidak memiliki apa pun kecuali konstruksi aliran kode yang diperlukan, dan Anda menguranginya. Ini berarti redundant elses dan if's yang akan menambah ruang lingkup ke seluruh fungsi membuat mengikuti dan mempertahankannya lebih sulit.
Katakan misalnya Anda memiliki fungsi ini:
Sekarang persyaratan datang bahwa selama konfigurasi Anda juga harus menentukan tipe / tipe indeks oblogon, ada beberapa lingkup di mana seseorang dapat menempatkan kode itu dan berakhir dengan kode yang tidak valid yaitu
Bandingkan ini dengan jika kode asli ditulis dengan konstruksi aliran kontrol minimal yang diperlukan dan diminimalkan pada saat itu.
Sekarang akan jauh lebih sulit untuk secara tidak sengaja menempatkan sesuatu dalam ruang lingkup yang salah atau berakhir pada kembung yang menyebabkan duplikasi dalam pertumbuhan jangka panjang dan pemeliharaan fungsi ini. Plus jelas apa yang mungkin mengalir melalui fungsi ini sehingga keterbacaan ditingkatkan.
Saya tahu, contohnya sedikit dibuat-buat, tapi saya sudah berkali-kali melihatnya
Jadi memformalkan aturan-aturan tentang konstruksi aliran kontrol saya pikir dapat membantu orang mengembangkan intuisi yang diperlukan untuk mencium sesuatu ketika mereka mulai menulis kode seperti itu. Kemudian mereka akan mulai menulis ..
sumber