یک پیام تولد در Kotlin ایجاد کنید

در این کد لبه شما یک برنامه کوتاه Kotlin ایجاد می کنید که پیام تولد را با کیک و بنر تولد چاپ می کند.

پیش نیازها

  • نحوه باز کردن و ویرایش کد در https://try.kotlinlang.org/ ، یک ابزار برنامه نویسی مبتنی بر مرورگر Kotlin.
  • "Hello world!" برنامه از برنامه Write your first Kotlin codelab.
  • نحوه استفاده از println() برای نوشتن متن در کنسول ویرایشگر کد آنلاین Kotlin.

آنچه خواهید آموخت

  • نحوه چاپ متن پیچیده تر از برنامه
  • نحوه انجام ریاضیات پایه در کاتلین و ذخیره نتایج در متغیرها برای استفاده بعدی.
  • نحوه ایجاد تابعی برای چاپ چندین بار یک رشته
  • چگونه یک حلقه ایجاد کنیم که یک قطعه متن را چندین بار چاپ کند.

آنچه خواهید ساخت

  • شما یک برنامه کوتاه ایجاد خواهید کرد که می توانید از آن برای چاپ پیام های تولد، یک تصویر متنی از یک کیک و یک بنر استفاده کنید.

آنچه شما نیاز دارید

  • یک رایانه با دسترسی به اینترنت و یک مرورگر وب مدرن، مانند آخرین نسخه Chrome .

کد شروع خود را تنظیم کنید

  1. در مرورگر خود، https://try.kotlinlang.org/ را باز کنید. این یک ابزار برنامه نویسی Kotlin مبتنی بر مرورگر را باز می کند.
  2. در کاوشگر فایل، مطمئن شوید که Examples > Hello, world! > ساده ترین نسخه > SimplestVersion.kt انتخاب شده است و ویرایشگر کد Hello world! برنامه
  3. اگر کد را با تغییرات قبلی خود مشاهده کردید، اشکالی ندارد. با کلیک بر روی پیکان Undo در کنار نام فایل، وضعیت اولیه برنامه را بازیابی کنید.

  1. در تعریف fun main() ، آرگومان args: Array<String> زیرا قرار نیست از آن استفاده کنید. در کدی که به طور پیش فرض در ویرایشگر داده شده است، ارائه شده است، اما داشتن آن اجباری نیست. خط اول برنامه شما باید شبیه کد زیر باشد.
