จาก VDO เรื่อง
Introduction to Kotlin ของงาน Google I/O 2017
เป็น session ที่แนะนำให้รู้จักภาษา Kotlin
เป็น session ที่เขียน code กันสด ๆ ให้ดูกัน
ว่าภาษา Kotlin มีความสามารถอะไรบ้าง
ว่าภาษา Kotlin ช่วยลดจำนวน code ที่ต้องเขียนลงเยอะไหม
ปิดท้ายด้วย
Coroutine นิดหน่อย
ดังนั้นจึงทำการนั่งแกะ code ใน VDO ออกมาหน่อย
เพื่อศึกษาและดูว่ามีการแนะนำความสามารถอะไรของภาษา Kotlin บ้าง
มาเริ่มกันเลย
ไม่ต้องมาเขียน setter/getter method ใน POJO
รวมทั้ง method equals(), hashCode() และ toString() อีกต่อไป
ตัวอย่าง code และการใช้งาน เป็นดังนี้
[gist id="0a4262751699d6f9623d741c85147417" file="1.kt"]
แต่สิ่งที่สนใจมาก ๆ คือ เครื่องหมายไม่เท่ากัน ใน 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 ซึ่งสลับตำแหน่งได้อีก ดังนี้
[gist id="0a4262751699d6f9623d741c85147417" file="2.kt"]
มีอีกนิดนึงคือ ถ้า function/method มีเพียงบรรทัดเดียวและ return ข้อมูล
สามารถใช้งาน
expression body ได้เลย (Single expression function)
[gist id="0a4262751699d6f9623d741c85147417" file="3.kt"]
ซึ่งใน IntelliJ IDEA มีการแปลงให้อีกด้วย
3. ดูการใช้งาน Single expression function กับ When expression แบบสวย ๆ
ต้องการสร้าง function/method สำหรับแปลงค่าเงินเป็นสกุล Dollar ขึ้นมา
สามารถเขียนด้วยการใช้
when ได้ดังนี้
สิ่งที่ชอบคือ ขั้นตอนการ refactor code ซึ่งมี 3 ขั้นตอนดังนี้
[gist id="0a4262751699d6f9623d741c85147417" file="4.kt"]
สามารถเพิ่มความสามารถใหม่ ๆ ได้ตามที่ต้องการ
นั่นคือ extension function นั้นเอง
ซึ่งหลาย ๆ ภาษาก็ทำได้ เช่นภาษา Swift เป็นต้น
ตัวอย่าง code เป็นดังนี้
ซึ่งสร้าง function ใหม่ชื่อว่า percent และ percentOf
[gist id="0a4262751699d6f9623d741c85147417" file="5.kt"]
ยังไม่พอนะ ยังมี infix notation ให้ใช้อีกด้วย
โดยทำการใส่ keyword infix ไปหน้า function
จะทำให้ code ดูสวยงามมากยิ่งขึ้น
ตัวอย่างเช่น
[gist id="0a4262751699d6f9623d741c85147417" file="6.kt"]
5. ต่อด้วยเรื่อง Extension property
จาก code ตัวอย่างนั้นพบว่าการสร้าง BigDeciaml มันเหนื่อยมากหรือสร้างยากนั่นเอง
มีทางในการสร้างที่ดีกว่าหรือไม่ ?
แน่นอนว่า ทาง Kotlin ได้เตรียมวิธีการสร้างง่าย ๆ ไว้ให้
ตัวอย่างเช่น
[gist id="0a4262751699d6f9623d741c85147417" file="7.kt"]
6. เรื่องของการสร้าง Data Type class ด้วย sealed class
ตัวอย่างเป็นการสร้าง data class สำหรับ return ผลการทำงานของส่วนต่าง ๆ ออกมา
ซึ่งตัวอย่างคือ UserResult ประกอบไปด้วย Success และ Failure
เขียน code ได้ดังนี้
[gist id="0a4262751699d6f9623d741c85147417" file="8.kt"]
โดยในการใช้งานเรียกว่า Smart cast
จะสังเกตุว่าใช้ผ่าน keyword is
ซึ่ง compiler จะทำการ cast type ของ Result ให้แบบอัตโนมัติ
แสดงดังนี้
ขอให้สนุกกับการ coding