0Pricing
Kotlin Academy · บทเรียน

กรณีการใช้งาน

การสร้างแบบจำลองโดเมน

กรณีการใช้งาน เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

การจำลองโดเมน

คลาสค่าเหมาะอย่างยิ่งกับการจำลองโดเมน คลาสค่าเปลี่ยนค่าพื้นฐานที่ไม่มีความหมายเฉพาะให้เป็นชนิดข้อมูลที่มีความหมายและช่วยป้องกันข้อผิดพลาด โดยไม่เพิ่มต้นทุนขณะทำงาน

มาดูสถานการณ์ที่พบได้จริงกัน

รหัสที่มีชนิดข้อมูล

ชนิดรหัสที่แยกกันช่วยป้องกันการส่งรหัสผู้ใช้ไปยังตำแหน่งที่ต้องใช้รหัสคำสั่งซื้อ ซึ่งเป็นข้อผิดพลาดที่พบได้บ่อยและมีค่าใช้จ่ายสูง

@JvmInline
value class UserId(val value: Long)
@JvmInline
value class OrderId(val value: Long)

fun fetchUser(id: UserId) = "user " + id.value

fun main() {
    println(fetchUser(UserId(7)))
}

หน่วยวัด

การห่อหุ้มตัวเลขด้วยชนิดหน่วยวัดช่วยป้องกันการนำเมตรไปบวกกับวินาทีโดยไม่ตั้งใจ และยังบอกความหมายของค่าไว้อย่างชัดเจน

@JvmInline
value class Kilograms(val value: Double)

fun describe(weight: Kilograms) = weight.value.toString() + " kg"

fun main() {
    println(describe(Kilograms(72.5)))
}

สตริงที่ผ่านการตรวจสอบ

ใช้คลาสค่าร่วมกับบล็อก init เพื่อรับประกันเงื่อนไขคงที่ เช่น อีเมลที่ไม่เว้นว่าง

@JvmInline
value class Email(val value: String) {
    init {
        require(value.contains("@")) { "invalid email" }
    }
}

fun main() {
    println(Email("a@b.com").value)
}

เงินที่มีพฤติกรรม

แทนจำนวนเงินด้วยหน่วยย่อยที่สุดและเพิ่มการดำเนินการต่าง ๆ เพื่อหลีกเลี่ยงข้อผิดพลาดของสกุลเงินจากเลขทศนิยมลอยตัว

@JvmInline
value class Cents(val value: Long) {
    operator fun plus(other: Cents) = Cents(value + other.value)
    fun format() = "$" + value / 100.0
}

fun main() {
    val total = Cents(1500) + Cents(250)
    println(total.format())
}

ส่วนติดต่อที่อธิบายตัวเอง

ลายเซ็นฟังก์ชันที่ใช้คลาสค่ามีความชัดเจนกว่าลายเซ็นที่ใช้จำนวนเต็มสามตัวแบบไม่มีความหมายกำกับมาก

@JvmInline
value class Width(val px: Int)
@JvmInline
value class Height(val px: Int)

fun area(w: Width, h: Height) = w.px * h.px

fun main() {
    println(area(Width(4), Height(5)))
}

การห่อหุ้มข้อมูลสำคัญ

คลาสค่าสามารถแทนที่ toString เพื่อปกปิดข้อมูลลับในบันทึกการทำงาน ขณะเดียวกันก็ยังเข้าถึงค่าดิบได้

@JvmInline
value class Token(val value: String) {
    override fun toString() = "Token(***)"
}

fun main() {
    val t = Token("abc123")
    println(t)          // masked
    println(t.value)    // real value when needed
}

การบังคับใช้ช่วงค่า

ใช้คลาสค่าเพื่อรวมกฎของช่วงค่าไว้ในที่เดียว ทำให้ไม่สามารถสร้างสถานะที่ไม่ถูกต้องได้จากทุกจุด

@JvmInline
value class Rating(val stars: Int) {
    init {
        require(stars in 1..5) { "stars must be 1..5" }
    }
}

fun main() {
    println(Rating(4).stars)
}

ตัวสร้างอัจฉริยะ

จับคู่คลาสค่ากับโรงงานในออบเจ็กต์ร่วมที่คืนค่า null เมื่ออินพุตไม่ถูกต้อง เพื่อหลีกเลี่ยงข้อยกเว้นสำหรับความล้มเหลวที่คาดหมายได้

@JvmInline
value class Age(val value: Int) {
    companion object {
        fun of(n: Int): Age? = if (n in 0..150) Age(n) else null
    }
}

fun main() {
    println(Age.of(30)?.value)
    println(Age.of(-5))
}

สรุปรูปแบบการใช้งาน

รูปแบบการใช้คลาสค่าที่พบบ่อย:

  • รหัสที่มีชนิดข้อมูลเพื่อป้องกันการสับสน
  • หน่วยวัด
  • ค่าพื้นฐานที่ผ่านการตรวจสอบด้วย init
  • การดำเนินการของโดเมนผ่านตัวดำเนินการ
  • ค่าข้อมูลสำคัญที่ถูกปกปิด

ความปลอดภัยที่แทบไม่เสียต้นทุน

เนื่องจากคลาสค่ามักถูกแทรกค่าไว้โดยตรง คุณจึงได้ทั้งความชัดเจนและความปลอดภัยของโดเมนทั้งหมดนี้ โดยแทบไม่เสียต้นทุนขณะทำงาน คลาสค่าเป็นวิธีที่ปรับใช้ได้ง่ายในการทำให้สถานะที่ไม่ถูกต้องไม่สามารถแทนค่าได้

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับกรณีการใช้งานคลาสค่า

ทบทวน

คุณได้เห็นกรณีการใช้งานคลาสค่าในทางปฏิบัติ:

  • รหัสที่มีชนิดข้อมูล หน่วยวัด และสตริงที่ผ่านการตรวจสอบ
  • เงินและการดำเนินการของโดเมน
  • การปกปิดข้อมูลลับและตัวสร้างอัจฉริยะ

ถัดไป: ข้อจำกัดของคลาสค่า

คำถามที่พบบ่อย

บทเรียน “กรณีการใช้งาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กรณีการใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กรณีการใช้งาน”

การสร้างแบบจำลองโดเมน คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “กรณีการใช้งาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชื่อแทนชนิดข้อมูล
  2. คลาสค่าแบบอินไลน์
  3. กรณีการใช้งาน
  4. ข้อจำกัด
← กลับไปที่ Kotlin Academy