ทำความเข้าใจ Enums ใน Kotlin:
Kotlin เป็นภาษาโปรแกรมสมัยใหม่ที่ได้รับความนิยมอย่างรวดเร็วในชุมชนการพัฒนา Android หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ Kotlin คือคลาส enum Enums จัดเตรียมวิธีการกำหนดชุดของค่าคงที่ที่มีชื่อซึ่งสามารถใช้ในบริบทต่างๆ ในบทความนี้ เราจะสำรวจพื้นฐานของ enums ใน Kotlin และดำดิ่งสู่คุณสมบัติขั้นสูงบางอย่างที่ทำให้พวกเขาเป็นเครื่องมือที่ทรงพลังสำหรับนักพัฒนา
การแนะนำ
Enums ใน Kotlin เป็นวิธีที่ปลอดภัยสำหรับประเภทในการกำหนดชุดของค่าคงที่ที่มีชื่อซึ่งสามารถใช้ในโค้ดของคุณได้ คลาส enum ใน Kotlin เป็นคลาสประเภทพิเศษที่มีชุดค่าคงที่คงที่ หรือที่เรียกว่าค่าคงที่ enum
คุณสามารถกำหนด enum ใน Kotlin ได้โดยใช้enum class
คีย์เวิร์ด ตามด้วยชื่อของ enum และรายการค่าคงที่ของ enum ที่อยู่ในวงเล็บปีกกา
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
คุณสามารถใช้ enums ใน Kotlin ในบริบทที่หลากหลาย ตัวอย่างเช่น คุณสามารถใช้เป็นประเภทพารามิเตอร์หรือประเภทผลตอบแทนในฟังก์ชัน
fun getDirection(): Direction {
return Direction.NORTH
}
fun getDirectionName(direction: Direction): String {
return when (direction) {
Direction.NORTH -> "North"
Direction.SOUTH -> "South"
Direction.EAST -> "East"
Direction.WEST -> "West"
}
}
Enums ใน Kotlin เป็นมากกว่าวิธีที่ปลอดภัยสำหรับประเภทในการกำหนดชุดของค่าคงที่ที่มีชื่อ อันที่จริงแล้ว พวกเขามาพร้อมกับคุณสมบัติขั้นสูงมากมายที่สามารถทำให้โค้ดของคุณมีประสิทธิภาพและยืดหยุ่นมากขึ้น ในบทความนี้ เราจะสำรวจคุณลักษณะเหล่านี้บางส่วนและแสดงวิธีการใช้งานอย่างมีประสิทธิภาพ
ตัวสร้าง Enum และคุณสมบัติ
นอกจากการกำหนดค่าคงที่แล้ว คุณยังสามารถให้ค่าคงที่ enum แต่ละตัวเป็นชุดคุณสมบัติของตนเองได้โดยใช้ตัวสร้าง enum นี่คือตัวอย่าง:
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
การใช้อินเทอร์เฟซกับ Enums
Enums ใน Kotlin ยังสามารถใช้งานอินเทอร์เฟซได้เช่นเดียวกับคลาสทั่วไป สิ่งนี้มีประโยชน์เมื่อคุณต้องการกำหนดชุดของค่าคงที่ที่มีลักษณะการทำงานร่วมกัน นี่คือตัวอย่าง:
interface Printable {
fun print()
}
enum class Direction : Printable {
NORTH {
override fun print() {
println("North")
}
},
SOUTH {
override fun print() {
println("South")
}
},
EAST {
override fun print() {
println("East")
}
},
WEST {
override fun print() {
println("West")
}
}
}
ฟังก์ชันส่วนขยาย Enum
คุณยังสามารถกำหนดฟังก์ชันส่วนขยายสำหรับ enums ใน Kotlin ได้ เช่นเดียวกับที่คุณทำได้สำหรับคลาส ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการเพิ่มฟังก์ชันให้กับ enum ที่ไม่ได้ระบุไว้ในคำนิยามเดิม นี่คือตัวอย่าง:
enum class Color {
RED, GREEN, BLUE
}
fun Color.print() {
when (this) {
Color.RED -> println("Red")
Color.GREEN -> println("Green")
Color.BLUE -> println("Blue")
}
}
คุณสมบัติและหน้าที่ของ Enum
สุดท้าย คุณยังสามารถกำหนดคุณสมบัติและฟังก์ชันได้โดยตรงบนคลาส enum ใน Kotlin สิ่งนี้มีประโยชน์เมื่อคุณต้องการจัดเตรียมฟังก์ชันทั่วไปสำหรับค่าคงที่ทั้งหมดใน enum นี่คือตัวอย่าง:
enum class Planet(val mass: Double, val radius: Double) {
EARTH(5.97e24, 6_371.0),
MARS(6.39e23, 3_389.5),
JUPITER(1.898e27, 69_911.0);
fun surfaceGravity(): Double {
val G = 6.67300E-11
return G * mass / (radius * radius)
}
fun surfaceWeight(otherMass: Double): Double {
return otherMass * surfaceGravity()
}
}
val mars = Planet.MARS
val surfaceGravity = mars.surfaceGravity() // returns 3.71
val jupiter = Planet.JUPITER
val surfaceWeight = jupiter.surfaceWeight(100.0) // returns 236.24129999999998
หนึ่งในการตัดสินใจแรกๆ ที่คุณต้องทำเมื่อทำงานกับ enums คือว่าจะใช้ enum หรือชุดของค่าคงที่ โดยทั่วไป ควรใช้ enums เมื่อคุณมีชุดค่าคงที่และจำกัดซึ่งแสดงถึงแนวคิด ในทางกลับกัน ค่าคงที่จะเหมาะสมกว่าเมื่อคุณมีค่าเดียวที่คุณต้องการอ้างถึงในหลายๆ ที่
หลักการตั้งชื่อ Enum
เมื่อตั้งชื่อ enums ของคุณ สิ่งสำคัญคือต้องปฏิบัติตามหลักการตั้งชื่อที่กำหนดไว้เพื่อทำให้โค้ดของคุณสามารถอ่านได้และสอดคล้องกันมากขึ้น ต่อไปนี้เป็นแนวทางที่ควรพิจารณา:
- ใช้นามเอกพจน์เพื่อตั้งชื่อ enums ของคุณ (เช่น Color แทน Colours)
- ใช้อักษรตัวพิมพ์ใหญ่และขีดล่างเพื่อแยกคำในชื่อ enum ของคุณ (เช่น MY_ENUM แทน MyEnum)
- หลีกเลี่ยงการใช้ตัวย่อหรือตัวย่อในชื่อ enum ของคุณ เว้นแต่จะเป็นที่รู้จักอย่างกว้างขวาง (เช่น HTTP แทน HTTP)
มีรูปแบบการต่อต้านทั่วไปบางประการที่ต้องระวังเมื่อทำงานกับ enums:
- การใช้ enums แทนฐานข้อมูล แม้ว่า enums จะเป็นวิธีที่สะดวกในการจัดเก็บข้อมูล แต่ก็ไม่ควรใช้แทนฐานข้อมูลที่เหมาะสม
- ใช้ enums มากเกินไป เพียงเพราะคุณสามารถกำหนด enum สำหรับบางสิ่งไม่ได้หมายความว่าคุณควร ใช้ enums อย่างรอบคอบและพิจารณาตัวเลือกอื่นๆ (เช่น ค่าคงที่หรือคลาส) ตามความเหมาะสม
- ใช้ enums เพื่อกำหนดพฤติกรรม แม้ว่า enums จะใช้อินเทอร์เฟซและกำหนดฟังก์ชันได้ แต่ก็ไม่ควรใช้เพื่อกำหนดลักษณะการทำงานที่ซับซ้อน ใช้คลาสแทนสำหรับพฤติกรรมที่ซับซ้อนมากขึ้น
สุดท้าย สิ่งสำคัญคือต้องทดสอบ enums เพื่อให้แน่ใจว่าทำงานได้อย่างถูกต้อง นี่คือเคล็ดลับบางประการที่ควรทราบ:
- ทดสอบค่าคงที่ของ enum ทั้งหมด ตรวจสอบให้แน่ใจว่าค่าคงที่แต่ละตัวทำงานตามที่คาดไว้
- ทดสอบฟังก์ชันหรือคุณสมบัติใดๆ ที่กำหนดไว้ใน enum ตรวจสอบให้แน่ใจว่ากำลังส่งคืนค่าที่คาดไว้
- ทดสอบกรณีขอบ ตรวจสอบให้แน่ใจว่า enums ของคุณจัดการกับขอบเคสอย่างเหมาะสม