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 {}