What’s new in Kotlin 1.6
สวัสดีครับทุกคน หลังจากที่ทาง Kotlin ได้ปล่อย version 1.6.0 มาเมื่อวันที่ 16 Nov 2021 วันนี้ผมจะมาแนะนำสิ่งที่น่าสนใจสำหรับ Kotlin เวอร์ชันนี้ให้ทุกคนได้อ่านกันครับ
มาเริ่มกันเลย
1) When statements
หัวข้อนี้เป็นเรื่องของการใช้งาน when statements นะครับ โดยที่เราจะต้องใส่ให้ครอบคลุมทุกเคสที่เป็นไปได้ หรือต้องใส่ else ด้วยเสมอ มาดูตัวอย่างกันครับ
กรณีที่ 1 เป็นการใช้ when กับ boolean จากตัวอย่างจะเห็นว่าเรามีแค่ true เพียงเคสเดียวแต่ไม่มี false หรือ else ทำให้ warning แสดงขึ้นมาตามรูปด้านล่าง
กรณีที่ 2 เป็นการใช้ when กับ enum class จากตัวอย่างจะเห็นว่าเราใส่ไม่ครบทุกเคสที่มีอยู่ใน enum class หรือไม่มี else ทำให้ warning แสดงขึ้นมาตามรูปด้านล่าง (seal class ก็ด้วยนะ ^^)
กรณีที่ 3 เป็นการ return valueโดยใช้ when จากตัวอย่างจะเห็นว่าฟังก์ชันที่เราเขียนมี return type ที่เป็น non-nullable แต่เราใส่ไม่ครบทุกเคสหรือไม่มี else ทำให้เกิด error ขึ้นมาตามรูปข้างล่าง
2) Suspending functions as supertypes
หัวข้อนี้เป็นเรื่องของการนำ suspend มาเป็น supertypes เราสามารถทำการระบุ return type ที่ต้องการ จากนั้นให้ทำการ overide suspend fun invoke() ได้เลย ตัวอย่างของการใช้งาน เช่น
3) Collection builders
หัวข้อนี้เป็นเรื่องของการใช้งานฟังก์ชันที่ใช้สำหรับสร้าง collection นะครับ โดยมีให้เลือกใช้ทั้งหมด 3 แบบ
แบบที่ 1 buildList() ทำให้เราสามารถสร้าง list ขึ้นมาใหม่โดยนำ list ที่มีอยู่แล้ว และเพิ่มบาง element ที่เราต้องการเข้าไปได้
แบบที่ 2 buildMap() การทำงานคล้ายกับแบบที่ 1 สามารถนำ map list เดิมที่มีอยู่แล้ว และเพิ่มบางส่วนเข้าไปได้
แบบที่ 3 buildSet() การทำงานคล้ายกับแบบที่ 1 และ 2 สามารถนำ set list เดิมที่มีอยู่แล้ว และเพิ่มบางส่วนเข้าไปได้ โดยความสามารถของ set ก็คือจะไม่เก็บค่าซ้ำลงใน list
4) Duration API
หัวข้อนี้เป็นเรื่องของการนำตัวเลขมาคำนวณเป็นหน่วยของเวลาตามที่เราต้องการ โดยใช้ Duration API
Format ของการใช้งานคือ {Int value}.{หน่วยเวลาปัจจุบัน}.{หน่วยเวลาที่ต้องการ}
หน่วยเวลาปัจจุบัน ที่สามารถใช้งานได้มีดังนี้
- nanoseconds
- microseconds
- milliseconds
- seconds
- minutes
- hours
- day
หน่วยเวลาที่เราต้องการ ที่สามารถใช้งานได้มีดังนี้
- inWholeNanoseconds
- inWholeMicroseconds
- inWholeMilliseconds
- inWholeSeconds
- inWholeMinutes
- inWholeHours
- inWholeDays
กรณีที่ 1 เป็นการแปลงจาก 10,000 วินาทีให้กลายเป็นหน่วยของนาที จะได้ 166 นาที (ทศนิยมจะถูกตัดทิ้ง)
กรณีที่ 2 เป็นการแปลงจาก 10 วินาทีให้กลายเป็นหน่วยของนาที แต่เนื่องจากเมื่อคำนวณแล้วไม่ถึง 1 นาทีผลลัพธ์ที่ได้จะมีค่าเป็น 0 (จะไม่แสดง 0.17 ออกมา)
กรณีที่ 3 เป็นการแปลงจาก 70 นาทีให้กลายเป็นหน่วยของชั่วโมง แต่เนื่องจากเมื่อคำนวณแล้วมันเกิน 1 ชั่วโมงแต่ไม่ถึง 2 ชั่วโมง ผลลัพธ์ที่ได้จะมีค่าเป็น 1 (จะไม่แสดง 1.17 ออกมา)
5) Splitting Regex into a sequence
หัวข้อนี้เป็นเรื่องของการใช้งาน splitToSequence นะครับ โดยการทำงานหลักๆ ก็คือการ split ข้อความด้วย regex แล้ว return ออกมาเป็น sequence ครับ ตัวอย่างการใช้งานเช่น
Note: หากใครกำลังสงสัยเกี่ยวกับการทำงานของ sequence สามารถเข้าไปอ่านเพิ่มเติมได้ที่ลิงค์นี้ครับ
6) Definitely non-nullable type
หัวข้อนี้เป็นเรื่องของการกำหนด non-nullable ให้กับตัว generic type เพียงแค่เราใส่ & Any เข้าไปยังส่วนที่เราต้องการให้เป็น non-nullable ตัวอย่างการใช้งานเช่น
Note : หัวข้อนี้จะเป็นของ Kotlin V1.6.20 และยังเป็นตัว Beta อยู่นะครับ