[Kotlin] จาก Java Model สู่ Data Class ใน Kotllin

บทความนี้ผมจะพามาทำความรู้จักกับ Data Class กันในภาษา Kotlin ซึ่งมันมีไว้ให้เราประกาศ Class หรือไฟล์ที่ใช้ในการเก็บข้อมูล หรือสร้าง Object ในการเก็บข้อมูลนั่นเอง

 

ที่มาของ Data Class

ที่มาของ Data Class มาจากการปกติแล้วคนที่เขียน Java มักจะประกาศ Class เปล่าๆ มาเพื่อไว้สร้าง Object สำหรับเก็บข้อมูลต่างๆ เช่น Cat.java ด้านในก็อาจะไว้เก็บข้อมูลของแมวต่างๆ เช่น ชื่อ, อายุ, เพศ, ที่อยู่, ชื่อเจ้าของ เป็นต้น ซึ่งโดยปกติแล้วในทุกๆ ภาษาที่เป็นแบบ OOP เมื่อเราเขียน Model เพื่อระบุว่า Model นั่นมีหน้าที่ (Method) และไว้เก็บค่าอะไร (Properties) อะไรนั่นเราก็จะสร้าง Model ที่มีหน้าตาประมาณนี้

 

จากตัวอย่างคือการสร้าง Class เพื่อไว้สำหรับการใช้งานเพื่อเก็บข้อมูลของ Person วิธีการใช้งานก็แบบทั่วไปคือ new Object ขึ้นมาแล้วก็ประกาศค่าลงไปผ่าน Constructor ที่แบบที่ผมสร้างไว้ ซึ่งผมจะไม่อธิบายเรื่องการทำ Encapsulation(get, set) กับ Constructor ผมคิดว่าน่าจะต้องเข้าใจกันอยู่แล้ว ถ้าไม่ก็ให้หยุดตรงนี้แล้วกลับไปอ่าน Java OOP ก่อนนะครับ ไม่งั่นจะไปต่ออ่านแล้วยัง ยิ่งทำให้ งง

การใช้ Model นั่นแตกต่างกันออกไปหลายหลายรูปแบบแต่มีอยู่จุดประสงค์เดียวคือการเอามาเก็บข้อมูลก่อนการบันทึกลง Database หรือนำมาประมวลผลต่างๆ ก่อนลง Database การเขียน Model ก็แตกต่างออกไปขึ้นอยู่กับภาษา หรือ Framework

กลับมาที่โค้ดเราอีกครั่งจะเห็นได้ว่า เราต้องประกาศยาวมากว่าจะได้ Model Class ตัวนึงใน Java ดังนั่นถ้าใครเบื่อกับการเขียนโค้ดแบบข้างบน ผมแนะนำว่าให้ลองมารู้จักับ Data Class ของ Kotlin ดู

 

Data Class ใน Kotlin

ผมจะเอาโค้ด Java ด้านบนมาจับแปลงเป็น Kotlin และทำให้เป็น Data Class หรือ Model Class เพื่อเก็บข้อมูลของ Person แบบนี้

 

kotlin ทำให้ทุกอย่างให้สั่นลงไปเยอะมาก แถมยังทำ Encapsulation(getter, setter) ให้ด้วยโดยที่เราไม่ต้องประกาศอะไรเลย และการใช้งานก็เพียงแค่ new Object ปกติแล้วก็ใส่ข้อมูลที่ Constructor ต้องการไว้ลงไป

เพียงแค่เราประกาศ key ที่ชื่อว่า data ไว้ด้านหน้าของ Class และก็ประกาศ Constructor แบบที่ให้ภาษาทำ Encapsulation ให้ [อ่านต่อ] เราก็จะได้ Model Class ที่ไว้สำหรับเก็บข้อมูลขึ้นมาทันที่ครับ ตัวอย่างการเอาไปใช้งานแบบนี้

 

เพิ่มลูกเล่นของ Data Class

  1. นอกจากโค้ดด้านบนเรายังที่จะระบบทำ getters/setters ให้เราแบบออโต้ได้แล้วเรายังสามารถจำกัดการสร้าง getters/setters ของภาษาได้อีกด้วย เพิ่งแค่เปลี่ยนจาก var เป็น val เราก็ได้จะได้แต่ getter
  2. เราสามารถระบุค่า default ให้กับตัวแปลได้ด้วยเช่น

 

 

Facebook Comments