fun main(){
  1. در داخل تابع fun main() جایگزین "Hello, world!" متن با "Happy Birthday, Rover!" .
  2. در زیر آن، هنوز در داخل بریس‌های فرفری، دو خط دیگر برای چاپ اضافه کنید: "You are already 5!" و "5 is the very best age to celebrate!".

کد تمام شده شما باید شبیه این باشد.

fun main() {
    println("Happy Birthday, Rover!")
    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. کد خود را اجرا کنید
  2. بررسی کنید که تب Console تولد مبارک، روور را نشان دهد! و زیر آن، شما در حال حاضر 5 ساله هستید! و 5 بهترین سن برای جشن گرفتن است!

کیک تولد اضافه کنید

پیام تولد به عکسی با موضوع تولد نیاز دارد. مثل یک کیک می‌توانید با چاپ خطوط اضافی که از حروف و علامت‌های روی صفحه‌کلید و println() استفاده می‌کنند، یک کیک به پیام تولد خود اضافه کنید.

از کد راه حل بالا ادامه دهید.

  1. در کد خود، بین دو عبارت println() برای Happy Birthday و You are already 5 سال دارید، خطوط زیر را از دستورات چاپ اضافه کنید، همانطور که در زیر نشان داده شده است. این یک کیک ایجاد می کند. آخرین دستور println() هیچ متنی بین نقل قول ها ندارد که یک خط خالی چاپ می کند.
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    println("")

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

// This is a comment line
// This is another comment
  1. قبل از چاپ کیک نظر بدهید: // Let's print a cake! .
  2. قبل از چاپ خط خالی یک نظر اضافه کنید: // This prints an empty line .

کد شما باید شبیه کد زیر باشد.

fun main() {
    println("Happy Birthday, Rover!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. کد خود را اجرا کنید و خروجی باید مانند تصویر زیر باشد.

سن Rover را در یک متغیر ذخیره کنید

  1. در کد تمام شده خود تا کنون، توجه کنید که چگونه همان عدد سنی را دو بار تکرار می کنید.

به جای تکرار این عدد، می توانید آن را در یک مکان به عنوان یک متغیر ذخیره کنید. مثل این است که شماره خود را در یک جعبه قرار دهید و نامی برای آن انتخاب کنید. سپس هر زمان که به مقدار نیاز داشتید می توانید از نام این متغیر استفاده کنید. و اگر سن تغییر کند، فقط باید برنامه خود را در یک مکان تغییر دهید. با تغییر متغیر، در هر جایی که از متغیر استفاده می شود، مقدار صحیح سن چاپ می شود.

  1. در برنامه خود به عنوان اولین خط کد داخل تابع main( ) کد زیر را اضافه کنید تا متغیری به نام age با مقدار 5 ایجاد کنید، مانند شکل زیر. (شما باید این خط را قبل از دستور println() قرار دهید).
val age = 5

این خط یعنی:

  • val یک کلمه خاص است که توسط Kotlin استفاده می شود و کلمه کلیدی نامیده می شود که نشان می دهد آنچه در زیر می آید نام یک متغیر است.
  • age نام متغیر است.
  • = باعث می شود که مقدار age (در سمت چپ آن) با مقدار سمت راست آن یکسان باشد. در ریاضیات، از یک علامت مساوی استفاده می شود تا ثابت شود که مقادیر در هر طرف یکسان هستند. در کاتلین، بر خلاف ریاضیات، از یک علامت مساوی برای اختصاص مقدار سمت راست به متغیر نام‌گذاری شده در سمت چپ استفاده می‌شود.

یک توسعه دهنده آن را به این صورت می گوید: این خط متغیری به نام age را که مقدار آن 5 است را اعلام می کند.

برای استفاده از یک متغیر در داخل یک عبارت چاپی، باید آن را با نمادهایی احاطه کنید که به سیستم می‌گویند آنچه بعداً می‌آید متن نیست، بلکه یک متغیر است. به جای چاپ متن، سیستم باید مقدار متغیر را چاپ کند. شما این کار را با قرار دادن متغیر خود در داخل پرانتزهای فرفری قبل از علامت دلار انجام می دهید، مانند مثال زیر.

${variable}
  1. در کد خود، مطابق شکل زیر، عدد 5 را در هر دو عبارت چاپی با متغیر age جایگزین کنید.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
  1. کد خود را اجرا کنید و هر دو پیام باید سن یکسانی داشته باشند.
  2. مقدار متغیر را به چیزی متفاوت تغییر دهید. به عنوان مثال، می توانید سن روور را به جای سال ها به روز نشان دهید. برای انجام این کار، با حذف سال های کبیسه، سن را در 365 ضرب کنید. همانطور که در زیر نشان داده شده است، می توانید این محاسبه را درست هنگام ایجاد متغیر انجام دهید.
val age = 5 * 365
  1. کد خود را دوباره اجرا کنید و توجه کنید که هر دو پیام اکنون سن را بر حسب روز نشان می دهند.

  1. [اختیاری] متن پیام های چاپی را تغییر دهید تا با روزها بهتر کار کند. به عنوان مثال، آنها را برای خواندن تغییر دهید:
You are already 1825 days old!
1825 days old is the very best age to celebrate!

متن را در یک متغیر قرار دهید

شما نه تنها می توانید اعداد را در متغیرها، بلکه در متن نیز قرار دهید.

  1. در زیر متغیر age ، یک متغیر به name برای نام شخص تولد اضافه کنید و مقدار آن را روی "Rover" قرار دهید.
val name = "Rover"
  1. مانند تصویر زیر، نام Rover را در پیام تولد با متغیر جایگزین کنید.
println("Happy Birthday, ${name}!")

و شما می توانید بیش از یک متغیر در یک عبارت چاپی داشته باشید.

  1. همانطور که در زیر نشان داده شده است، Rover را با استفاده از متغیر name به پیام سن اضافه کنید.
println("You are already ${age} days old, ${name}!")

کد تکمیل شده شما باید شبیه به این باشد.

fun main() {
    
    val age = 5 * 365
    val name = "Rover"
    
    println("Happy Birthday, ${name}!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already ${age} days old, ${name}!")
    println("${age} days old is the very best age to celebrate!")
}

تبریک می گویم! اکنون می توانید پیام هایی را با متن ایجاد کنید، گرافیک های ایجاد شده از نمادها، از متغیرها برای ذخیره اعداد و متن استفاده کنید و متن را با استفاده از متغیرها چاپ کنید.

در این کار شما یک بنر تولد ایجاد می‌کنید و سپس یاد می‌گیرید که چگونه آن کد را با استفاده از تکنیک‌های تکرار و استفاده مجدد کد ساده کنید و چرا این چیز خوبی است.

یک بنر تولد شروع کننده ایجاد کنید

  1. در https://try.kotlinlang.org/ ، مکان نما را در جایی داخل کد قرار دهید.
  2. برای باز کردن منوی زمینه کلیک راست کرده و انتخاب همه (Ctrl-A) را انتخاب کنید.
  3. برای حذف تمام کدها، کلید بک اسپیس یا حذف را فشار دهید.
  4. کد زیر را در ویرایشگر کپی کنید.
fun main() {
    println("=======================")
    println("Happy Birthday, Jhansi!")
    println("=======================")
}
  1. برنامه خود را اجرا کنید تا بنر چاپ شده در کنسول را ببینید.
=======================
Happy Birthday, Jhansi!
=======================

یک تابع برای چاپ حاشیه ایجاد کنید

کدی که به تازگی پیست کردید و اجرا کردید تابعی به نام main() است که شامل سه دستور چاپ است. هنگامی که دکمه Run را فشار می دهید، سیستم عملکرد و تمام کدهای داخل آن را اجرا می کند.

برنامه Kotlin شما همیشه باید تابع main() داشته باشد. علاوه بر این، شما می توانید توابع خود را ایجاد و استفاده کنید. درست مانند متغیرها که به شما کمک می‌کنند از تکرار کار جلوگیری کنید، توابع نیز می‌توانند به شما کمک کنند تا چندین بار یک کد را ننویسید. در کد شما، عبارات چاپ بالا و پایین بنر دقیقاً یکسان است. بیایید یک تابع برای چاپ آن حاشیه ها ایجاد و استفاده کنیم.

  1. در ویرایشگر، زیر تابع main() main، یک خط خالی وارد کنید، فقط برای اینکه فضایی برای کار به شما بدهد. سیستم خطوط خالی را نادیده می گیرد، و شما می توانید آنها را در هر جایی که برای سازماندهی کد شما مفید هستند، وارد کنید.
  2. یک تابع ایجاد کنید. همانطور که در زیر نشان داده شده است، با کلمه کلیدی fun شروع کنید، سپس یک نام، printBorder ، یک جفت پرانتز () و یک جفت پرانتز مجعد {} را شروع کنید.
fun printBorder() {}

چند کلمه در مورد نامگذاری توابع

  • توجه کنید که چگونه نام تابع printBorder با یک حرف کوچک و یک فعل شروع می شود. نام توابع تقریباً همیشه با یک حرف کوچک و یک فعل شروع می شود و نام باید توصیف کند که تابع چه کاری انجام می دهد. مانند: print() یا اینجا، printBorder() .
  • همچنین توجه داشته باشید که کلمه دوم داخل نام با حروف بزرگ شروع می شود. این سبک "مورد شتر" نامیده می شود و خواندن نام ها را بسیار آسان می کند. برخی از نمونه‌های نام دیگر drawReallyCoolFancyBorder و printBirthdayMessage هستند.
  1. بریس بسته شدن } تابع printBorder را روی یک خط جدید قرار دهید و یک خط خالی بین دو پرانتز فرفری اضافه کنید تا فضایی برای اضافه کردن کد بیشتری به شما بدهد. وجود پرانتز } روی خط خودش، دیدن پایان تابع را آسان‌تر می‌کند.
  2. در داخل تابع main() main، عبارت print را برای حاشیه کپی کرده و آن را بین پرانتزهای فرفری تابع printBorder() قرار دهید.

تابع printBorder() تمام شده شما باید شبیه این باشد.

fun printBorder() {
    println("=======================")
}

برای استفاده یا فراخوانی یک تابع، از نام آن با پرانتز استفاده کنید. توجه داشته باشید که این روشی است که شما از println() استفاده کرده اید! بنابراین برای استفاده از تابع printBorder ، printBorder() را در هر جایی از کد خود که نیاز دارید فراخوانی کنید.

  1. در تابع main() main، خطوط کدی را که یک خط مرزی را با استفاده از println() چاپ می کنند با فراخوانی تابع printBorder() کنید. کد تمام شده شما باید شبیه این باشد.
fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    println("=======================")
}
  1. کد خود را اجرا کنید تا مطمئن شوید همه چیز مانند قبل کار می کند.

توجه داشته باشید که تغییر به کد برای بهتر یا آسانتر کردن کار با آن بدون تغییر خروجی، " بازسازی " نامیده می شود.

یک الگوی حاشیه را تکرار کنید

با نگاهی به خط مرزی، واقعاً دوباره همان نماد است. بنابراین، به جای گفتن:

"این رشته از 23 علامت را چاپ کنید"

می توان گفت،

"این 1 نماد را 23 بار چاپ کنید".

در کد، این کار را با استفاده از عبارت repeat() انجام می دهید.

  1. در printBorder() از عبارت repeat() برای چاپ علامت مساوی 23 بار استفاده کنید.
  2. به جای استفاده از println() از print() استفاده کنید تا بعد از چاپ هر "=" به خط جدیدی نپرید.

این کد است. شما اکنون یک دستورالعمل برای چاپ علامت مساوی دارید و برای تکرار آن دستورالعمل 23 بار، از عبارت repeat() استفاده می کنید.

fun printBorder() {
    repeat(23) {
        print("=")
    }
}
  • عبارت repeat() با کلمه repeat و سپس () شروع می شود. به این نوع عبارت «حلقه» گفته می‌شود، زیرا شما چندین بار یک کد را تکرار یا حلقه می‌کنید. در ادامه با روش های دیگر ایجاد حلقه ها آشنا خواهید شد.
  • در داخل پرانتز () تعداد تکرارها آمده است،
  • به دنبال آن پرانتزهای مجعد {},
  • و در داخل پرانتزهای مجعد {} ، کد تکرار است.
  1. در printBorder() ، پس از بستن پرانتز } عبارت repeat() که پس از اتمام چاپ خط مرزی، یک دستور println() برای چاپ خط جدید اضافه کنید.

