سربارگذاری عملگرها
Kotlin Overloading operators
وقتی در زبان کاتلین علمگری مثل + را فرخوانی میکنید در واقع توابع معادل را صدا میزنید. مثلاً وقتی مینویسید a+b، در پشتصحنه (a.plus(b فراخوانی میشود:
1 2 3 4 5 | fun main(args: Array<String>) { val a = 5 val b = 10 print(a.plus(b)) // print(a+b) } |
خروجی:
1 | 15 |
در حقیقت، تابع ()plus سربارگذاری (Overload) شده تا با انواع مختلفی در کاتلین بتوانند از این تابع استفاده کنند.
1 2 3 4 5 6 7 8 9 | // + operator for basic types operator fun plus(other: Byte): Int operator fun plus(other: Short): Int operator fun plus(other: Int): Int operator fun plus(other: Long): Long operator fun plus(other: Float): Float operator fun plus(other: Double): Double // for string concatenation operator fun String?.plus(other: Any?): String |
در همه زبانها از جمله کاتلین این امکان وجود دارد که عملگر خاصی را سربارگذاری کنید تا به آن صورتی که شما دوست دارید خروجی را تولید کند.
مثالی از سربارگذاری عملگر + در کاتلین
1 2 3 4 5 6 7 8 9 10 11 12 13 | fun main(args: Array<String>) { val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = (${sum.x}, ${sum.y})") } class Point(val x: Int = 0, val y: Int = 10) { // overloading plus function operator fun plus(p: Point) : Point { return Point(x + p.x, y + p.y) } } |
خروجی:
1 | sum = (5, 1) |
همانطور که میبینید، تابع ()plus را با کلیدواژه operator علامت زدهایم تا به کامپایلر بفهمانیم که عملگر + را سربارگذاری کردهایم. اکنون وقتی p1+p2 را صدا میزنید در پشتصحنه (p1.plus(p2 فراخوانی میشود.
مثالی از سربارگذاری عملگر — در کاتلین
حالا بیایید عملگر — که یک عملگر یکانی است را overload کنیم. وقتی a– را فرا میخوانید در واقع تابع ()a.dec صدا زده میشود. این تابع هیچ آرگومانی نمیگیرد.
1 2 3 4 5 6 7 8 | fun main(args: Array<String>) { var point = Point(3, -8) --point println("point = (${point.x}, ${point.y})") } class Point(var x: Int = 0, var y: Int = 10) { operator fun dec() = Point(--x, --y) } |
خروجی:
1 | point = (2, -9) |
وقتی عملگری را سربارگذاری میکنید، باید تلاش کنید عملکردِ عملگر اصلی را پابرجا نگه دارید.
Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators Kotlin Overloading operators