Kotlin Academy · บทเรียน

คลาสภายในฟังก์ชัน

คลาสที่อยู่ในฟังก์ชัน

บทเรียน 4 จาก 413 ขั้นตอน

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

คลาสในฟังก์ชัน

Kotlin อนุญาตให้คุณประกาศ คลาสท้องถิ่น ภายในส่วนเนื้อหาของฟังก์ชัน คลาสนี้จะมองเห็นได้เฉพาะภายในฟังก์ชันนั้น

fun main() {
    class Greeting(val text: String) {
        fun show() = println(text)
    }
    Greeting("Hello local").show()
}

จำกัดขอบเขตไว้ในฟังก์ชัน

คลาสท้องถิ่นไม่สามารถใช้งานนอกฟังก์ชันที่ประกาศคลาสนั้นได้ ทำให้ชนิดข้อมูลช่วยเหลือถูกจำกัดไว้อย่างชัดเจน

fun build(): String {
    class Builder {
        fun make() = "built"
    }
    return Builder().make()
}

fun main() {
    println(build())
}

การจับตัวแปรท้องถิ่น

เช่นเดียวกับคลอเชอร์ คลาสท้องถิ่นสามารถจับตัวแปรจากฟังก์ชันที่ครอบคลุมอยู่ได้

fun main() {
    val prefix = ">> "
    class Logger {
        fun log(msg: String) = println(prefix + msg)
    }
    Logger().log("started")
}

หลายอินสแตนซ์

คุณสามารถสร้างอินสแตนซ์ของคลาสท้องถิ่นได้มากเท่าที่ต้องการภายในฟังก์ชัน

fun main() {
    class Point(val x: Int)
    val a = Point(1)
    val b = Point(2)
    println(a.x + b.x)
}

คลาสท้องถิ่นที่มีเมธอด

คลาสท้องถิ่นเป็นคลาสอย่างสมบูรณ์ ตัวสร้าง พร็อพเพอร์ตี และเมธอดล้วนใช้งานได้

fun main() {
    class Account(var balance: Int) {
        fun deposit(n: Int) { balance += n }
    }
    val acc = Account(100)
    acc.deposit(50)
    println(acc.balance)
}

เหตุใดจึงใช้คลาสท้องถิ่น

ใช้คลาสท้องถิ่นเมื่อชนิดข้อมูลช่วยเหลือมีความหมายเฉพาะภายในฟังก์ชันเดียว เพื่อไม่ให้ไฟล์มีชนิดข้อมูลระดับบนสุดมากเกินไป

fun parseLine(line: String): Int {
    class Token(val value: String)
    val tokens = line.split(",").map { Token(it) }
    return tokens.size
}

fun main() {
    println(parseLine("a,b,c"))
}

การจับสถานะที่เปลี่ยนแปลงได้

คลาสท้องถิ่นสามารถแก้ไขตัวแปรที่เปลี่ยนแปลงได้ซึ่งจับมาจากขอบเขตที่ครอบคลุมอยู่

fun main() {
    var total = 0
    class Adder {
        fun add(n: Int) { total += n }
    }
    val a = Adder()
    a.add(5)
    a.add(7)
    println(total)
}

การใช้งานอินเทอร์เฟซภายในฟังก์ชัน

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

interface Step { fun run(): String }

fun main() {
    class First : Step {
        override fun run() = "first"
    }
    println(First().run())
}

คลาสท้องถิ่นเทียบกับออบเจ็กต์นิรนาม

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

fun main() {
    class Repeater(val times: Int) {
        fun run() = "x".repeat(times)
    }
    println(Repeater(3).run())
}

การซ้อนภายในลูป

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

fun main() {
    for (i in 1..2) {
        class Tag(val id: Int)
        println(Tag(i).id)
    }
}

ตัวช่วยที่ใช้ได้จริง

คลาสท้องถิ่นเหมาะอย่างยิ่งสำหรับชนิดข้อมูลช่วยเหลือของโดเมนที่มีอายุสั้นและถูกใช้โดยฟังก์ชันเดียวเท่านั้น

fun report(values: List<Int>): String {
    class Stats(val sum: Int, val max: Int)
    val s = Stats(values.sum(), values.max())
    return "sum=${s.sum} max=${s.max}"
}

fun main() {
    println(report(listOf(3, 7, 2)))
}

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

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

สรุปทบทวน

คุณได้เรียนรู้เกี่ยวกับ คลาสท้องถิ่น:

  • ประกาศภายในฟังก์ชันและมีขอบเขตอยู่ภายในฟังก์ชันนั้น
  • สามารถจับและแก้ไขตัวแปรท้องถิ่นจากขอบเขตที่ครอบคลุมอยู่ได้
  • เป็นคลาสอย่างสมบูรณ์ มีตัวสร้าง พร็อพเพอร์ตี เมธอด และอินเทอร์เฟซ
  • ใช้คลาสท้องถิ่นเมื่อจำเป็นต้องมีชื่อ และใช้ออบเจ็กต์นิรนามสำหรับอินสแตนซ์เดียวที่ใช้งานแบบฝังในบรรทัด
fun main() {
    val tag = "L"
    class C { fun show() = tag }
    println(C().show())
}
เริ่มต้นได้ฟรี

เรียนรู้ Kotlin ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

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

บทเรียน “คลาสภายในฟังก์ชัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “คลาสภายในฟังก์ชัน”

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

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

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

บทเรียน “คลาสภายในฟังก์ชัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. คลาสซ้อนภายใน
  2. คลาสภายใน
  3. ออบเจ็กต์นิรนาม
  4. คลาสภายในฟังก์ชัน
← กลับไปที่ Kotlin Academy