اکنون کد شما باید به این صورت باشد.

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}

کد تابع main() تغییر نمی کند و کل برنامه شما باید به این شکل باشد.=

fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}
  1. کد خود را اجرا کنید خروجی باید مانند قبل باشد، اما این بار فقط با یک بار مشخص کردن علامت "=" توانستید مرز ایجاد کنید!
=======================
Happy Birthday, Jhansi!
=======================

از آرگومان ها برای تغییر مرز استفاده کنید

اگر بخواهید حاشیه هایی بسازید که از نمادهای مختلفی مانند موارد زیر استفاده می کنند؟

%%%%%%%%%%%%%%%%%%%%%%%%%

********************************************** **

:::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::

شما می توانید برای هر یک از این نمادهای مختلف یک تابع جداگانه تعریف کنید. با این حال، راه کارآمدتری برای انجام این کار وجود دارد. می‌توانید از تابعی که قبلاً نوشتید دوباره استفاده کنید و آن را انعطاف‌پذیرتر کنید تا برای انواع مختلف نمادها کار کند.

یک چیز جالب در مورد توابع این است که می توانید با استفاده از آرگومان ها به آنها ورودی بدهید. هنگامی که با main() آشنا شدید، به طور خلاصه در یک کد لبه قبلی با آن مواجه شدید. در این مرحله، یک آرگومان به تابع printBorder() اضافه می‌کنید تا بتواند هر الگوی حاشیه‌ای را که ارائه می‌کنید چاپ کند.

  1. در main() در بالا، یک متغیر به نام border برای الگوی حاشیه ایجاد کنید. این متن را برای تکرار برای حاشیه نگه می دارد.
