(a OR b) AND c
Logika "a OR b" akan dieksekusi dahulu, kemudian hasilnya akan di-AND dengan variabel c. Jika aturan tersebut kita tuliskan
a OR b AND c
hasilnya akan berlainan, karena tingkat eksekusi AND (precedence) adalah lebih dulu dibanding OR. Aturan tersebut akan dieksekusi seperti
a OR (b AND c)
Dengan prioritas (tangan kurung) kita akan lebih mudah untuk membuat aturan logika, tapi akan sulit jika tanpa prioritas, apalagi aturannya sudah semakin kompleks atau rumit. Tidak mudah untuk mengubah UI sehingga mendukung prioritas, jadi untuk saat ini client harus membuat aturan logika tanpa prioritas. Jadi tantangannya adalah bagaimana membuat sebuah sebuah ekspresi atau aturan logika tanpa tanda kurung yang ekivalen dengan aturan logika aslinya. Atau dalam kata lain bagaimana kita menghilangkan tanda kurung dalam sebuah ekspresi logika?
Sepertinya belum ada software tool untuk keperluan seperti ini. Sebagai bahan acuan, hukum logika berikut ini (ingat kembali pelajaran SMP) kadang membantu, tapi tidak dijamin..
- Hukum Komutatif
a AND b <=> b AND a,
A OR B <=> B OR A - Hukum Asosiatif
(a AND b) AND c <=> a AND (b AND c),
(a OR b) OR c <=> a OR (b OR c) - Teorema DeMorgan's
NOT (a OR b) <=> NOT A AND NOT B,
NOT (a AND b) <=> NOT a OR NOT b - Hukum distributif
a OR (b AND c) <=> (a AND b) OR (a AND c),
a AND (b OR c) <=> (a OR b) AND (a OR c)
Java Expression Parser (JEP) cukup bagus untuk melakukan parsing pada ekpresi logika boolean. JEP inilah yang saya gunakan sebagai mekanik untuk mengeksekusi ekspresi logika. JEP mendukung prioritas eksekusi dengan tanga kurung, jadi masalah tanda kurung pada masalah saya adalah bagaimana UI dapat dengan mudah membuatnya, artinya perombakan UI. Ini yang saya sesalkan...
1 comment:
Post a Comment