ดัชนีและการเรียกใช้งาน
get, set และ invoke
ดัชนีและการเรียกใช้งาน เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตัวดำเนินการดัชนี
การกำหนด operator fun get ทำให้คุณอ่านข้อมูลด้วยไวยากรณ์วงเล็บเหลี่ยมได้: obj[i]
class Row(val cells: List<String>) {
operator fun get(i: Int) = cells[i]
}
fun main() {
val r = Row(listOf("a", "b", "c"))
println(r[1])
}การเขียนด้วยตัวดำเนินการกำหนดค่า
operator fun set เปิดให้กำหนดค่าได้: obj[i] = value พารามิเตอร์ตัวสุดท้ายคือค่าที่จะกำหนด
class Grid {
private val data = IntArray(3)
operator fun get(i: Int) = data[i]
operator fun set(i: Int, value: Int) { data[i] = value }
}
fun main() {
val g = Grid()
g[0] = 42
println(g[0])
}การใช้ดัชนีหลายอาร์กิวเมนต์
get และ set รับดัชนีได้หลายตัว จึงเหมาะอย่างยิ่งสำหรับเมทริกซ์
class Matrix {
private val d = Array(2) { IntArray(2) }
operator fun get(r: Int, c: Int) = d[r][c]
operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}
fun main() {
val m = Matrix()
m[1, 1] = 9
println(m[1, 1])
}การใช้ดัชนีที่ไม่ใช่จำนวนเต็ม
พารามิเตอร์ดัชนีสามารถเป็นชนิดข้อมูลใดก็ได้ ทำให้เข้าถึงข้อมูลในลักษณะคล้ายแผนที่ได้
class Settings {
private val map = mutableMapOf<String, String>()
operator fun get(key: String) = map[key]
operator fun set(key: String, value: String) { map[key] = value }
}
fun main() {
val s = Settings()
s["theme"] = "dark"
println(s["theme"])
}ตัวดำเนินการ Invoke
การกำหนด operator fun invoke ทำให้คุณเรียกใช้อินสแตนซ์ราวกับเป็นฟังก์ชันได้: obj()
class Greeter(val name: String) {
operator fun invoke() = "Hello, $name"
}
fun main() {
val g = Greeter("Sam")
println(g())
}Invoke พร้อมอาร์กิวเมนต์
invoke รับพารามิเตอร์ได้ ทำให้ออบเจ็กต์ทำงานเหมือนฟังก์ชันที่รับพารามิเตอร์
class Multiplier(val factor: Int) {
operator fun invoke(x: Int) = x * factor
}
fun main() {
val triple = Multiplier(3)
println(triple(5))
}อ็อบเจ็กต์ที่เรียกใช้ได้และมีสถานะ
เนื่องจากอ็อบเจ็กต์เก็บสถานะไว้ invoke จึงสามารถสร้างอ็อบเจ็กต์ที่มีลักษณะเหมือนฟังก์ชันและกำหนดค่าได้
class Accumulator {
var total = 0
operator fun invoke(n: Int) { total += n }
}
fun main() {
val acc = Accumulator()
acc(5)
acc(10)
println(acc.total)
}โอเวอร์โหลดการเรียกใช้หลายรูปแบบ
คุณสามารถประกาศโอเวอร์โหลดของ invoke ได้หลายรายการ โดยใช้พารามิเตอร์ที่แตกต่างกัน
class Printer {
operator fun invoke(s: String) = println(s)
operator fun invoke(n: Int) = println("num: $n")
}
fun main() {
val p = Printer()
p("hi")
p(7)
}ดัชนีในนิพจน์
การเข้าถึงด้วยดัชนีสามารถประกอบเข้ากับการดำเนินการอื่น ๆ ได้อย่างเป็นธรรมชาติ
class Scores(private val list: List<Int>) {
operator fun get(i: Int) = list[i]
}
fun main() {
val s = Scores(listOf(10, 20, 30))
println(s[0] + s[2])
}การรวม get และ invoke
ชนิดข้อมูลหนึ่งสามารถรองรับทั้งการเข้าถึงด้วยดัชนีและการเรียกใช้ เพื่อสร้างเอพีไอที่สื่อความหมายได้ดี
class Lookup(private val data: Map<String, Int>) {
operator fun get(key: String) = data[key]
operator fun invoke() = data.size
}
fun main() {
val l = Lookup(mapOf("a" to 1))
println(l["a"])
println(l())
}การใช้งานในไลบรารีมาตรฐาน
list[i] ของรายการและ map[key] ของแมปก็คือตัวดำเนินการเหล่านี้โดยตรง ชนิดข้อมูลของคุณก็สามารถใช้งานได้เป็นธรรมชาติในลักษณะเดียวกัน
fun main() {
val list = listOf(1, 2, 3)
val map = mapOf("x" to 9)
println(list[0])
println(map["x"])
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับดัชนีและการเรียกใช้
สรุปทบทวน
คุณได้เรียนรู้เรื่องดัชนีและการเรียกใช้:
getรองรับobj[i]ส่วนsetรองรับobj[i] = v- ตัวดำเนินการดัชนีรองรับคีย์หลายตัวและคีย์ที่ไม่ใช่ชนิด Int
invokeทำให้สามารถเรียกอินสแตนซ์ได้เหมือนฟังก์ชัน ทั้งแบบมีและไม่มีอาร์กิวเมนต์- คอลเลกชันมาตรฐานใช้ตัวดำเนินการเหล่านี้โดยตรง
class Box {
private val m = mutableMapOf<String, Int>()
operator fun get(k: String) = m[k]
operator fun set(k: String, v: Int) { m[k] = v }
}
fun main() {
val b = Box()
b["x"] = 5
println(b["x"])
}คำถามที่พบบ่อย
บทเรียน “ดัชนีและการเรียกใช้งาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ดัชนีและการเรียกใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ดัชนีและการเรียกใช้งาน”
get, set และ invoke คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ดัชนีและการเรียกใช้งาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันตัวดำเนินการ
- ตัวดำเนินการเปรียบเทียบ
- ดัชนีและการเรียกใช้งาน
- แนวปฏิบัติที่ดี