قبل از آموزش ساخت توابعی با قابلیت 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 آغاز میشود. تعداد ردیفهای هرم بستگی به آرگومانی دارد که به تابع پاس داده میشود. در اینجا آرگومان ۴ دادهایم و در خروجی ۴ سطر چاپ شده است.
1 دیدگاه
ممنون ولی این قسمت خیلی ناخوانا توضیح داده شده است