ฟังก์ชันตัวดำเนินการ
โอเวอร์โหลด plus, minus และอื่น ๆ
ฟังก์ชันตัวดำเนินการ เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
การโอเวอร์โหลดตัวดำเนินการคืออะไร
การโอเวอร์โหลดตัวดำเนินการ ทำให้ชนิดข้อมูลของคุณตอบสนองต่อสัญลักษณ์อย่าง + หรือ - ได้ คุณกำหนดฟังก์ชันด้วยตัวปรับแต่ง operator และชื่อเฉพาะ
data class Point(val x: Int, val y: Int) {
operator fun plus(o: Point) = Point(x + o.x, y + o.y)
}
fun main() {
println(Point(1, 2) + Point(3, 4))
}คีย์เวิร์ด operator
ตัวปรับแต่ง operator บอกคอมไพเลอร์ว่าฟังก์ชันนี้รองรับตัวดำเนินการ หากไม่มีตัวปรับแต่งนี้ การเรียกใช้ a + b จะไม่ทำงาน
data class Money(val amount: Int) {
operator fun plus(o: Money) = Money(amount + o.amount)
}
fun main() {
println(Money(5) + Money(3))
}ชื่อที่เป็นแบบแผน
ตัวดำเนินการแต่ละตัวจะจับคู่กับชื่อฟังก์ชันที่กำหนดไว้ตายตัว ได้แก่ plus สำหรับ +, minus สำหรับ -, times สำหรับ *, div สำหรับ / และ rem สำหรับ %
data class Vec(val n: Int) {
operator fun times(k: Int) = Vec(n * k)
}
fun main() {
println(Vec(4) * 3)
}การลบและการคูณ
คุณสามารถกำหนดตัวดำเนินการหลายตัวให้กับชนิดข้อมูลเดียวกันได้
data class Point(val x: Int, val y: Int) {
operator fun minus(o: Point) = Point(x - o.x, y - o.y)
operator fun times(k: Int) = Point(x * k, y * k)
}
fun main() {
println(Point(5, 5) - Point(1, 2))
println(Point(2, 3) * 2)
}ตัวดำเนินการเอกภาค
การลบแบบเอกภาคใช้ unaryMinus การบวกแบบเอกภาคใช้ unaryPlus และ not รองรับตัวดำเนินการ !
data class Temp(val c: Int) {
operator fun unaryMinus() = Temp(-c)
}
fun main() {
println(-Temp(10))
}การเพิ่มค่าและลดค่า
inc รองรับ ++ และ dec รองรับ -- ทั้งสองตัวจะคืนค่าใหม่ที่มีชนิดข้อมูลเดียวกัน
data class Counter(val n: Int) {
operator fun inc() = Counter(n + 1)
}
fun main() {
var c = Counter(0)
c++
println(c.n)
}การกำหนดค่าแบบผสม
plusAssign รองรับ += สำหรับตัวรับที่เปลี่ยนแปลงได้ หากมีเพียง plus อยู่เท่านั้น += จะกำหนดค่าให้ตัวแปรใหม่แทน
class Bag {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val bag = Bag()
bag += "apple"
println(bag.items)
}ตัวดำเนินการกับชนิดข้อมูลต่างกัน
ชนิดข้อมูลของพารามิเตอร์ไม่จำเป็นต้องตรงกับชนิดข้อมูลของตัวรับ ในตัวอย่างนี้ การคูณมาตราส่วนของจุดด้วยจำนวนเต็มจะคืนค่าเป็นจุด
data class Size(val w: Int, val h: Int) {
operator fun times(factor: Int) = Size(w * factor, h * factor)
}
fun main() {
println(Size(2, 3) * 4)
}การใช้เป็นฟังก์ชันส่วนขยาย
สามารถกำหนดตัวดำเนินการเป็นฟังก์ชันส่วนขยายได้ แม้แต่กับชนิดข้อมูลที่คุณไม่ได้เป็นเจ้าของ
data class Point(val x: Int, val y: Int)
operator fun Point.plus(o: Point) = Point(x + o.x, y + o.y)
fun main() {
println(Point(1, 1) + Point(2, 2))
}การต่อโซ่ตัวดำเนินการ
ตัวดำเนินการที่โอเวอร์โหลดจะประกอบกันได้เหมือนตัวดำเนินการในตัว และเคารพลำดับความสำคัญตามปกติ
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
val r = N(2) + N(3) * N(4)
println(r.v)
}ชนิดข้อมูลที่ส่งคืนเป็นอิสระ
ตัวดำเนินการสามารถส่งคืนชนิดข้อมูลใดก็ได้ แต่การส่งคืนชนิดข้อมูลเดิมจะทำให้การใช้งานเข้าใจง่ายและต่อโซ่ได้
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับฟังก์ชันตัวดำเนินการของคุณ
สรุปทบทวน
คุณได้เรียนรู้เกี่ยวกับ ฟังก์ชันตัวดำเนินการ:
- กำกับฟังก์ชันด้วย
operatorและชื่อที่เป็นแบบแผน (plus,minus,timesและอื่น ๆ) - รองรับตัวดำเนินการเอกภาค การเพิ่มค่า และการกำหนดค่าแบบผสม
- ตัวดำเนินการสามารถเป็นสมาชิกหรือฟังก์ชันส่วนขยายได้
- การส่งคืนชนิดข้อมูลเดิมทำให้การต่อโซ่เข้าใจได้ง่าย
data class P(val x: Int) {
operator fun plus(o: P) = P(x + o.x)
}
fun main() {
println((P(2) + P(3)).x)
}คำถามที่พบบ่อย
บทเรียน “ฟังก์ชันตัวดำเนินการ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชันตัวดำเนินการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันตัวดำเนินการ”
โอเวอร์โหลด plus, minus และอื่น ๆ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชันตัวดำเนินการ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันตัวดำเนินการ
- ตัวดำเนินการเปรียบเทียบ
- ดัชนีและการเรียกใช้งาน
- แนวปฏิบัติที่ดี