val border = "%"
  1. اکنون، آن متغیر border را به عنوان آرگومان به تابع printBorder() در هر دو فراخوانی ارسال کنید. این کار را با قرار دادن border در داخل پرانتز () انجام می دهید، درست مانند زمانی که متنی را برای println() برای چاپ تهیه کردید.

تابع main() شما باید شبیه کد زیر باشد.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

تابع printBorder() مقدار این border را به عنوان ورودی می گیرد و نحوه چاپ کامل حاشیه را مشخص می کند.

  1. کد خود را اجرا کنید. کد شما اجرا نمی شود و در عوض، نمادهای خطا را در کنار کد خود مشاهده می کنید.

  1. به نمای مشکلات نگاه کنید، یک پیام خطا وجود دارد.

مانند قبل، پیام نشان می دهد که خطا کجاست، و به شما اشاره می کند که ممکن است چه باشد. بخش مهم این است: Too many arguments for public fun printBorder() . شما تابع printBorder() را فراخوانی می کنید و یک حاشیه را به عنوان ورودی ارسال می کنید. با این حال، تعریف تابع printBorder() در حال حاضر هیچ ورودی را نمی پذیرد.

  1. با اضافه کردن یک آرگومان برای حاشیه به تعریف تابع printBorder() این خطا را برطرف کنید. خط اول کد را مطابق شکل زیر ببینید.
