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) ภายในผลลัพธ์ของกฎ ส่วนใหญ่ควรสร้างกฎใหม่