พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า
เพิ่มพร็อพเพอร์ตีคำนวณค่าให้คลาสที่มีอยู่โดยไม่ต้องสืบทอดคลาส
พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า เป็นบทเรียน 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
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]ตรวจสอบอย่างรวดเร็ว
ทบทวน
คำถามที่พบบ่อย
บทเรียน “พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันส่วนขยาย: ไวยากรณ์และกฎการเลือกใช้
- พร็อพเพอร์ตีส่วนขยายและส่วนขยายแบบคำนวณค่า
- ส่วนขยายตามขอบเขตและส่วนขยายของ Companion
- ส่วนขยายเชิงปฏิบัติ: ตัวช่วย Context, View และ String