آرگومان پیشفرض در کاتلین
در زبان کاتلین، میتوان در تعریف تابع، مقادیر پیشفرضی برای پارامترها ارائه کرد. اگر تابع با آرگومانهای ارسالی فراخوانی شود، این آرگومانها به عنوان پارامتر استفاده میشوند. با این حال، اگر تابع بدون ارسال پارامتر (ها) فراخوانی شود، آرگومانهای پیشفرض مورد استفاده قرار میگیرند.
طرز کار آرگومان پیشفرض در کاتلین چگونه است؟
در این بخش با طرز کار آرگومانهای پیشفرض در حالتهای مختلف آشنا میشویم.
حالت اول: همه آرگومانها ارسال شوند
تابع ()foo دو آرگومان میگیرد. این آرگومانها دارای مقادیر پیشفرض هستند. با این حال در برنامه فوق، تابع ()foo با ارسال هر دو آرگومان فراخوانی شده است. از این رو آرگومانهای پیشفرض مورد استفاده قرار نگرفتهاند. درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘x’ و 2 هستند.
حالت دوم: بعضی آرگومانها به تابع ارسال نشوند
در این حالت فرض میکنیم تنها آرگومان اول به تابع ()foo ارسال شده باشد. در این صورت آرگومان اول از مقدار ارسالی به تابع استفاده میکند. با این حال آرگومان دوم، یعنی number مقدار پیشفرض را میگیرد، زیرا آرگومان دوم در طی فراخوانی تابع ارسال نشده است. درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘y’ و 15 هستند.
حالت سوم: هیچ آرگومانی ارسال نشود
در این حالت تابع ()foo بدون ارسال هیچ آرگومانی فراخوانی میشود. از این رو در هر دو مورد از مقادیر پیشفرض استفاده میشود. بدین ترتیب درون تابع ()foo مقادیر letter و number به ترتیب برابر با ‘a’ و 15 هستند.
مثالی از آرگومان پیشفرض در کاتلین
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) }
}
fun main(args: Array<String>) { println("Output when no argument is passed:") displayBorder()
println("\n\n'*' is used as a first argument.") println("Output when first argument is passed:") displayBorder('*')
println("\n\n'*' is used as a first argument.") println("5 is used as a second argument.") println("Output when both arguments are passed:") displayBorder('*', 5)
}
خروجی برنامه فوق به صورت زیر است:
Output when no argument is passed: =============== '*' is used as a first argument. Output when first argument is passed: *************** '*' is used as a first argument. 5 is used as a second argument. Output when both arguments are passed: *****
آرگومان نامدار در کاتلین
پیش از آن که در مورد آرگومان نامدار در کاتلین صحبت کنیم، یک تغییر کوچک را در کد فوق مورد بررسی قرار میدهیم.
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) }
}
fun main(args: Array<String>) { displayBorder(5)
}
در برنامه فوق تلاش میکنیم تا آرگومان دوم را به تابع ()displayBorder ارسال کنیم و از آرگومان پیشفرض برای آرگومان اول استفاده میکنیم. با این حال، این کد تولید خطا خواهد کرد. دلیل این امر آن است که کامپایلر فکر میکند که ما تلاش میکنیم مقدار 5 (با نوع Int) را به یک کاراکتر (از نوع Char) ارسال کنیم. برای حل این مشکل باید از آرگومانهای نامدار استفاده کنیم:
مثالی از آرگومان نامدار در کاتلین
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) }
}
fun main(args: Array<String>) { displayBorder(length = 5)
}
خروجی برنامه فوق به صورت زیر است:
=====
در برنامه فوق، از یک آرگومان نامدار به صورت length = 5 برای مشخص ساختن این نکته استفاده کردهایم که پارامتر length در تعریف تابع باید این مقدار را بگیرد. توجه کنید که در این حالت، ترتیب آرگومان اهمیتی ندارد.
بدین ترتیب آرگومان نخست به نام character از مقدار پیشفرض ‘=’ در برنامه استفاده میکند.