จาก VDO เรื่อง Introduction to Kotlin ของงาน Google I/O 2017
เป็น session ที่แนะนำให้รู้จักภาษา Kotlin
เป็น session ที่เขียน code กันสด ๆ ให้ดูกัน
ว่าภาษา Kotlin มีความสามารถอะไรบ้าง
ว่าภาษา Kotlin ช่วยลดจำนวน code ที่ต้องเขียนลงเยอะไหม
ปิดท้ายด้วย Coroutine นิดหน่อย

ดังนั้นจึงทำการนั่งแกะ code ใน VDO ออกมาหน่อย
เพื่อศึกษาและดูว่ามีการแนะนำความสามารถอะไรของภาษา Kotlin บ้าง
มาเริ่มกันเลย

1. เริ่มด้วย Data class กันเลย

ไม่ต้องมาเขียน setter/getter method ใน POJO
รวมทั้ง method equals(), hashCode() และ toString() อีกต่อไป
ตัวอย่าง code และการใช้งาน เป็นดังนี้

แต่สิ่งที่สนใจมาก ๆ คือ เครื่องหมายไม่เท่ากัน ใน IntelliJ IDEA มันสวยมาก ๆ
แสดงดังรูป

จึงเกิดคำถามกับตัวเองว่า คืออะไร ?
ดังนั้นจึงไปค้นหาพบว่ามันคือ Fira Code
ต้องทำการเปิด feature นี้ใน preference ของ IDE
เลือก Enable font ligatures และ Primary font เป็น Fira Code ดังรูป

เพียงเท่านี้ก็สามารถแสดง operation ใน Equality หรือการเปรียบเทียบข้อมูลได้แล้ว
แสดงตัวอย่างดังนี้

เพียงเท่านี้ก็สวยแล้ว ส่วน code จริง ๆ ก็เป็นเหมือนเดิมคือ !=, !==, == และ === นั่นเอง

2. ว่าด้วยเรื่องของการสร้าง function/method

ซึ่งทุก ๆ function/method ของ Kotlin ที่ไม่ใส่ return type ไปนั้น ไม่ใช่ void นะแต่เป็น Unit
สามารถกำหนดค่า default ของ parameter ได้เลย
ดังนั้นผู้เรียกใช้ function/method นี้ไม่ต้องส่งมาก็ได้
ยังไม่พอ เรียกใช้งานผ่าน Named parameter ซึ่งสลับตำแหน่งได้อีก ดังนี้

มีอีกนิดนึงคือ ถ้า function/method มีเพียงบรรทัดเดียวและ return ข้อมูล
สามารถใช้งาน expression body ได้เลย (Single expression function)

ซึ่งใน IntelliJ IDEA มีการแปลงให้อีกด้วย

3. ดูการใช้งาน Single expression function กับ When expression แบบสวย ๆ

ต้องการสร้าง function/method สำหรับแปลงค่าเงินเป็นสกุล Dollar ขึ้นมา
สามารถเขียนด้วยการใช้ when ได้ดังนี้
สิ่งที่ชอบคือ ขั้นตอนการ refactor code ซึ่งมี 3 ขั้นตอนดังนี้

4. ว่าด้วยเรื่องของ Extension function

สามารถเพิ่มความสามารถใหม่ ๆ ได้ตามที่ต้องการ
นั่นคือ extension function นั้นเอง
ซึ่งหลาย ๆ ภาษาก็ทำได้ เช่นภาษา Swift เป็นต้น

ตัวอย่าง code เป็นดังนี้
ซึ่งสร้าง function ใหม่ชื่อว่า percent และ percentOf

ยังไม่พอนะ ยังมี infix notation ให้ใช้อีกด้วย
โดยทำการใส่ keyword infix ไปหน้า function
จะทำให้ code ดูสวยงามมากยิ่งขึ้น
ตัวอย่างเช่น

5. ต่อด้วยเรื่อง Extension property

จาก code ตัวอย่างนั้นพบว่าการสร้าง BigDeciaml มันเหนื่อยมากหรือสร้างยากนั่นเอง
มีทางในการสร้างที่ดีกว่าหรือไม่ ?
แน่นอนว่า ทาง Kotlin ได้เตรียมวิธีการสร้างง่าย ๆ ไว้ให้
ตัวอย่างเช่น

6. เรื่องของการสร้าง Data Type class ด้วย sealed class

ตัวอย่างเป็นการสร้าง data class สำหรับ return ผลการทำงานของส่วนต่าง ๆ ออกมา
ซึ่งตัวอย่างคือ UserResult ประกอบไปด้วย Success และ Failure
เขียน code ได้ดังนี้

โดยในการใช้งานเรียกว่า Smart cast
จะสังเกตุว่าใช้ผ่าน keyword is
ซึ่ง compiler จะทำการ cast type ของ Result ให้แบบอัตโนมัติ
แสดงดังนี้

ขอให้สนุกกับการ coding