fun printBorder(border: String) {
    repeat(23) {
        print("=")
    }
    println()
}
  • توجه داشته باشید که نام آرگومان border است.
  • پس از این نام، علامت دو نقطه وجود دارد :
  • و کلمه String که توصیفی از نوع یا نوع آرگومان است.

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

  1. کد خود را اجرا کنید تابع printBorder() اکنون یک String حاشیه را به عنوان ورودی می پذیرد. و کد موجود در main() printBorder(border) را با border به عنوان آرگومان فراخوانی می کند. کد شما باید بدون خطا اجرا شود.
  2. به خروجی برنامه خود در کنسول نگاه کنید و همچنان همان حاشیه قبلی را نشان می دهد؟
=======================
Happy Birthday, Jhansi!
=======================

این رفتار مورد نظر نیست! شما سعی کردید یک حاشیه با نماد "%" ایجاد کنید، اما برنامه همچنان در حال چاپ یک حاشیه با نماد "=" است. در مراحل بعدی بررسی خواهید کرد که چرا این اتفاق می افتد.

  1. در ویرایشگر به علامت تعجب خاکستری رنگ توجه کنید. این نماد یک هشدار را نشان می دهد. اخطارها در مورد مشکلات کد شما هستند که باید به آنها توجه کنید، اما از اجرای کد شما جلوگیری نمی کنند.

  1. به نمای مشکلات بروید و هشدار را بخوانید. می گوید "Parameter 'border' is never used." این هشدار مشکل خروجی را توضیح می دهد. شما در حال ارسال یک رشته جدید برای حاشیه به تابع هستید، اما از آن برای چاپ استفاده نمی کنید.
  1. تابع printBorder() را تغییر دهید تا به جای چاپ "=" از border شده استفاده کنید. این دقیقاً به همان صورت عمل می کند که اگر border یک متغیر باشد که شما در داخل تابع تعریف کرده اید!
fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}
  1. کد خود را دوباره اجرا کنید. خروجی باید شبیه آنچه در زیر است باشد.
%%%%%%%%%%%%%%%%%%%%%%%
Happy Birthday, Jhansi!
%%%%%%%%%%%%%%%%%%%%%%%

عالی بود مشکل رو حل کردی این کد تمام شده شماست.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}

شما عملکرد printBorder() را بسیار انعطاف پذیرتر کردید، بدون اینکه کد بیشتری اضافه کنید. اکنون می توانید حاشیه ای از نمادهای مختلف را تنها با یک تغییر کوچک چاپ کنید.

  1. [اختیاری] با تغییر تنها یک خط کد در تابع main() ، چگونه بنرهای تولد را مانند این چاپ می کنید؟
***********************
Happy Birthday, Jhansi!
***********************
:::::::::::::::::::::::
Happy Birthday, Jhansi!
:::::::::::::::::::::::

یک تابع را طوری تغییر دهید که دو آرگومان داشته باشد

اگر می‌خواهید از الگوی متفاوتی استفاده کنید که بیشتر از 1 کاراکتر باشد، بگویید "`-._,-'" . شما این الگو را 23 بار تکرار نمی کنید زیرا بسیار طولانی است. می توانید آن را شاید 4 بار تکرار کنید. برای انجام این کار، می توانید تعداد تکرارها را در عبارت repeat() printBorder() تغییر دهید. با این حال، شما می توانید کار بهتری انجام دهید!

بر اساس دو چیز می‌توانید یک مرز جذاب‌تر تعریف کنید:

  • الگوی تکرار (که قبلا انجام داده اید)
  • تعداد دفعاتی که می خواهید الگو را تکرار کنید

می‌توانید برای هر کدام متغیرها، الگو و تعداد تکرارها ایجاد کنید، و سپس هر دو اطلاعات را به تابع printBorder() منتقل کنید.

  1. در main() ، مرز را به الگوی "`-._,-'" تغییر دهید.
val border = "`-._,-'"
  1. کد خود را اجرا کنید و متوجه شوید که الگو اکنون بسیار طولانی است.
  2. در main() زیر تعریف border ، یک متغیر جدید به نام timesToRepeat برای تعداد تکرار ایجاد کنید. مقدار آن را روی 4 قرار دهید.
