توابع تو در تو در کاتلین (Nested Functions)
توابعی که داخل هم نوشته شوند و محلی باشند
یکی از قابلیتهای جالب کاتلین این است که به شما این امکان را میدهد تا بتوانید داخل یک تابع، تابع (یا توابع) دیگری نیز تعریف کنید! و از آن توابع تعریف شده بتوانید در داخل همان بلوک کد (داخل تابع اصلی یا پدر) استفاده کنید.
نحوه انجام کار
به مثال زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fun main() { test() } fun test() { fun welcome() { println("Welcome to FuLLKade") } welcome() } // خروجی: // Welcome to FuLLKade |
حالا به مثال زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
fun main() { test("Welcome to FuLLKade") } fun test(str: String) { fun welcome() { println(str) } welcome() } // خروجی: // Welcome to FuLLKade |
و در نهایت به مثال زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
fun main() { test("Welcome to FuLLKade") } fun test(str: String) { fun welcome() { fun bye(t: String) { println(t) } println(str) bye("bye bye") } welcome() } // خروجی: // Welcome to FuLLKade // bye bye |
در هر سه این مثال مشاهده میکنید اگر تابعی را داخل محدودهی یک تابع دیگر تعریف کنیم؛ آن تابع در آن محدوده قابل شناسایی خواهد بود و همچنین متغیرهایی که قبل از تعریف تابع وجود داشته باشند در داخل تابع داخلی نیز وجود خواهند داشت و در نهایت میتوان برای آن نیز پارامتری را هم ارسال کرد.
تابع داخلی یا تو در تو، بایستی قبل از استفاده شدن تعریف شود؛ چرا که بدنهی یک تابع خط به خط اجرا میشود و همانند بدنهی فایل نیست که ابتدا توابع تعریف شود و سپس تابع main فراخوانی شود.
نظرات ثبت شده بدون دیدگاه