ไปงาน 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

Tags: