Drools - ไวยากรณ์ของกฎ

ดังที่คุณเห็นว่า. drl (ไฟล์กฎ) มีไวยากรณ์ของตัวเองให้เราครอบคลุมบางส่วนของไวยากรณ์ของกฎในบทนี้

เงื่อนไขในกฎ

กฎอาจมีเงื่อนไขและรูปแบบมากมายเช่น -

  • บัญชี (ยอดคงเหลือ == 200)
  • ลูกค้า (ชื่อ ==“ วิเวก”)

เงื่อนไขข้างต้นตรวจสอบว่ายอดเงินในบัญชีเท่ากับ 200 หรือชื่อลูกค้าคือ“ Vivek”

ตัวแปรในกฎ

ชื่อตัวแปรใน Drools เริ่มต้นด้วยสัญลักษณ์ Dollar ($)

  • บัญชี $ - บัญชี ()
  • $ account เป็นตัวแปรสำหรับคลาส Account ()

Drools สามารถทำงานกับ Java ทุกประเภทและแม้แต่ Enum

ความคิดเห็นในกฎ

สามารถใช้อักขระพิเศษ # หรือ // เพื่อทำเครื่องหมายความคิดเห็นแบบบรรทัดเดียว

สำหรับความคิดเห็นหลายบรรทัดให้ใช้รูปแบบต่อไปนี้:

/*
   Another line
   .........
   .........
*/

ตัวแปรส่วนกลาง

ตัวแปรส่วนกลางคือตัวแปรที่กำหนดให้กับเซสชัน สามารถใช้ด้วยเหตุผลต่างๆดังนี้ -

  • สำหรับพารามิเตอร์อินพุต (ตัวอย่างเช่นค่าคงที่ที่สามารถปรับแต่งจากเซสชันหนึ่งไปยังเซสชัน)

  • สำหรับพารามิเตอร์เอาต์พุต (ตัวอย่างเช่นการรายงาน - กฎสามารถเขียนข้อความบางส่วนไปยังตัวแปรรายงานส่วนกลาง)

  • จุดเข้าใช้บริการเช่นการบันทึกซึ่งสามารถใช้ได้ภายในกฎ

หน้าที่ในกฎ

ฟังก์ชันเป็นคุณสมบัติอำนวยความสะดวก สามารถใช้ในเงื่อนไขและผลกระทบ ฟังก์ชั่นแสดงถึงทางเลือกของคลาสยูทิลิตี้ / ตัวช่วย ตัวอย่างเช่น,

function double calculateSquare (double value) {
   return value * value;
}

ภาษาถิ่น

ภาษาถิ่นระบุไวยากรณ์ที่ใช้ในนิพจน์รหัสใด ๆ ที่อยู่ในเงื่อนไขหรือเป็นผล ซึ่งรวมถึงค่าที่ส่งคืน, evals, evals แบบอินไลน์, เพรดิเคต, นิพจน์ salience, ผลที่ตามมาและอื่น ๆ ค่าเริ่มต้นคือJava. ปัจจุบัน Drools รองรับอีกหนึ่งภาษาที่เรียกว่าMVEL. ภาษาเริ่มต้นสามารถระบุได้ที่ระดับแพ็คเกจดังนี้ -

package org.mycompany.somePackage
dialect "mvel"

ภาษา MVEL

MVEL เป็นภาษานิพจน์สำหรับแอปพลิเคชันที่ใช้ Java สนับสนุนการเข้าถึงฟิลด์และวิธีการ / getter มันขึ้นอยู่กับไวยากรณ์ของ Java

Salience

Salience เป็นคุณสมบัติที่สำคัญมากของ Rule Syntax กลยุทธ์การแก้ปัญหาความขัดแย้งใช้ Salience ในการตัดสินใจว่าจะเริ่มใช้กฎใดก่อน โดยค่าเริ่มต้นเป็นเกณฑ์หลัก

เราสามารถใช้ความสามารถในการกำหนดลำดับของกฎการยิง Salience มีแอตทริบิวต์เดียวซึ่งรับนิพจน์ใด ๆ ที่ส่งกลับจำนวนประเภท int (จำนวนบวกและค่าลบใช้ได้) ยิ่งค่าสูงเท่าใดกฎก็จะยิ่งมีแนวโน้มที่จะถูกหยิบขึ้นมาใช้โดยกลยุทธ์การแก้ปัญหาความขัดแย้งเพื่อเริ่มทำงาน

salience ($account.balance * 5)

ค่า salience เริ่มต้นคือ 0 เราควรคำนึงถึงสิ่งนี้เมื่อกำหนดค่า salience ให้กับกฎบางข้อเท่านั้น

มีคุณสมบัติ / พารามิเตอร์อื่น ๆ มากมายในไวยากรณ์ของกฎ แต่เราได้กล่าวถึงเฉพาะคุณสมบัติที่สำคัญที่นี่

คำหลักผลที่ตามมาของกฎ

Rule Consequence Keywords คือคำหลักที่ใช้ในส่วน“then” เป็นส่วนหนึ่งของกฎ

  • Modify - คุณสมบัติของข้อเท็จจริงสามารถแก้ไขได้ในไฟล์ then ส่วนหนึ่งของกฎ

  • Insert - ขึ้นอยู่กับเงื่อนไขบางประการหากเป็นจริงเราสามารถแทรกข้อเท็จจริงใหม่ลงในเซสชันปัจจุบันของ Rule Engine ได้

  • Retract - หากเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงในกฎและคุณไม่ต้องการดำเนินการใด ๆ กับข้อเท็จจริงนั้นคุณสามารถถอนคืนความเป็นจริงนั้นได้จาก Rule Engine

Note- ถือเป็นการปฏิบัติที่ไม่ดีอย่างยิ่งที่จะมีตรรกะเงื่อนไข (if statement) ภายในผลลัพธ์ของกฎ ส่วนใหญ่ควรสร้างกฎใหม่