Sama sekali tidak jahat. Sebenarnya, itu murni , dan jika-maka-tidak.
Dalam bahasa fungsional seperti Haskell, F #, ML dll., Pernyataan if-then-else yang dianggap jahat.
Alasan untuk ini adalah bahwa "tindakan" apa pun seperti pernyataan imperatif if-then-else mengharuskan Anda untuk memisahkan deklarasi variabel dari definisinya, dan memperkenalkan status ke fungsi Anda.
Misalnya, dalam kode berikut:
const var x = n % 3 == 1
? Parity.Even
: Parity.Odd;
vs.
Parity x;
if (n % 3 == 1)
x = Parity.Even;
else
x = Parity.Odd;
Yang pertama memiliki dua keunggulan selain lebih pendek:
x
adalah konstan, dan karenanya menawarkan lebih sedikit kesempatan untuk memperkenalkan bug, dan berpotensi dapat dioptimalkan dengan cara yang kedua tidak pernah bisa.
- Tipe ini dibuat jelas oleh ekspresi, sehingga kompiler dapat dengan mudah menyimpulkan yang
x
perlu tipe Parity
.
Yang membingungkan, dalam bahasa fungsional, operator ternary sering disebut if-then-else. Di Haskell, Anda mungkin berkata x = if n mod 3 == 1 then Odd else Even
.