Overload کردن عملگر در برنامه نویسی کاتلین
Overload کردن عملگر در برنامه نویسی کاتلین
در این درس از مجموعه درس های آموزش برنامه نویسی سایت سورس باران، با Overload کردن عملگر در برنامه نویسی کاتلین آشنا خواهید شد.
هنگامی که از عملگر در برنامه نویسی کاتلین استفاده می کنید، تابع عضو مربوطه فراخوانی می شود. به عنوان مثال، عبارت a+b در پسزمینه به(a.plus(b ترجمه میشود.
1 2 3 4 5 6 |
fun main(args: Array<String>) { val a = 5 val b = 10 print(a.plus(b)) // print(a+b) } |
خروجی کد به شکل زیر می باشد؛
1 |
15 |
در حقیقت، تابع () plus برای کار با انواع پایه مختلف کاتلین و String به صورت overload درآمده است.
1 2 3 4 5 6 7 8 9 10 |
// + 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 |
همچنین می توانید از طریق overload کردن تابع های متناظر، نحوه کار اپراتور را برای اشیا را تعریف کنید. به عنوان مثال، شما باید نحوه عملگر + را از طریق overload کردن تابع ()plus برای اشیای مختلف تعریف کنیم.
مثال: overload کردن عملگر + در کاتلین
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 مشخص شده است تا به کامپایلر بگوید عملگر + به صورت overload شده درآمده است.
عبارت p1+p2 در پسزمینه به صورت p1.plus(p2) ترجمه میشود.
مثال: overload کردن عملگر — در کاتلین
در ایننجا با مثالی از overload کردن عملگر– آشنا خواهید شد. عبارت a- در پس زمینه به صورت ()a.dec ترجمه می شود.
تابع عضو ()dec هیچ آرگومانی نمی گیرد.
1 2 3 4 5 6 7 8 9 10 |
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) |
به خاطر داشته باشید که
1 |
operator fun dec() = Point(--x, --y) |
برابر است با؛
1 2 3 |
operator fun dec(): Point { return Point(--x, --y) } |
چند نکته مهم
1. هنگامی که عملگرها را overload میکنید، باید سعی کنید هدف اصلی اپراتور را حفظ کنید. مثلا،
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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(x - p.x, y - p.y) } |
اگرچه برنامه فوق از نظر فنی صحیح و درست است، ما از عملگر + برای کسر خصوصیات متناظر دو شی استفاده کرده ایم که باعث گیج کننده شدن برنامه شده است.
2. برخلاف زبانهایی مانند اسکالا، فقط یک مجموعه خاص از عملگرها می توانند در کاتلین overload شوند.
لیست جلسات قبل آموزش برنامه نویسی کاتلین
- معرفی کاتلین، Kotlin Hello World – اولین برنامه کاتلین
- انواع متغیرهای پایه در کاتلین
- عملگرهای برنامه نویسی کاتلین
- تبدیل نوع در برنامه نویسی کاتلین
- عبارت ها، گزاره ها و بلوک ها در برنامه نویسی کاتلین
- کامنت ها در برنامه نویسی کاتلین
- ورودی / خروجی پایه در برنامه نویسی کاتلین
- عبارت if در برنامه نویسی کاتلین
- عبارت when در برنامه نویسی کاتلین
- حلقه های while و do … while در برنامه نویسی کاتلین
- حلقه for در برنامه نویسی کاتلین
- عبارت break در برنامه نویسی کاتلین
- عبارت continue در برنامه نویسی کاتلین
- توابع در برنامه نویسی کاتلین
- فراخوانی تابع میانوندی در برنامه نویسی کاتلین
- آرگومان های پیش فرضآرگومان های پیش فرض و نام دار در برنامه نویسی کاتلین
- توابع بازگشتی در برنامه نویسی کاتلین
- کلاس و شی در برنامه نویسی کاتلین
- سازنده ها در برنامه نویسی کاتلین
- Getter ها و Setter ها در برنامه نویسی کاتلین
- وراثت در برنامه نویسی کاتلین
- مادیفایرهای نمایانی در برنامه نویسی کاتلین
- کلاس مجرد در برنامه نویسی کاتلین
- اینترفیس های برنامه نویسی کاتلین
- کلاس های تودرتو و داخلی در برنامه نویسی کاتلین
- کلاس داده در برنامه نویسی کاتلین
- کلاس های Sealed در برنامه نویسی کاتلین
- اعلان ها و عبارات شی در برنامه نویسی کاتلین
- اشیا Companion در برنامه نویسی کاتلین
- تابع بسط در برنامه نویسی کاتلین
دیدگاه شما