val timesToRepeat = 4
  1. در main() ، هنگام فراخوانی printBorder() ، تعداد تکرارها را به عنوان آرگومان دوم اضافه کنید. دو آرگومان را با کاما از هم جدا کنید.
printBorder(border, timesToRepeat)

تابع main() اکنون باید به شکل زیر باشد:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

مانند قبل، این کد به شما یک خطا می دهد، زیرا آرگومان های بیشتری برای فراخوانی printBorder() نسبت به تعریف printBorder() .

  1. printBorder() را تصحیح کنید تا تعداد تکرارها را نیز به عنوان ورودی بپذیرد. بعد از آرگومان یک کاما اضافه کنید و به دنبال آن آرگومان اضافی: timesToRepeat: Int. خط اول تعریف تابع شما اکنون مانند شکل زیر است.
fun printBorder(border: String, timesToRepeat: Int) {

اطلاع:

  • کاما دو آرگومان را از هم جدا می کند.
  • timesToRepeat نام آرگومان است،
  • به دنبال دو نقطه: نماد،
  • و نوع: Int. timesToRepeat یک عدد است، بنابراین به جای اینکه آن را از نوع String بسازید، باید آن را از نوع Int بسازید که مخفف یک عدد صحیح، یک عدد کامل است.
  1. در داخل printBorder() ، repeat را برای استفاده از آرگومان timesToRepeat (به جای عدد 23) تغییر دهید. کد printBorder() شما باید شبیه این باشد.
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}
  1. کد خود را اجرا کنید و خروجی مطابق شکل زیر به نظر می رسد.
`-._,-'`-._,-'`-._,-'`-._,-'
Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'
  1. برای اینکه این خروجی کامل شود، دو فاصله در ابتدای پیام تبریک تولد درج کنید. سپس خروجی شما مطابق شکل زیر خواهد بود.
`-._,-'`-._,-'`-._,-'`-._,-'
  Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'

این کد نهایی برای بنر شما است:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("  Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

تبریک می گویم! با توابع، آرگومان ها، متغیرها و یک حلقه تکرار، بلوک های ساختمانی اساسی را یاد گرفته اید که تقریباً در همه برنامه ها استفاده می شوند.

کمی استراحت کنید و سپس به کار بعدی زیر بپردازید، جایی که توابع و حلقه‌های بیشتری ایجاد می‌کنید و تنها با چند خط برنامه‌نویسی، قدرت ساخت یک کیک غول‌پیکر با تعداد مناسب شمع را خواهید داشت.

در این کار شما قصد دارید کد کیک تولد را به اندازه مناسب با تعداد مناسب شمع برای هر سنی ارتقا دهید.

  • شما در مجموع سه عملکرد برای کشیدن یک کیک لایه ای با شمع ایجاد خواهید کرد.
  • شما از یک repeat() در یک repeat() دیگر استفاده خواهید کرد و چیزی را ایجاد می کنید که "حلقه تودرتو" نامیده می شود.
  • روشی که شما این کد را ایجاد می کنید این است که چگونه می توانید هر برنامه ای را ایجاد کنید، از تصویر بزرگ شروع کنید و جزئیات را اضافه کنید. به این "توسعه از بالا به پایین" می گویند.
  • دستورالعمل ها برای این تمرین به اندازه دقیق نیستند و در صورت گیر افتادن می توانید به کد تمام شده مراجعه کنید.

اینم عکس کیکی که قراره بپزید:

و در اینجا دستورالعمل ها وجود دارد.

تابع اصلی را ایجاد کنید

  1. کد خود را در ویرایشگر به Hello, world! برنامه
  2. می توانید آرگومان main() را حذف کنید، زیرا از آن استفاده نخواهید کرد.
  3. در main() یک متغیر age ایجاد کنید و آن را روی 24 قرار دهید.
  4. در main() یک layers متغیر دوم ایجاد کنید و آن را روی 5 قرار دهید.
  5. در main() یک تابع printCakeCandles() را فراخوانی کنید و از age عبور کنید. این برای شما با یک خطا مواجه می شود، زیرا شما هنوز آن تابع را ایجاد نکرده اید.
  6. به همین ترتیب، یک تابع printCakeTop() را فراخوانی کنید و همچنین از age عبور کنید.
  7. در نهایت یک تابع printCakeBottom() را فراخوانی کنید و از age و همچنین تعداد layers ها عبور کنید.
  8. برای خلاص شدن از شر خطاها، مطابق شکل زیر، سه فراخوانی تابع را با اضافه کردن // در ابتدای هر خط نظر دهید. این تکنیک به شما امکان می دهد کد خود را بدون ایجاد خطا پیش نویس کنید.
  9. برنامه خود را اجرا کنید و هیچ خطایی نداشته باشد و هیچ کاری انجام ندهد.

تابع main() شما باید شبیه کد زیر باشد.

fun main() {
    val age = 24
    val layers = 5
    // printCakeCandles(age)
    // printCakeTop(age)
    // printCakeBottom(age, layers)
}

ایجاد printCakeTop()

تابع printCakeTop() برای چاپ بالای کیک، خطی از علائم مساوی، تقریباً مشابه تابع printBorder() است که قبلاً در این لبه کد ایجاد کردید.

==========================
  1. در زیر تابع main() main، یک خط خالی اضافه کنید، و سپس یک تابع، printCakeTop() ایجاد کنید که یک آرگومان، age ، از نوع Int را می گیرد.
  2. در داخل، از عبارت repeat() برای چاپ یک علامت مساوی ضرب age به اضافه 2 استفاده کنید.
  3. در پایان، وقتی repeat() انجام شد، یک خط خالی چاپ کنید.
  4. در main() دو علامت // را از ابتدای خط کد printCakeTop() حذف کنید، زیرا تابع اکنون وجود دارد.
printCakeTop(age)

در اینجا عملکرد تمام شده شما است.

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}
  1. کد خود را اجرا کنید تا بالای کیک را ببینید.

