Ini adalah contoh yang sangat sederhana . Ini belum tentu merupakan pertanyaan khusus bahasa, dan saya meminta Anda mengabaikan banyak cara lain fungsi dapat ditulis, dan perubahan yang dapat dilakukan untuk itu. . Warna adalah jenis yang unik
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
Banyak orang yang saya temui, ReSharper, dan orang ini (yang komentarnya mengingatkan saya bahwa saya sudah lama ingin menanyakan hal ini) akan merekomendasikan refactoring kode untuk menghapus else
blok meninggalkan ini:
(Saya tidak ingat apa yang dikatakan mayoritas, saya mungkin tidak menanyakan hal ini jika tidak)
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
Pertanyaan: Apakah ada peningkatan kompleksitas yang dimasukkan dengan tidak menyertakan else
blok?
Saya mendapat kesan yang else
lebih langsung menyatakan maksud, dengan menyatakan fakta bahwa kode di kedua blok terkait langsung.
Selain itu saya menemukan bahwa saya dapat mencegah kesalahan halus dalam logika, terutama setelah modifikasi kode di kemudian hari.
Ambil variasi contoh sederhana saya ini (Mengabaikan fakta or
operator karena ini adalah contoh yang sengaja disederhanakan):
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
Seseorang sekarang dapat menambahkan if
blok baru berdasarkan kondisi setelah contoh pertama tanpa segera mengenali dengan benar kondisi pertama menempatkan kendala pada kondisi mereka sendiri.
Jika ada else
blok, siapa pun yang menambahkan kondisi baru akan dipaksa untuk memindahkan isi else
blok (dan jika entah bagaimana mereka mengabaikannya heuristik akan menunjukkan kode tidak dapat dijangkau, yang tidak dalam kasus salah satu if
membatasi) .
Tentu saja ada cara lain contoh spesifik harus didefinisikan, yang semuanya mencegah situasi itu, tetapi itu hanya contoh.
Panjang contoh yang saya berikan dapat memiringkan aspek visual dari ini, jadi anggaplah bahwa ruang yang digunakan untuk kurung relatif tidak signifikan terhadap sisa metode.
Saya lupa menyebutkan kasus di mana saya setuju dengan penghilangan blok lain, dan ketika menggunakan if
blok untuk menerapkan kendala yang harus dipenuhi secara logis untuk semua kode berikut, seperti cek kosong (atau pengawal lainnya) .
else
klausa (sesuai selera saya, akan lebih mudah dibaca ketika meninggalkan tanda kurung yang tidak perlu. Tapi saya pikir contohnya tidak dipilih dengan baik, karena dalam kasus di atas saya akan menulis return sky.Color == Color.Blue
(tanpa if / else). Contoh dengan tipe pengembalian yang berbeda dari bool mungkin akan membuat ini lebih jelas