در این نرم افزار 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
استفاده کنید
- کد زیر را بررسی کنید. آیا می توانید حدس بزنید که خروجی قرار است چه باشد؟
fun main() {
val num = 5
if (num > 4) {
println("The variable is greater than 4")
}
}
- کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is greater than 4
فرآیند تصمیم گیری برای این برنامه به شرح زیر است:
- یک متغیر
num
ایجاد کنید و آن را روی5.
- اگر درست است که
num
بزرگتر از 4 (>
) است,
"The variable is greater than 4"
چاپ کنید. - در تمام موقعیت های دیگر، هیچ کاری انجام ندهید.
در مثال بالا، num
روی 5 تنظیم شده است. اگر متغیر بزرگتر از 4 باشد، دستور if
مقایسه میکند. از آنجایی که درست است، سیستم در مرحله بعد دستورالعملها را در پرانتزهای فرفری اجرا میکند و پیام را چاپ میکند.
به فرمت کلی دستور if
توجه کنید:
- با کلمه کلیدی
if
شروع کنید. - با دو پرانتز
()
دنبال کنید. داخل پرانتز شرط می رود. شرط هر چیزی است که می تواندtrue
یاfalse
باشد. مثلاً اینکه آیا یک عدد بزرگتر از عدد دیگر است یا خیر. - با دو بریس مجعد
{}
را دنبال کنید. در داخل پرانتزهای فرفری، کدی را قرار می دهید تا اگر شرطtrue
باشد، اجرا شود.
if (condition-is-true) { execute-this-code }
برای تنظیم شرطی که برآورده نشده است از عبارت if
استفاده کنید
- مقدار
num
را مطابق شکل زیر به 3 تغییر دهید. اگر این کد را اجرا کنید، انتظار دارید چه اتفاقی بیفتد؟
fun main() {
val num = 3
if (num > 4) {
println("The variable is greater than 4")
}
}
- کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
وقتی num
روی 3 تنظیم شده است، چیزی چاپ نمی شود، زیرا مقدار num
کمتر از 4 است. بنابراین شرط اینکه num
بزرگتر از 4 باشد false
است و کد بین بریس های فرفری اجرا نمی شود و چیزی چاپ نمی شود.
else
برای ایجاد یک جایگزین برای شرایط ناموفق استفاده کنید
به جای اینکه هیچ کاری انجام ندهید، می توانید در صورت عدم رعایت شرایط، یک جایگزین به کاربران خود ارائه دهید. درست مانند زبان معمولی، میتوانید این کار را با عبارت else
انجام دهید.
- همانطور که در زیر نشان داده شده است، عبارت
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")
}
}
- کد را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is less than 4
- توجه داشته باشید که وقتی
num
مقدار 3 دارد، برنامه پیام"The variable is less than 4"
را که با عبارتelse
مرتبط است چاپ می کند زیراnum
بزرگتر از 4 نیست. -
num
به 5 تغییر دهید و دوباره برنامه را اجرا کنید. حالا درست است کهnum
بزرگتر از 4 است و برنامه "The variable is greater than 4
" را چاپ می کند. -
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 باشد.
- کد بالا را در ویرایشگر برنامه Kotlin کپی و پیست کنید و برنامه را اجرا کنید تا خروجی مشاهده شود.
The variable is equal to 4
- تغییر مقدار
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()
}
}
بررسی کنید که آیا شماره شانس داده شده است
ابتدا یک عدد خوش شانس ایجاد کنید و سپس تاس انداخته شده را با آن عدد مقایسه کنید.
.
- در
main()
عبارتprintln()
حذف کنید. - در
main()
یکval
به نامluckyNumber
اضافه کنید و آن را روی 4 قرار دهید. کد شما باید شبیه به این باشد.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
- در زیر، یک عبارت
if
را با یک شرط در داخل پرانتز()
اضافه کنید که بررسی می کند آیاrollResult
برابر است (==
) باluckyNumber
. بین پرانتزهای مجعد{}
فضای خالی بگذارید تا بتوانید کد بیشتری اضافه کنید.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
}
}
- در داخل پرانتزهای مجعد
{}
، یک عبارتprintln
اضافه کنید تا"You win!"
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
println("You win!")
}
}
- برنامه خود را اجرا کنید ممکن است لازم باشد چندین بار آن را اجرا کنید تا خوش شانس باشید و پیام برنده را در خروجی ببینید!
You win!
هنگامی که شماره شانس ارسال نشده است، پاسخ دهید
دریافت بازخورد از برنامه در صورتی که کاربر برنده نشود، می تواند او را در تعجب قرار دهد که آیا برنامه خراب است. این یک تمرین خوب است که همیشه وقتی کاربر کاری انجام می دهد، پاسخی ارائه دهید. برای برنامه Lucky Dice Roller، می توانید با استفاده از عبارت else
به آنها اطلاع دهید که برنده نشده اند.
- عبارت
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!")
}
}
- برنامه را اجرا کنید و بدون توجه به نتیجه، کاربران شما همیشه مطلع می شوند.
در این مرحله، کاربران می دانند که آیا برنده شده اند یا نه، اما دلیل آن را نمی دانند. همیشه به کاربران اطلاعات بدهید تا نتیجه اقدامات خود را بفهمند! تصور کنید برنامه شما یک درخواست وام بود. "شما تایید نشدید زیرا رتبه اعتباری شما ضعیف است" بسیار آموزنده تر از "متاسفم، برای شما وام نیست، دوباره امتحان کنید!" برای Lucky Dice Roller، میتوانید در صورت باخت به کاربران، پیامهای آموزنده متفاوتی برای هر رول بدهید. برای انجام این کار از چندین دستور else if
استفاده کنید.
- برای چاپ پیامی متفاوت برای هر رول، دستورهای
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
شروع می شود و به دنبال آن پرانتز ()
می باشد. در داخل پرانتز مقدار مورد نظر برای تست قرار می گیرد. پس از آن، پرانتزهای مجعد {}
برای اجرای کد برای شرایط مختلف وجود دارد.
- در برنامه خود، در
main()
کد را از اولین دستورif
تا پرانتز curly}
که آخرین عبارتelse
را می بندد، انتخاب کنید و آن را حذف کنید.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
- در
main()
زیر اعلانluckyNumber
، یک دستورwhen
ایجاد کنید. از آنجاییwhen
نیاز به آزمایش در برابر نتیجه رول شده دارید،rollResult
در بین پرانتز()
قرار دهید. همانطور که در زیر نشان داده شده است، پرانتزهای مجعد{}
را با فاصله اضافی اضافه کنید.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
when (rollResult) {
}
}
مانند قبل، ابتدا تست کنید که آیا rollResult
با luckyNumber
یکسان است یا خیر.
- در داخل پرانتزهای مجعد
{}
دستور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 - 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!")
}
}
- برنامه خود را اجرا کنید هیچ تفاوتی در خروجی وجود ندارد، اما کد شما بسیار فشرده تر و راحت تر خوانده می شود.
تبریک می گویم! شما دو روش برای چاپ پیام ها بسته به شرایط یاد گرفته اید. این یک ابزار قدرتمند برای نوشتن برنامه های جالب است!
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
به عنوان یک فرم فشرده برای اجرای کد بر اساس مقایسه یک مقدار استفاده کنید.
موارد زیر را انجام دهید:
-
myFirstDice
را به 8 طرف تغییر دهید و کد خود را اجرا کنید. چه اتفاقی می افتد؟
نکته: وقتی تعداد ضلع ها را افزایش می دهید، دستور when
شما دیگر همه موارد را پوشش نمی دهد، بنابراین برای موارد بدون پوشش، چیزی چاپ نمی شود.
- دستور
when
را برای حساب کردن هر 8 طرف ثابت کنید. می توانید این کار را با اضافه کردن موارد برای اعداد اضافی انجام دهید. چالش: به جای اضافه کردن یک مورد جدید برای هر عدد، از عبارتelse
استفاده کنید تا همه مواردی را که به طور صریح پوشش داده نشدهاند، پیدا کنید.
نکته: می توانید موارد بیشتری را برای پوشاندن اضلاع بیشتر اضافه کنید. این راه خوبی برای انجام این کار است، اگر میخواهید برای هر شماره پیام متفاوتی داشته باشید. یا، میتوانید از عبارت else
استفاده کنید و همان پیام را برای همه ضلعهای بزرگتر از 6 مورد پوشش کد فعلی چاپ کنید.
-
myFirstDice
تغییر دهید تا فقط 4 طرف داشته باشد. چه اتفاقی می افتد؟
نکته: تغییر تعداد اضلاع تاس به کمتر از مقداری که توسط دستور when
پوشانده شده است، تأثیر قابل توجهی ندارد، زیرا تمام مواردی که ممکن است رخ دهد، پوشش داده شده است.