ایجاد printCakeCandles()

هر شمع از دو نماد تشکیل شده است. یک کاما، برای شعله، و یک خط عمودی | برای بدن شمع

،،،،،،،،،،،،،،،،،،،،،،،،،،،

|||||||||||||||||||||||||

برای انجام این کار در یک تابع، دو عبارت repeat() یکی برای flames و دیگری برای body را در تابع خود قرار دهید.

  1. در زیر تابع main() و تابع printCakeTop() ، یک تابع جدید، printCakeCandles() ایجاد کنید که یک آرگومان، age ، از نوع Int را می گیرد.
  2. در داخل، از عبارت repeat() برای چاپ یک کاما برای , استفاده کنید.
  3. این age را بارها تکرار کنید.
  4. در پایان یک خط خالی چاپ کنید.
  5. یک عبارت print() را برای چاپ یک فضای برای قرار دادن شمع ها اضافه کنید.
  6. در زیر، مراحل ایجاد دومین عبارت repeat() را برای چاپ بدنه‌های شمع با خط عمودی | تکرار کنید.
  7. در main() دو علامت // را از ابتدای خط کد برای printCakeCandles() حذف کنید.
printCakeCandles(age)
  1. کد خود را اجرا کنید تا بالای کیک و شمع ها را ببینید

راه حل:

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
        print(",")
    }    
    println() // Print an empty line   
 
    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

ایجاد printCakeBottom()

در این تابع، یک ته کیک به اندازه age + 2 می‌کشید و آن را برای ارتفاعی از تعداد لایه‌های معین می‌کشید.

@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
  • این بدان معناست که تابع شما به دو آرگومان نیاز دارد، یکی برای عرض ( age ) و دیگری برای ارتفاع ( layers ).
  • برای چاپ زیر کیک، ابتدا علامت 'at' @ age + 2 بار برای چاپ یک لایه تکرار کنید. سپس، چاپ یک layers بارها تکرار می کنید.

لایه های ترسیم را تکرار کنید

برای ایجاد یک لایه، علامت at نماد age+2 را بکشید

  1. در زیر توابع موجود، یک تابع printCakeBottom() با دو آرگومان age و layers ، هر دو از نوع Int ایجاد کنید.
  2. در داخل تابع، از عبارت repeat() برای چاپ یک لایه از نمادهای 'at' @ age + 2 بار استفاده کنید. مطابق شکل زیر، با چاپ یک خط خالی کار را تمام کنید.
fun printCakeBottom(age: Int, layers: Int) {
    repeat(age + 2) {
        print("@")
    }
    println()
}
  1. کد خود را اجرا کنید تا مطمئن شوید که یک خط از پایین کیک را چاپ می کند.
 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@

عبارات تکرار() تو در تو

برای چاپ چندین لایه یکسان از کف کیک، می توانید بگویید:

