Groovy - คำอธิบายประกอบ
คำอธิบายประกอบเป็นรูปแบบของข้อมูลเมตาโดยให้ข้อมูลเกี่ยวกับโปรแกรมที่ไม่ได้เป็นส่วนหนึ่งของโปรแกรม คำอธิบายประกอบไม่มีผลโดยตรงต่อการทำงานของรหัสที่ใส่คำอธิบายประกอบ
คำอธิบายประกอบส่วนใหญ่จะใช้ด้วยเหตุผลดังต่อไปนี้ -
Information for the compiler - คอมไพเลอร์สามารถใช้คำอธิบายประกอบเพื่อตรวจหาข้อผิดพลาดหรือระงับคำเตือน
Compile-time and deployment-time processing - เครื่องมือซอฟต์แวร์สามารถประมวลผลข้อมูลคำอธิบายประกอบเพื่อสร้างโค้ดไฟล์ XML และอื่น ๆ
Runtime processing - คำอธิบายประกอบบางส่วนสามารถตรวจสอบได้ที่รันไทม์
ใน Groovy คำอธิบายประกอบพื้นฐานมีลักษณะดังนี้ -
@interface - อักขระเครื่องหมาย at (@) บ่งชี้ให้คอมไพเลอร์ทราบว่าสิ่งที่ตามมาคือคำอธิบายประกอบ
คำอธิบายประกอบอาจกำหนดสมาชิกใน the form ของวิธีการที่ไม่มีร่างกายและค่าเริ่มต้นที่เป็นทางเลือก
คำอธิบายประกอบสามารถใช้ได้กับประเภทต่อไปนี้ -
ประเภทสตริง
ตัวอย่างของคำอธิบายประกอบสำหรับสตริงมีให้ด้านล่าง -
@interface Simple {
String str1() default "HelloWorld";
}
ประเภท Enum
enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun }
@interface Scheduled {
DayOfWeek dayOfWeek()
}
ประเภทชั้นเรียน
@interface Simple {}
@Simple
class User {
String username
int age
}
def user = new User(username: "Joe",age:1);
println(user.age);
println(user.username);
คำอธิบายประกอบค่าสมาชิก
เมื่อใช้คำอธิบายประกอบจำเป็นต้องตั้งค่าสมาชิกอย่างน้อยทั้งหมดที่ไม่มีค่าเริ่มต้น ตัวอย่างได้รับด้านล่าง เมื่อใช้ตัวอย่างคำอธิบายประกอบหลังจากกำหนดแล้วจำเป็นต้องมีค่าที่กำหนดให้
@interface Example {
int status()
}
@Example(status = 1)
พารามิเตอร์คำอธิบายประกอบการปิด
คุณลักษณะที่ดีของคำอธิบายประกอบใน Groovy คือคุณสามารถใช้การปิดเป็นค่าคำอธิบายประกอบได้เช่นกัน ดังนั้นคำอธิบายประกอบจึงสามารถใช้ได้กับนิพจน์ที่หลากหลาย
ตัวอย่างได้รับด้านล่างนี้ คำอธิบายประกอบ Onlyif ถูกสร้างขึ้นตามค่าคลาส จากนั้นคำอธิบายประกอบจะถูกนำไปใช้กับสองวิธีที่โพสต์ข้อความที่แตกต่างกันไปยังตัวแปรผลลัพธ์ตามค่าของตัวแปรตัวเลข
@interface OnlyIf {
Class value()
}
@OnlyIf({ number<=6 })
void Version6() {
result << 'Number greater than 6'
}
@OnlyIf({ number>=6 })
void Version7() {
result << 'Number greater than 6'
}
คำอธิบายประกอบเมตา
นี่เป็นคุณสมบัติที่มีประโยชน์มากสำหรับคำอธิบายประกอบในแบบ groovy อาจมีบางครั้งที่คุณอาจมีคำอธิบายประกอบหลายรายการสำหรับวิธีการดังที่แสดงด้านล่าง บางครั้งสิ่งนี้อาจทำให้มีคำอธิบายประกอบหลาย ๆ อันยุ่งเหยิง
@Procedure
@Master class
MyMasterProcedure {}
ในกรณีนี้คุณสามารถกำหนด meta-annotation ซึ่งรวมคำอธิบายประกอบหลาย ๆ รายการเข้าด้วยกันและใช้ meta annotation กับวิธี ดังนั้นสำหรับตัวอย่างข้างต้นคุณสามารถกำหนดคอลเลกชันของคำอธิบายประกอบโดยใช้ AnnotationCollector
import groovy.transform.AnnotationCollector
@Procedure
@Master
@AnnotationCollector
เมื่อเสร็จแล้วคุณสามารถใช้ meta-annotator ต่อไปนี้กับวิธีการ -
import groovy.transform.AnnotationCollector
@Procedure
@Master
@AnnotationCollector
@MasterProcedure
class MyMasterProcedure {}