ไปงาน Kotlin meetup 1.2 มา
มีทั้งเรื่องของ Kotlin reflection และ PWA with Kotlin
ซึ่งเป็นเรื่องที่ไม่เคยใช้งานเลย
ดังนั้นจึงลองศึกษาเรื่องของ Reflection ก่อนว่ามันใช้งานอน่างไรบ้าง
มาเริ่มกันเลย
Reflection ช่วยให้เราเข้าถึงส่วนต่าง ๆ ของ code ในช่วง runtime ได้
โดยที่ไม่ต้องรู้รายละเอียดต่าง ๆ จากการ compile เลย
ยกตัวอย่างเช่น
- การสร้าง instance ของ class
- การเข้าถึง function หรือดูชื่อ function ของ class
- สามารถเรียกใช้งาน function ได้
- ดูว่ามี field อะไร ชื่ออะไร ค่าอะไร
- ดู parameter ต่าง ๆ
- เข้าถึงพวก Generic และ Annotation ได้อีก
สามารถนำ Reflection มาใช้ประโยชน์ได้เช่น
กรณีที่เราต้องการจัดการข้อมูลในฐานข้อมูล
แน่นอนว่าต้องมี Entity class/type แน่นอน
และในระบบจะมี Entity มากมายหลายชนิด
ถ้าเราต้องการให้ทำการ generate SQL จาก Entity class เหล่านี้
สามารถนำ Reflection มาใช้ได้
เพื่อทำการดึงชื่อและชนิดของ field/property จาก Entity class ออกมาในขณะ Runtime
ทำให้ชีวิตของนักพัฒนาง่ายขึ้น
หรือในระบบแบบ plugin
เมื่อทำการเพิ่ม plugin เขามาใหม่
ต้องทำการสร้าง instance ใหม่ในขณะ runtime
เราสามารถใช้ Reflection สร้าง instance ใหม่ขึ้นมาได้
โดยรวมจะทำงานกับ
- Class
- Function
- Property
- การทำงานร่วมกับ Java
- Constructor
มาลองใช้งานกันหน่อย
เริ่มจากตัวอย่างง่าย ๆ ดีกว่า เพราะว่าผมก็มือใหม่
อยากลองทำระบบ plug-in
โดยทำการกำหนด class ของ plug-in ไว้ในไฟล์
จากนั้นทำการสร้าง instance ของ plugin แต่ละตัว
โดยเราจะใช้ความสามารถของ Reflection นั่นเอง
มาเริ่มกันเลย
ขั้นตอนที่ 1 ทำการกำหนดโครงสร้างของ plug-in
รวมทั้งสร้าง plugin แต่ละตัวขึ้นมา
ตัวอย่าง code นั้น plug-in แต่ละตัวจะมีโครงสร้างดังนี้
ขั้นตอนที่ 2 ทำการสร้างไฟล์ property สำหรับกำหนดค่าของ plug-in ที่ต้องการ
ขั้นตอนที่ 3 เขียน code สำหรับสร้าง instance ของ plug-in แต่ละตัวด้วย Reflection
เพียงเท่านี้เราก็สามารถสร้างระบบ plug-in อย่างง่ายได้แล้ว
หรืออีกตัวอย่างคือ การเขียน log ของ data class
สามารถนำ reflection เข้ามาช่วยได้อีก ดังนี้
แต่ reflection นั้นมันจะส่งผลให้ performance การทำงานแย่ลง
ดังนั้นการใช้งานต้องมาดูข้อดีและข้อเสียด้วยนะครับ
ขอให้สนุกกับการเขียน code