آرگومانهای پیشفرض در کاتلین
در کاتلین میتوان برای پارامترهای تابع مقادیر پیشفرض تعیین کرد تا در هنگام فرخوانی، اجباری به وارد کردن مقدار آرگومانها نباشد. اگر تابعی با آرگومانهایش فرخوانی شود، آن آرگومانها به عنوان پارامتر استفاده میشوند. اما اگر تابع را بدون آرگومانهایش فرخوانی کنیم، آرگومانهای پیشفرض به عنوان مقادیر پارامترها در نظر گرفته میشوند.
طرز کار آرگومانهای پیشفرض
حالت اول: همهی آرگومانها ارسال میشوند:
تابع ()foo دو آرگومان میگیرد که برای هردویشان مقادیر پیشفرض تعیین شده است. با این حال تابع ()foo با پاس دادن مقادیر فراخوانی میشود. در چنین حالتی مقادیر پیشفرض در نظر گرفته نمیشوند و از مقادیر ارسال شده استفاده خواهد شد.
حالت دوم: بعضی از آرگومانها ارسال نمیشوند:
اینجا فقط آرگومان اول را ارسال کردهایم. بنابراین مقدار آرگومان اول یعنی letter برابر y است ولی چون برای آرگومان دوم چیزی وارد نکردهایم همان مقدار پیشفرض یعنی ۱۵ در نظر گرفته میشود.
حالت سوم: هیچ آرگومانی ارسال نمیشود:
اینجا تابع ()foo را بدون ارسال هیچ آرگومانی فرخوانی کردهایم. همانطور که حدس زدهاید مقادیر پیشفرض تابع استفاده خواهد شد.
مثالی از آرگومانهای پیشفرض در کاتلین
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. ۵ 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) }
به تابع main نگاه کنید. ما تلاش کردهایم تابع ()displayBorder را فرخوانی کنیم طوری که مقدار ۵ برای آرگومان دوم تابع ارسال شود و مقدار آرگومان اول هم به همان حالت پیشفرض باقی بماند. اما این کار اشتباه است و با خطا مواجه میشود چون کامپایلر تصور میکند که شما عدد ۵ که از نوع Int است را برای آرگومان اول تابع که از نوع Char است ارسال کردهاید که طبیعتاً به خاطر ناهمخوانی نوع با خطا مواجه میشود (خدا را شکر که ناهمخوانی نوع وجود داشت و الا مشکل پیچیدهتر میشد. همین چیزهای به ظاهر ساده است که فرایند دیباگینگ را واقعاً پیچیده و زمانبر میکند.) برای حل این مشکل، کاتلین آرگومانهای نامگذاری شده را پیش پای ما میگذارد.
آرگومانهای نامگذاری شده در کاتلین
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) } } fun main(args: Array<String>) { displayBorder(length = 5) }
خروجی:
=====
در مثال بالا هنگام فرخوانی تابع، نام پارامتر را هم صریحاً آوردهایم تا کامپایلر بداند منظور ما کدام آرگومان است و موقعیت و ترتیب فرخوانی را مد نظر قرار ندهد.
آرگومان اول از مقدار پیشفرض = استفاده میکند.
1 دیدگاه
خیلی جامع و کامل بود ممنون خیلی خیلی داره خوشم میاد از کاتلین