12 poin oleh ohyecloudy 2023-12-17 | 3 komentar | Bagikan ke WhatsApp
  • Nilai kembalian fungsi Enum.all? untuk list kosong adalah true
    • Fungsi all di Haskell, all di Python, dan every? di Clojure juga bekerja dengan cara yang sama
  • Mengembalikan true untuk list kosong memudahkan implementasi
    • true && f(elem1) && f(elem2) ...
    • Tetapi bukan berarti fungsi itu diimplementasikan seperti itu hanya demi kemudahan implementasi
    • Perilaku ini diimplementasikan agar sesuai dengan definisi kebenaran hampa (vacuous truth) dalam logika
  • Untuk memahami kebenaran hampa, kita perlu melihat implikasi material
    • Jika p salah, maka p → q selalu benar
    • “Jika Patung Liberty berada di Seoul, maka Menara Eiffel berada di Pohang” adalah benar
      • Karena p, yaitu “Patung Liberty berada di Seoul”, adalah salah
    • Dalam implikasi material seperti ini, ketika p salah sehingga pernyataan menjadi benar tanpa syarat, itulah yang disebut kebenaran hampa
  • Dalam kebenaran hampa, untuk himpunan (set) kosong, pernyataan apa pun menjadi benar
    • Ambil contoh 'semua ponsel di dalam ruangan sedang dimatikan'
    • x adalah semua benda yang ada di ruangan
    • P(x) adalah 'x adalah ponsel'
    • Q(x) adalah 'x sedang dimatikan'
    • Karena x kosong, maka P(x) salah. Berdasarkan kebenaran hampa, pernyataan itu selalu benar.
  • Karena itu, nilai kembalian fungsi Enum.all? untuk list kosong menjadi true.

3 komentar

 
tapu1125 2023-12-18

Jadi paham sekarang hehe, terima kasih sudah berbagi.
Pendekatan matematis dan ilmu komputer memang seperti ini, tapi saat ngoding rasanya tetap membingungkan jadi sepertinya lebih baik tidak terlalu dipakai wkwk.
Terutama di if, list kosong dianggap False jadi sering bikin bingung.

Kalau di Python, hasilnya seperti di bawah ini.
all([]) == True
all([[]]) == False

 
p0rygon 2023-12-18

Karena itu, saya cenderung lebih memilih menuliskan kondisi secara eksplisit demi orang yang akan membaca kode.
Daripada if not arr:, misalnya seperti if len(arr) == 0:.
Contoh lain, alih-alih if not flag:, mungkin if flag is False:.

Menurut standar saya, all([[]]) juga akan lebih mudah dibaca jika ditulis ulang menjadi all([kondisi for ... in []]).

 
ohyecloudy 2023-12-18

Ah~ jadi di Python, karena list kosong termasuk nilai falsy, nilai balik all([[]]) menjadi False. Karena nilai truthy dan falsy berbeda di tiap bahasa, saya kadang tetap melakukan kesalahan saat memakai bahasa lain. :)

Sebagai referensi, di Elixir hanya nil atau false yang termasuk nilai falsy, jadi nilai Enum.all?([[]]) adalah true.