Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Kotlin :: งง ๆ กับ keyword class และ object

$
0
0

เขียน code ด้วยภาษา Kotlin ไปเรื่อย ๆ ก็มักจะเจอ keyword class และ object อยู่ตลอด บางครั้งก็ใช้ class keyword บางครั้งก็ใช้ object keyword มาดูกันหน่อยสิ

เมื่อไปดูในเอกสารจาก Kotlin พบว่า

Object นั้นมีทุกอย่างคล้ายกับ class มาก ๆ แต่ว่าจะมีเพียง instance เดียวเท่านั้นที่ถูกสร้างขึ้นมาเมื่อถูกเรียกใช้ครั้งแรก (Lazy instantiation) ถ้า object นี้ไม่ถูกเรียกใช้งาน จะไม่ทำการสร้าง instance ขึ้นมา และเป็น thread-safe โดย default อยู่แล้ว มันคือ Singleton pattern นั่นเอง เทียบกับภาษา Java ได้ดังนี้ [gist id="6d19313d231ca190c58e189f5169319e" file="MySingleton.java"] เมื่อแปลงมาเป็นภาษา Kotlin เขียนแค่นี้พอไม่ต้องเยอะ [kotlin] object MySingleton { fun hello() { print("Hello from object") } } fun main(args: Array) { MySingleton.hello(); } [/kotlin]

ยังไม่พอนะ เมื่อใช้ไปเรื่อย ๆ ก็จะเจอ Companion object อีก

ซึ่งจะถูกประกาศหรือใช้ภายใน class ด้วย keyword companion มันก็คือ การประกาศ static field/method ใน Java นั่นเอง ถ้าเป็น method ก็ออกแนว Factory pattern อีกแล้ว [kotlin] class DatabaseConnection { private constructor() {} companion object { fun create() = DatabaseConnection() } } fun main(args: Array) { val connnection = DatabaseConnection.create() } [/kotlin] และบ่อยครั้งเรานำ object expression มาใช้สำหรับสร้าง Annonymous class อีกด้วย หรือนำมาใช้สำหรับการสร้าง single instance ของ object ง่าย ๆแบบนี้ได้อีก ซึ่งอำนวยความสะดวกไม่ต้องไปสร้าง class หรือ data class มองว่าเป็น structure ของข้อมูลไปเลย [kotlin] fun main(args: Array) { val point = object { var x = 100 var y = 200 } print("x=${point.x}, y=${point.y}") } [/kotlin] ถึงตรงนี้น่าจะพอทำให้เข้าใจขึ้นมาบ้างแล้ว ขอให้สนุกกับการ coding ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles