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

พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า

เพิ่มพร็อพเพอร์ตีคำนวณค่าให้คลาสที่มีอยู่โดยไม่ต้องสืบทอดคลาส

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

คุณสมบัติส่วนขยาย

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

คุณสมบัติส่วนขยายแบบอ่านอย่างเดียว

กำหนดตัวอ่านค่าเพื่อสร้างคุณสมบัติส่วนขยายที่คำนวณได้
val String.wordCount: Int
    get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount)  // 3

คุณสมบัติส่วนขยายที่เปลี่ยนค่าได้

กำหนดทั้งตัวอ่านค่าและตัวกำหนดค่าเพื่อสร้างคุณสมบัติส่วนขยายที่อ่านและเขียนได้
var MutableList<Int>.first: Int
    get() = this[0]
    set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list)  // [10, 2, 3]

ไม่มีฟิลด์สำรอง

คุณสมบัติส่วนขยายไม่สามารถมีฟิลด์สำรองได้ เพราะจะคำนวณจากสถานะที่มีอยู่เสมอ
// ERROR: extension property cannot have backing field
// var String.cache: String = ""  // NOT allowed!

// OK: computed only:
val String.isPalindrome: Boolean
    get() = this == this.reversed()

คุณสมบัติส่วนขยายบนคอลเลกชัน

เพิ่มคุณสมบัติที่ช่วยให้ใช้งานชนิดคอลเลกชันได้สะดวกขึ้น
val <T> List<T>.secondOrNull: T?
    get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
    get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull)  // 2

คุณสมบัติส่วนขยายแบบบูลีน

สร้างคุณสมบัติแบบบูลีนที่อ่านเข้าใจง่ายสำหรับตรวจสอบชนิด
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive)        // true
println("abc123".hasDigits)   // true

คุณสมบัติส่วนขยายเทียบกับฟังก์ชันส่วนขยาย

ใช้คุณสมบัติเมื่อการคำนวณเรียบง่ายและแสดงลักษณะของอ็อบเจ็กต์ ใช้ฟังก์ชันเมื่อมีพารามิเตอร์หรือผลข้างเคียง
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)

การขยายอ็อบเจ็กต์คู่หู

เพิ่มคุณสมบัติส่วนขยายให้กับอ็อบเจ็กต์คู่หู
data class Color(val r: Int, val g: Int, val b: Int) {
    companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED)  // Color(r=255, g=0, b=0)

คุณสมบัติส่วนขยายตามบริบท

คุณสมบัติส่วนขยายที่กำหนดภายในคลาสจะใช้ได้เฉพาะเมื่อคุณอยู่ภายในขอบเขตของคลาสนั้น
class Formatter {
    val Int.formatted: String
        get() = "%,d".format(this)
    fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000))  // 1,000,000

การใช้ส่วนขยายสำหรับ DSL

คุณสมบัติส่วนขยายเป็นองค์ประกอบพื้นฐานของการออกแบบ DSL ใน Kotlin
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())

คุณสมบัติส่วนขยายทั่วไป

คุณสมบัติส่วนขยายสามารถมีพารามิเตอร์ชนิดได้
val <T> List<T>.head: T?
    get() = firstOrNull()
val <T> List<T>.tail: List<T>
    get() = drop(1)
println(listOf(1,2,3).head)  // 1
println(listOf(1,2,3).tail)  // [2, 3]

ตรวจสอบอย่างรวดเร็ว

คุณสมบัติส่วนขยายใน Kotlin มีฟิลด์สำรองได้หรือไม่

ทบทวน

คุณสมบัติส่วนขยายเพิ่มลักษณะที่คำนวณได้ให้ชนิดต่าง ๆ โดยไม่มีฟิลด์สำรอง ใช้สำหรับการคำนวณที่เรียบง่ายและไม่มีสถานะ คุณสมบัติส่วนขยายที่เปลี่ยนค่าได้สามารถมีตัวกำหนดค่าได้ เหมาะอย่างยิ่งสำหรับ DSL และ API ที่เรียกต่อเนื่อง บทถัดไป: ส่วนขยายแบบกำหนดขอบเขตและส่วนขยายของอ็อบเจ็กต์คู่หู

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

บทเรียน “พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า”

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

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

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

บทเรียน “พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ฟังก์ชันส่วนขยาย: ไวยากรณ์และกฎการเลือกใช้
  2. พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า
  3. ส่วนขยายตามขอบเขตและส่วนขยายของ Companion
  4. ส่วนขยายเชิงปฏิบัติ: ตัวช่วย Context, View และ String
← กลับไปที่ Kotlin Academy