آموزش زبان کاتلین – درس ۱۶ (آرگومان‌های نام‌گذاری شده و پیش‌فرض)

نویسنده : سید ایوب کوکبی ۶ آذر ۱۳۹۷

آموزش زبان کاتلین – درس 16 (آرگومان‌های نام‌گذاری شده و پیش‌فرض)

آرگومان‌های پیش‌فرض در کاتلین

در کاتلین می‌توان برای پارامترهای تابع مقادیر پیش‌فرض تعیین کرد تا در هنگام فرخوانی، اجباری به وارد کردن مقدار آرگومان‌ها نباشد. اگر تابعی با آرگومان‌هایش فرخوانی شود، آن آرگومان‌ها به عنوان پارامتر استفاده می‌شوند. اما اگر تابع را بدون آرگومان‌هایش فرخوانی کنیم، آرگومان‌های پیش‌فرض به عنوان مقادیر پارامترها در نظر گرفته می‌‌شوند.

طرز کار آرگومان‌های پیش‌فرض

حالت اول: همه‌ی آرگومان‌ها ارسال می‌شوند:

آرگومان‌های پیش‌فرض در کاتلین

تابع ()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 است ارسال کرده‌اید که طبیعتاً به خاطر ناهمخوانی نوع با خطا مواجه می‌شود (خدا را شکر که ناهمخوانی نوع وجود داشت و الا مشکل پیچیده‌تر می‌شد. همین چیزهای به ظاهر ساده است که فرایند دیباگینگ را واقعاً پیچیده و زمان‌بر می‌کند.) برای حل این مشکل، کاتلین آرگومان‌های نام‌گذاری شده را پیش پای ما می‌گذارد.

بخوانید  آموزش زبان کاتلین - درس 2 (متغیرها و انواع داده‌ اولیه)

آرگومان‌های نام‌گذاری شده در کاتلین

fun displayBorder(character: Char = '=', length: Int = 15) {
    for (i in 1..length) {
        print(character)
    }
}

fun main(args: Array<String>) {
    displayBorder(length = 5)
}

خروجی:

=====

در مثال بالا هنگام فرخوانی تابع، نام پارامتر را هم صریحاً آورده‌ایم تا کامپایلر بداند منظور ما کدام آرگومان است و موقعیت و ترتیب فرخوانی را مد نظر قرار ندهد.

آرگومان اول از مقدار پیش‌فرض = استفاده می‌کند.

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *