Let & Where
Penjelasan
`let...in` dan `where` sama-sama dipakai untuk mendefinisikan binding sementara (nilai perantara) di dalam sebuah fungsi, supaya ekspresi yang kompleks bisa dipecah jadi bagian-bagian yang lebih mudah dibaca. `let` mendefinisikan binding SEBELUM dipakai (`let x = ... in ekspresi`), sedangkan `where` mendefinisikan SETELAH ekspresi utama, tapi berlaku untuk keseluruhan fungsi (termasuk semua guards).
Contoh Konsep
-- let...in
luasLingkaran :: Double -> Double
luasLingkaran r = let phi = 3.14159 in phi * r * r
-- where, berlaku untuk semua guard di bawahnya
klasifikasiBMI :: Double -> Double -> String
klasifikasiBMI berat tinggi
| bmi < 18.5 = "Kurus"
| bmi < 25.0 = "Normal"
| otherwise = "Gemuk"
where
bmi = berat / (tinggi * tinggi)
Praktikum
Buat fungsi hitungTotal :: Double -> Double -> Double (harga, pajakPersen) yang memakai where untuk mendefinisikan binding pajak = harga * pajakPersen / 100, lalu mengembalikan harga + pajak.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Pakai `where` kalau binding itu dipakai di SEMUA guard sebuah fungsi (didefinisikan sekali, berlaku untuk semuanya), dan `let...in` kalau binding hanya dibutuhkan di SATU ekspresi tertentu saja.