برای لایه 1 علامت را 12 بار تکرار کنید: @@@@@@@@@@@@

برای لایه 2 نماد را 12 بار تکرار کنید: @@@@@@@@@@@@

برای لایه 3 نماد را 12 بار تکرار کنید: @@@@@@@@@@@@

یا می توانید این را خیلی خلاصه تر بگویید:

این کار را برای سه لایه تکرار کنید:

نماد را 12 بار تکرار کنید.

@@@@@@@@@@@@

@@@@@@@@@@@@

@@@@@@@@@@@@

اکنون، این چیزی است که می توانید با دستورات repeat() انجام دهید. شما می توانید یک عبارت repeat() را داخل یک عبارت repeat() دیگر قرار دهید. بنابراین می‌توانید یک عبارت repeat() را در یک عبارت repeat() ایجاد کنید تا نماد را تعداد معینی بار برای تعداد معینی از لایه‌ها چاپ کنید.

بیایید این کار را برای چاپ لایه های کیک انجام دهیم.

  1. عبارت repeat() دوم را در اطراف تمام کدهای داخل تابع قرار دهید. این حلقه layers تکرار کنید.
  2. در main() فقط دو // را از خط کد printCakeBottom() حذف کنید.
printCakeBottom(age, layers)
  1. کد خود را اجرا کنید تا کل کیک را ببینید.

راه حل برای printCakeBottom() .

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}

تبریک می گویم! شما به تازگی یک برنامه بسیار پیچیده را با چندین توابع و یک عبارت repeat تودرتو به پایان رسانده اید. و کیک شما همیشه تعداد مناسبی شمع خواهد داشت!

خروجی نهایی برنامه شما باید این باشد:

 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

کد راه حل

fun main() {
    val age = 24
    val layers = 5
    printCakeCandles(age)
    printCakeTop(age)
    printCakeBottom(age, layers)
}

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
          print(",") // Print an empty line
    }    
    println()    

    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}
  • از ${} برای محاسبات و متغیرها در متن عبارات چاپی استفاده کنید. به عنوان مثال: ${age} که در آن age یک متغیر است.
  • یک متغیر با استفاده از کلمه کلیدی val و یک نام ایجاد کنید. پس از تنظیم، این مقدار قابل تغییر نیست. با استفاده از علامت مساوی یک مقدار به متغیر اختصاص دهید. نمونه هایی از مقادیر متن و اعداد هستند.
  • یک String متنی است که با نقل قول هایی احاطه شده است، مانند "Hello" .
  • Int یک عدد مثبت یا منفی کامل است، مانند 0، 23، یا -1024.
  • شما می توانید یک یا چند آرگومان را به یک تابع برای استفاده از تابع ارسال کنید، به عنوان مثال:
    fun printCakeBottom(age:Int, layers:Int) {}
  • از یک عبارت repeat() {} برای تکرار مجموعه ای از دستورالعمل ها چندین بار استفاده کنید. برای مثال: repeat (23) { print('%") } or repeat (layers) { print("@@@@@@@@@@") }
  • یک حلقه دستورالعملی برای تکرار چندین بار دستورالعمل است. عبارت repeat() نمونه ای از یک حلقه است.
  • شما می توانید حلقه ها را لانه کنید، یعنی حلقه ها را در حلقه ها قرار دهید. به عنوان مثال، شما می توانید یک عبارت repeat() در یک عبارت repeat() ایجاد کنید تا یک نماد را چندین بار برای تعدادی ردیف چاپ کنید، مانند آنچه برای لایه های کیک انجام دادید.

خلاصه ای از استفاده از آرگومان های تابع: برای استفاده از آرگومان ها با یک تابع، باید سه کار را انجام دهید:

  • آرگومان و تایپ را به تعریف تابع اضافه کنید: printBorder(border: String)
  • از آرگومان داخل تابع استفاده کنید: println(border)
  • هنگام فراخوانی تابع، آرگومان را وارد کنید: printBorder(border)

در اینجا اسناد رسمی برای مفاهیم Kotlin است که در این کد لبه یاد گرفتید.

اگر ابزار برنامه نویسی Kotlin مبتنی بر مرورگر، کد شما را اجرا نمی کند یا خطایی مانند تصویر زیر به شما می دهد، می توانید موارد زیر را امتحان کنید.

  • صفحه را با استفاده از SHIFT-Reload دوباره بارگیری کنید.
  • یک دقیقه صبر کنید، سپس دوباره امتحان کنید.