Wednesday, April 20, 2005

Ekspresi logika

Baru saja saya dapat masalah gara-gara desain user interface (UI) yang kurang fleksibel. Masalahnya bermula dari kebutuhan client akan pembuatan aturan logika untuk keperluan strategi bisnisnya. Aturan tersebut dibentuk dari variabel-varibel yang sudah ditentukan (ada) dan mudah untuk diubah-ubah. Sistem harus membaca aturan logika yang dibuat dan mengeksekusinya. Masalah timbul karena desain UI yang dibuat tidak dapat membuat prioritas pada deretan aturan logic. Contoh yang dimaksud adalah seperti ini:

(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..


  1. Hukum Komutatif
    a AND b <=> b AND a,
    A OR B <=> B OR A
  2. Hukum Asosiatif
    (a AND b) AND c <=> a AND (b AND c),
    (a OR b) OR c <=> a OR (b OR c)
  3. Teorema DeMorgan's
    NOT (a OR b) <=> NOT A AND NOT B,
    NOT (a AND b) <=> NOT a OR NOT b
  4. 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:

Anonymous said...
This comment has been removed by a blog administrator.

Followers