آموزش زبان کاتلین – درس ۱۵ (توابع infix)

نویسنده : سید ایوب کوکبی ۴ آذر ۱۳۹۷

آموزش زبان کاتلین – درس 15 (توابع infix)

قبل از آموزش ساخت توابعی با قابلیت infix notation ابتدا دو تابع مهم کاتلین که این قابلیت را دارند بررسی می‌کنیم. منظورم توابع || و && است که به کرات در کدهای خود از آن‌ها استفاده می‌کنید. به هنگام استفاده از توابع، کامپایلر در پس زمینه توابع or و and را فرخوانی می‌کند. مثلاً کد پایین را در نظر بگیرید:

fun main(args: Array<String>) {
    val a = true
    val b = false
    var result: Boolean

    result = a or b // a.or(b)
    println("result = $result")

    result = a and b // a.and(b)
    println("result = $result")
}

خروجی:

result = true
result = false

در مثال بالا a or b به جای فرخوانی (a.or(b و a and b به جای (a.and(b استفاده شده است. این کار مجاز است چرا که دو تابع یاد شده از infix notation حمایت می‌کنند.

چگونگی ساخت یک تابع infix notation در کاتلین

زمانی می‌توان تابعی را به صورت infix فرخوانی کرد که شرابط زیر را داشته باشد:

  • یک member function (یا extension function) باشد؛
  • تنها یک پارامتر داشته باشد؛
  • با کلیدواژۀ infix علامت خورده باشد.

مثال:

class Structure() {

    infix fun createPyramid(rows: Int) {
        var k = 0
        for (i in 1..rows) {
            k = 0
            for (space in 1..rows-i) {
                print("  ")
            }
            while (k != 2*i-1) {
                print("* ")
                ++k
            }
            println()
        }
    }
}

fun main(args: Array<String>) {
    val p = Structure()
    p createPyramid 4       // p.createPyramid(4)
}

خروجی:

      * 
    * * * 
  * * * * * 
* * * * * * *

در این مثال ()createPyramid یک تابع infix است که ساختاری هرمی در خروجی چاپ می‌کند. این تابع عضوی از کلاس Structure است، فقط یک پارامتر از نوع Int می‌گیرد و با کلیدواژۀ infix آغاز می‌شود. تعداد ردیف‌های هرم بستگی به آرگومانی دارد که به تابع پاس داده می‌شود. در اینجا آرگومان ۴ داده‌ایم و در خروجی ۴ سطر چاپ شده است.

بخوانید  آموزش زبان کاتلین - درس 4 (تبدیل نوع)

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *