شرایط در کاتلین - قسمت 1

در این نرم افزار Kotlin شما یک بازی تاس دیگر به نام Lucky Dice Roll ایجاد خواهید کرد که سعی می کند یک عدد شانس بیاورد. برنامه شما یک عدد خوش شانس تعیین می کند و تاس می اندازد. سپس رول را با شماره شانس بررسی کرده و یک پیام مناسب را در خروجی چاپ کنید. برای انجام این کار، یاد می گیرید که چگونه ارزش ها را مقایسه کنید و در برنامه کاتلین خود تصمیمات متفاوتی بگیرید.

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

پیش نیازها

  • نحوه باز کردن، ویرایش و اجرای کد در https://try.kotlinlang.org/
  • امکان ایجاد و اجرای یک برنامه Kotlin که از متغیرها، توابع با آرگومان ها، کلاس ها با متدها استفاده می کند و نتیجه را در کنسول چاپ می کند.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از دستور if و else
  • نحوه مقایسه مقادیر با استفاده از عملگرهایی مانند بزرگتر از ( > )، کوچکتر از ( < ) و مساوی با ( == ).
  • نحوه استفاده از عبارات when برای انتخاب یک گزینه بر اساس مقدار داده شده.
  • نوع داده Boolean چیست و چگونه از مقادیر true و false آن برای تصمیم گیری استفاده کنیم.

چیزی که خواهی ساخت

  • یک بازی تاس مبتنی بر Kotlin، Lucky Dice Roll، که به شما امکان می دهد یک عدد خوش شانس را مشخص کنید. اگر بازیکنی عدد خوش شانس را بزند برنده خواهد شد.

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

  • یک کامپیوتر با اتصال به اینترنت.

برنامه Lucky Dice Roller شما باید تعیین کند که آیا کاربر یک عدد شانس آورده است و یک تبریک دریافت می کند یا در عوض، پیامی برای امتحان مجدد دریافت می کند.

به‌عنوان یک توسعه‌دهنده برنامه، باید در مورد نحوه رفتار برنامه و ایجاد نتایج متفاوت برای کاربران خود تصمیم بگیرید.

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

در برنامه Lucky Dice Roller، برنامه باید موارد مختلفی از جمله:

  • اگر تاس انداخته شده عدد خوش شانس است، یک پیام تبریک نمایش دهید!
  • در غیر این صورت، اگر تاس انداخته شده عدد خوش شانسی نیست، پیامی برای امتحان مجدد نمایش دهید.

برای افزودن این منطق به کد خود، از کلمات کلیدی مخصوص Kotlin مانند if و else و when استفاده کنید.

بیایید به چند نمونه نگاه کنیم.

برای تنظیم شرطی که برآورده شده است از عبارت if استفاده کنید

  1. کد زیر را بررسی کنید. آیا می توانید حدس بزنید که خروجی قرار است چه باشد؟
fun main() {
   val num = 5
   if (num > 4) {
       println("The variable is greater than 4")
   }
}
  1. کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is greater than 4

فرآیند تصمیم گیری برای این برنامه به شرح زیر است:

  1. یک متغیر num ایجاد کنید و آن را روی 5.
  2. اگر درست است که num بزرگتر از 4 ( > ) است , "The variable is greater than 4" چاپ کنید.
  3. در تمام موقعیت های دیگر، هیچ کاری انجام ندهید.

در مثال بالا، num روی 5 تنظیم شده است. اگر متغیر بزرگتر از 4 باشد، دستور if مقایسه می‌کند. از آنجایی که درست است، سیستم در مرحله بعد دستورالعمل‌ها را در پرانتزهای فرفری اجرا می‌کند و پیام را چاپ می‌کند.

به فرمت کلی دستور if توجه کنید:

  • با کلمه کلیدی if شروع کنید.
  • با دو پرانتز () دنبال کنید. داخل پرانتز شرط می رود. شرط هر چیزی است که می تواند true یا false باشد. مثلاً اینکه آیا یک عدد بزرگتر از عدد دیگر است یا خیر.
  • با دو بریس مجعد {} را دنبال کنید. در داخل پرانتزهای فرفری، کدی را قرار می دهید تا اگر شرط true باشد، اجرا شود.
if (condition-is-true) {
    execute-this-code
}

برای تنظیم شرطی که برآورده نشده است از عبارت if استفاده کنید

  1. مقدار num را مطابق شکل زیر به 3 تغییر دهید. اگر این کد را اجرا کنید، انتظار دارید چه اتفاقی بیفتد؟
fun main() {
   val num = 3
   if (num > 4) {
       println("The variable is greater than 4")
   }
}
  1. کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.

وقتی num روی 3 تنظیم شده است، چیزی چاپ نمی شود، زیرا مقدار num کمتر از 4 است. بنابراین شرط اینکه num بزرگتر از 4 باشد false است و کد بین بریس های فرفری اجرا نمی شود و چیزی چاپ نمی شود.

else برای ایجاد یک جایگزین برای شرایط ناموفق استفاده کنید

به جای اینکه هیچ کاری انجام ندهید، می توانید در صورت عدم رعایت شرایط، یک جایگزین به کاربران خود ارائه دهید. درست مانند زبان معمولی، می‌توانید این کار را با عبارت else انجام دهید.

  1. همانطور که در زیر نشان داده شده است، عبارت else را برای چاپ پیام برای زمانی که num بزرگتر از 4 نیست، اضافه کنید. اگر این کد را اجرا کنید، انتظار دارید چه اتفاقی بیفتد؟
fun main() {
   val num = 3
   if (num > 4) {
       println("The variable is greater than 4")
   } else {
       println("The variable is less than 4")
   }
}
  1. کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is less than 4
  1. توجه داشته باشید که وقتی num مقدار 3 دارد، برنامه پیام "The variable is less than 4" را که با عبارت else مرتبط است چاپ می کند زیرا num بزرگتر از 4 نیست.
  2. num به 5 تغییر دهید و دوباره برنامه را اجرا کنید. حالا درست است که num بزرگتر از 4 است و برنامه " The variable is greater than 4 " را چاپ می کند.
  3. num به 4 تغییر دهید و برنامه خود را اجرا کنید. اکنون 4 بزرگتر از 4 نیست و برنامه " The variable is less than 4 " را چاپ می کند.

در حالی که " The variable is less than 4 " خروجی صحیح برای شرایطی است که در کد تنظیم کرده اید، آن عبارت چاپ شده دقیق نیست، زیرا 4 کمتر از 4 نیست. کاری که می توانید انجام دهید این است که شرط دیگری را اضافه کنید که احتمال سوم را بررسی کند، اینکه آیا num دقیقاً 4 است یا خیر، و زمانی که آن شرط درست است یک عبارت درست را چاپ می کند.

از ترکیب else + if برای اضافه کردن شرایط جایگزین استفاده کنید

شما می توانید بیش از یک شرط داشته باشید. برای مثال، به این صورت است که می توانید تمام احتمالات را برای num پوشش دهید:

  • اگر num بزرگتر از 4 است، " The variable is greater than 4 " را چاپ کنید.
  • در غیر این صورت اگر num برابر با 4 باشد، "The variable is equal to 4" را چاپ کنید.
  • در غیر این صورت ، "The variable is less than 4" را چاپ کنید.

در عبارت if-else به این موارد به عنوان موارد مختلف اشاره می شود. 3 مورد ذکر شده است.

کد به روز شده به صورت زیر است:

fun main() {
   val num = 4
   if (num > 4) {
       println("The variable is greater than 4")
   } else if (num == 4) {
       println("The variable is equal to 4")
   } else {
       println("The variable is less than 4")
   }
}

به تغییرات زیر توجه کنید:

  • مقدار num اکنون روی 4 تنظیم شده است تا بتوانید شرایط جدید را آزمایش کنید.
  • بین دستورهای if و else اصلی یک دستور else if جدید برای موردی است که num دقیقاً 4 باشد.
  1. کد بالا را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is equal to 4
  1. تغییر مقدار num را آزمایش کنید و ببینید که چگونه بر خروجی تأثیر می گذارد. num به 2 و 6 تغییر دهید تا بتوانید هر یک از شرایط را true کنید.

کنترل جریان

وقتی به عبارات if-else بالا نگاه می کنید، کد اجرا می شود یا جریان می یابد، همانطور که توسط شرایط کنترل می شود. بنابراین روشی که اجرا را با این شرطی ها هدایت می کنید، "جریان کنترل" برنامه نامیده می شود.

  • فرض کنید num شما 3 باشد. برنامه شرط اول را بررسی می کند (num > 4). این نادرست است، بنابراین برنامه شرط بعدی (num == 4) را بررسی می کند که آن نیز نادرست است. سپس برنامه کد عبارت else که گزینه نهایی است را اجرا می کند.
  • اگر عدد تاس شما 6 باشد، شرط اول (num > 4) درست است. برنامه پیام "The variable is greater than 4" را چاپ می کند. از آنجایی که این شرط درست است، نیازی به بررسی بقیه موارد نیست و با عبارت if-else انجام می شود.
  • از ترکیب else + if برای اضافه کردن شرایط جایگزین استفاده کنید.

در این بخش، با استفاده از آنچه در کار قبلی یاد گرفتید، برنامه Dice Roller را به روز می کنید تا بررسی کنید که آیا یک عدد شانس از پیش تعیین شده را زده اید یا خیر. اگر داشته باشید، برنده می شوید!

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

شما در حال شروع تاس خوش شانس با کدی هستید که شبیه کد راه حل برنامه قبلی Kotlin Dice Roller است. می توانید تابع main() را در کد قبلی خود ویرایش کنید تا مطابقت داشته باشد، یا می توانید کد زیر را کپی کرده و برای شروع کار جایگذاری کنید.

fun main() {
    val myFirstDice = Dice(6)
    val diceRoll = myFirstDice.roll()
    println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
}

class Dice (val numSides: Int) {

    fun roll(): Int {
        return (1..numSides).random()
    }
}

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

ابتدا یک عدد خوش شانس ایجاد کنید و سپس تاس انداخته شده را با آن عدد مقایسه کنید.

.

  1. در main() عبارت println() حذف کنید.
  2. در main() یک val به نام luckyNumber اضافه کنید و آن را روی 4 قرار دهید. کد شما باید شبیه به این باشد.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
}
  1. در زیر، یک عبارت if را با یک شرط در داخل پرانتز () اضافه کنید که بررسی می کند آیا rollResult برابر است ( == ) با luckyNumber . بین پرانتزهای مجعد {} فضای خالی بگذارید تا بتوانید کد بیشتری اضافه کنید.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
    if (rollResult == luckyNumber) {

    }
}
  1. در داخل پرانتزهای مجعد {} ، یک عبارت println اضافه کنید تا "You win!"
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    if (rollResult == luckyNumber) {
        println("You win!")
    }
}
  1. برنامه خود را اجرا کنید ممکن است لازم باشد چندین بار آن را اجرا کنید تا خوش شانس باشید و پیام برنده را در خروجی ببینید!
You win!

هنگامی که شماره شانس ارسال نشده است، پاسخ دهید

دریافت بازخورد از برنامه در صورتی که کاربر برنده نشود، می تواند او را در تعجب قرار دهد که آیا برنامه خراب است. این یک تمرین خوب است که همیشه وقتی کاربر کاری انجام می دهد، پاسخی ارائه دهید. برای برنامه Lucky Dice Roller، می توانید با استفاده از عبارت else به آنها اطلاع دهید که برنده نشده اند.

  1. عبارت else را برای چاپ اضافه کنید "You didn't win, try again!" .
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   if (rollResult == luckyNumber) {
       println("You win!")
   } else {
       println("You didn't win, try again!")
   }
}
  1. برنامه را اجرا کنید و بدون توجه به نتیجه، کاربران شما همیشه مطلع می شوند.

در این مرحله، کاربران می دانند که آیا برنده شده اند یا نه، اما دلیل آن را نمی دانند. همیشه به کاربران اطلاعات بدهید تا نتیجه اقدامات خود را بفهمند! تصور کنید برنامه شما یک درخواست وام بود. "شما تایید نشدید زیرا رتبه اعتباری شما ضعیف است" بسیار آموزنده تر از "متاسفم، برای شما وام نیست، دوباره امتحان کنید!" برای Lucky Dice Roller، می‌توانید در صورت باخت به کاربران، پیام‌های آموزنده متفاوتی برای هر رول بدهید. برای انجام این کار از چندین دستور else if استفاده کنید.

  1. برای چاپ پیامی متفاوت برای هر رول، دستورهای else if اضافه کنید. در صورت لزوم به قالبی که در کار قبلی یاد گرفتید مراجعه کنید.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   if (rollResult == luckyNumber) {
       println("You win!")
   } else if (rollResult == 1) {
       println("So sorry! You rolled a 1. Try again!")
   } else if (rollResult == 2) {
       println("Sadly, you rolled a 2. Try again!")
   } else if (rollResult == 3) {
       println("Unfortunately, you rolled a 3. Try again!")
   } else if (rollResult == 4) {
       println("No luck! You rolled a 4. Try again!")
   } else if (rollResult == 5) {
       println("Don't cry! You rolled a 5. Try again!")
   } else {
       println("Apologies! you rolled a 6. Try again!")
   }
}

در کد بالا، شما

  • بررسی کنید که آیا rollResult luckyNumber است یا خیر.
  • اگر rollResult luckyNumber است، پیام برنده را چاپ کنید.
  • در غیر این صورت، بررسی کنید که آیا rollResult 1 است یا خیر، و اگر چنین است، یک پیام امتحان دوباره چاپ کنید.
  • در غیر این صورت، بررسی کنید که آیا rollResult 2 است یا خیر، و اگر چنین است، یک پیام امتحان مجدد متفاوت چاپ کنید.
  • در غیر این صورت، از طریق شماره 5 بررسی کنید.
  • اگر عدد هیچ یک از 1 تا 5 نبوده است، تنها گزینه باقی مانده 6 است، بنابراین نیازی به تست دیگری با else if نیست، و می توانید آخرین گزینه را با عبارت else بگیرید.

از آنجا که داشتن موارد متعدد else if بسیار رایج است، کاتلین روش ساده تری برای نوشتن آنها دارد.

آزمایش برای بسیاری از نتایج یا موارد مختلف در برنامه نویسی بسیار رایج است. گاهی اوقات، فهرست نتایج ممکن می تواند بسیار طولانی باشد. برای مثال، اگر یک تاس 12 وجهی می انداختید، 11 تاس else if بین موفقیت و نتیجه نهایی else خواهید داشت. برای آسان‌تر کردن نوشتن و خواندن این نوع عبارات، که به جلوگیری از خطا کمک می‌کند، کاتلین دستور when را در دسترس قرار می‌دهد.

شما قصد دارید برنامه خود را برای استفاده از دستور when تغییر دهید. عبارات when با کلمه کلیدی when شروع می شود و به دنبال آن پرانتز () می باشد. در داخل پرانتز مقدار مورد نظر برای تست قرار می گیرد. پس از آن، پرانتزهای مجعد {} برای اجرای کد برای شرایط مختلف وجود دارد.

  1. در برنامه خود، در main() کد را از اولین دستور if تا پرانتز curly } که آخرین عبارت else را می بندد، انتخاب کنید و آن را حذف کنید.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4
}
  1. در main() زیر اعلان luckyNumber ، یک دستور when ایجاد کنید. از آنجایی when نیاز به آزمایش در برابر نتیجه رول شده دارید، rollResult در بین پرانتز () قرار دهید. همانطور که در زیر نشان داده شده است، پرانتزهای مجعد {} را با فاصله اضافی اضافه کنید.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {

   }
}

مانند قبل، ابتدا تست کنید که آیا rollResult با luckyNumber یکسان است یا خیر.

  1. در داخل پرانتزهای مجعد {} دستور when ، عبارتی را اضافه کنید که rollResult در برابر luckyNumber آزمایش می‌کند، و اگر آنها یکسان هستند، پیام برنده را چاپ کنید. بیانیه به این شکل است:
luckyNumber -> println("You win!")

این یعنی:

  • ابتدا مقداری را که مقایسه می کنید با rollResult قرار می دهید. این luckyNumber است.
  • آن را با یک فلش ( -> ) دنبال کنید.
  • سپس اقدامی را اضافه کنید تا در صورت وجود تطابق انجام شود.

این را به صورت «اگر rollResult luckyNumber است، پیام "You win!" را چاپ کنید.

و کد main() شما به این شکل است.

fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You win!")
   }
}
  1. همانطور که در زیر نشان داده شده است، از همان الگوی برای اضافه کردن خطوط و پیام ها برای رول های احتمالی 1 - 6 استفاده کنید. تابع main() تمام شده شما باید شبیه این باشد.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You won!")
       1 -> println("So sorry! You rolled a 1. Try again!")
       2 -> println("Sadly, you rolled a 2. Try again!")
       3 -> println("Unfortunately, you rolled a 3. Try again!")
       4 -> println("No luck! You rolled a 4. Try again!")
       5 -> println("Don't cry! You rolled a 5. Try again!")
       6 -> println("Apologies! you rolled a 6. Try again!")
   }
}
  1. برنامه خود را اجرا کنید هیچ تفاوتی در خروجی وجود ندارد، اما کد شما بسیار فشرده تر و راحت تر خوانده می شود.

تبریک می گویم! شما دو روش برای چاپ پیام ها بسته به شرایط یاد گرفته اید. این یک ابزار قدرتمند برای نوشتن برنامه های جالب است!

fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You won!")
       1 -> println("So sorry! You rolled a 1. Try again!")
       2 -> println("Sadly, you rolled a 2. Try again!")
       3 -> println("Unfortunately, you rolled a 3. Try again!")
       4 -> println("No luck! You rolled a 4. Try again!")
       5 -> println("Don't cry! You rolled a 5. Try again!")
       6 -> println("Apologies! you rolled a 6. Try again!")
   }
}

class Dice(val numSides: Int) {
   fun roll(): Int {
       return (1..numSides).random()
   }
}
  • از دستور if برای تنظیم یک شرط برای اجرای برخی دستورالعمل ها استفاده کنید. به عنوان مثال، اگر کاربر شماره خوش شانس را بنویسد، یک پیام برنده را چاپ کنید.
  • نوع داده Boolean دارای مقادیر true و false است و می توان از آن برای تصمیم گیری استفاده کرد.
  • مقادیر را با استفاده از عملگرهایی مانند بزرگتر از ( > )، کوچکتر از ( < ) و مساوی با ( == ) مقایسه کنید.
  • برای تنظیم چند شرط از یک زنجیره از عبارات else if استفاده کنید. به عنوان مثال، برای هر تاس احتمالی یک پیام متفاوت چاپ کنید.
  • از یک عبارت else در انتهای زنجیره ای از شرایط استفاده کنید تا مواردی را که ممکن است به طور صریح پوشش داده نشده باشند، پیدا کنید. اگر موارد مربوط به تاس های 6 وجهی را پوشش دهید، عبارت else اعداد 7 و 8 را که با یک تاس 8 وجهی ریخته شده اند، می گیرد.
  • از دستور when به عنوان یک فرم فشرده برای اجرای کد بر اساس مقایسه یک مقدار استفاده کنید.

موارد زیر را انجام دهید:

  1. myFirstDice را به 8 طرف تغییر دهید و کد خود را اجرا کنید. چه اتفاقی می افتد؟

نکته: وقتی تعداد ضلع ها را افزایش می دهید، دستور when شما دیگر همه موارد را پوشش نمی دهد، بنابراین برای موارد بدون پوشش، چیزی چاپ نمی شود.

  1. دستور when را برای حساب کردن هر 8 طرف ثابت کنید. می توانید این کار را با اضافه کردن موارد برای اعداد اضافی انجام دهید. چالش: به جای اضافه کردن یک مورد جدید برای هر عدد، از عبارت else استفاده کنید تا همه مواردی را که به طور صریح پوشش داده نشده‌اند، پیدا کنید.

نکته: می توانید موارد بیشتری را برای پوشاندن اضلاع بیشتر اضافه کنید. این راه خوبی برای انجام این کار است، اگر می‌خواهید برای هر شماره پیام متفاوتی داشته باشید. یا، می‌توانید از عبارت else استفاده کنید و همان پیام را برای همه ضلع‌های بزرگ‌تر از 6 مورد پوشش کد فعلی چاپ کنید.

  1. myFirstDice تغییر دهید تا فقط 4 طرف داشته باشد. چه اتفاقی می افتد؟

نکته: تغییر تعداد اضلاع تاس به کمتر از مقداری که توسط دستور when پوشانده شده است، تأثیر قابل توجهی ندارد، زیرا تمام مواردی که ممکن است رخ دهد، پوشش داده شده است.