در این بخش از مقاله آموزش کاتلین به بررسی شیوه استفاده از نمادگذاری میانوندی برای فراخوانی تابعها خواهیم پرداخت و مثالهایی را در این خصوص مورد بررسی قرار میدهیم. پیش از آن که در مورد شیوه ایجاد یک تابع با نمادگذاری میانوندی توضیح دهیم، به بررسی دو تابع رایج با این طرز نشانهگذاری میپردازیم.
زمانی که از عملگرهای || و && استفاده میکنیم، کامپایلر به ترتیب به دنبال تابعهای or و and میگردد و آنها را در پسزمینه فراخوانی میکند. این دو تابع از نمادگذاری میانوندی پشتیبانی میکنند.
مثالی از تابع 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 نشانهگذاری شده باشد.
مثالی از تابع تعریف شده کاربر با نمادگذاری میانوندی
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 یک تابع میانوندی است که یک ساختار هرمی ایجاد میکند. این تابع یک تابع عضو کلاس Structure است که تنها یک پارامتر از نوع Int میگیرد و با کلیدواژه infix آغاز میشود.
تعداد ردیفهای هرم به آرگومانهای ارسالی به تابع بستگی دارد.