Overload کردن عملگر در برنامه نویسی کاتلین

4 سال پیش

Overload کردن عملگر در برنامه نویسی کاتلین

در این درس از مجموعه درس های آموزش برنامه نویسی سایت سورس باران، با Overload کردن عملگر در برنامه نویسی کاتلین آشنا خواهید شد.

هنگامی که از عملگر در برنامه نویسی کاتلین استفاده می کنید، تابع عضو مربوطه فراخوانی می شود. به عنوان مثال، عبارت a+b در پس‌زمینه به(a.plus(b ترجمه می‌شود.

fun main(args: Array<String>) {
    val a = 5
    val b = 10

    print(a.plus(b)) // print(a+b)
}

 

خروجی کد به شکل زیر می باشد؛

۱۵

 

در حقیقت، تابع () plus برای کار با انواع پایه مختلف کاتلین و String به صورت overload درآمده است.

// + 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 کردن عملگر + در کاتلین

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)
    }
}

 

خروجی کد به شکل زیر می باشد؛

sum = (5, 1)

 

در این مثال، تابع ()plus  با کلید واژه operator مشخص شده است تا به کامپایلر بگوید عملگر + به صورت overload شده درآمده است.

عبارت p1+p2 در پس‌زمینه به صورت p1.plus(p2) ترجمه می‌شود.

 

مثال: overload کردن عملگر — در کاتلین

در ایننجا با مثالی از overload کردن عملگر– آشنا خواهید شد.  عبارت a- در پس ‌زمینه به صورت ()a.dec ترجمه می ‌شود.

تابع عضو ()dec هیچ آرگومانی نمی ‌گیرد.

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)
}

 

خروجی کد به شکل زیر می باشد؛

point = (2, -9)

 

به خاطر داشته باشید که

operator fun dec() = Point(--x, --y)

 

برابر است با؛

operator fun dec(): Point {
    return Point(--x, --y)
}

 

چند نکته مهم

۱٫ هنگامی که عملگرها را overload می‌کنید، باید سعی کنید هدف اصلی اپراتور را حفظ کنید. مثلا،

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)
}

 

اگرچه برنامه فوق از نظر فنی صحیح و درست است، ما از عملگر + برای کسر خصوصیات متناظر دو شی استفاده کرده ایم که باعث گیج کننده شدن برنامه شده است.

۲٫ برخلاف زبانهایی مانند اسکالا، فقط یک مجموعه خاص از عملگرها می توانند در کاتلین overload شوند.

منبع.

لیست جلسات قبل آموزش برنامه نویسی کاتلین

  1. معرفی کاتلین،  Kotlin Hello World – اولین برنامه کاتلین
  2. انواع متغیرهای پایه در کاتلین
  3. عملگرهای برنامه نویسی کاتلین
  4. تبدیل نوع در برنامه نویسی کاتلین
  5. عبارت ها، گزاره ها و بلوک ها در برنامه نویسی کاتلین
  6. کامنت ها در برنامه نویسی کاتلین
  7. ورودی / خروجی پایه در برنامه نویسی کاتلین
  8. عبارت if در برنامه نویسی کاتلین
  9. عبارت when در برنامه نویسی کاتلین
  10. حلقه های while و do … while در برنامه نویسی کاتلین
  11. حلقه for در برنامه نویسی کاتلین
  12. عبارت break در برنامه نویسی کاتلین
  13. عبارت continue در برنامه نویسی کاتلین
  14. توابع در برنامه نویسی کاتلین
  15. فراخوانی تابع میانوندی در برنامه نویسی کاتلین
  16. آرگومان ‌های پیش ‌فرضآرگومان ‌های پیش ‌فرض و نام ‌دار در برنامه نویسی کاتلین
  17. توابع بازگشتی در برنامه نویسی کاتلین
  18. کلاس و شی در برنامه نویسی کاتلین
  19. سازنده ها در برنامه نویسی کاتلین
  20. Getter ها و Setter ها در برنامه نویسی کاتلین
  21. وراثت در برنامه نویسی کاتلین 
  22. مادیفایرهای نمایانی در برنامه نویسی کاتلین
  23. کلاس مجرد در برنامه نویسی کاتلین
  24. اینترفیس های برنامه نویسی کاتلین
  25. کلاس‌ های تودرتو و داخلی در برنامه نویسی کاتلین
  26. کلاس داده در برنامه نویسی کاتلین 
  27. کلاس ‌های Sealed در برنامه نویسی کاتلین
  28. اعلان ها و عبارات شی در برنامه نویسی کاتلین
  29. اشیا Companion در برنامه نویسی کاتلین
  30. تابع بسط ‌در برنامه نویسی کاتلین
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه