در این بخش از مقاله آموزش کاتلین با سازه when آشنا شده و برخی مثالهای کاربردی آن را بررسی میکنیم.
سازه when در کاتلین
سازه when در کاتلین را میتوان به عنوان جایگزینی برای گزاره switch در جاوا تصور کرد. این سازه بخشی از کد را در برابر جایگزینهای متعدد ارزیابی میکند.
مثالی از یک عبارت ساده when
fun main(args: Array<String>) {
val a = 12 val b = 5
println("Enter operator either +, -, * or /") val operator = readLine()
val result = when (operator) { "+" -> a + b "-" -> a - b "*" -> a * b "/" -> a / b else -> "$operator operator is invalid operator." }
println("result = $result")
}
خروجی کد فوق مانند زیر است:
Enter operator either +, -, * or / * result = 60
برنامه فوق یک رشته ورودی از کاربر میگیرد. فرض کنید کاربر مقدار * وارد میکند. در این حالت، عبارت a*b ارزیابی میشود و مقدار مورد نظر به یک متغیر به نام result انتساب مییابد.
اگر هیچ کدام از شاخههای شرطی برقرار نباشند، یعنی کاربر چیزی به جز +، -، * یا / وارد کرده باشد، در این صورت شاخه else ارزیابی میشود.
در مثال فوق باید when به عنوان یک عبارت استفاده کردهایم. اما الزامی برای استفاده از when به صورت یک عبارت وجود ندارد. به مثال زیر توجه کنید:
fun main(args: Array<String>) {
val a = 12 val b = 5
println("Enter operator either +, -, * or /") val operator = readLine()
when (operator) { "+" -> println("$a + $b = ${a + b}") "-" -> println("$a - $b = ${a - b}") "*" -> println("$a * $b = ${a * b}") "/" -> println("$a / $b = ${a / b}") else -> println("$operator is invalid") }
}
خروجی کد فوق به صورت زیر است:
Enter operator either +, -, * or / - 12 - 5 = 7
در این برنامه when یک عبارت نیست، چون مقدار بازگشتی آن به هیچ چیز انتساب نمییابد. در این حالت، وجود شاخه else ضرورتی ندارد.
کاربردهای مختلف when در کاتلین
امکان ترکیب دو یا چند شرط با استفاده از کاما وجود دارد. به مثال زیر توجه کنید:
fun main(args: Array<String>) {
val n = -1
when (n) { 1, 2, 3 -> println("n is a positive integer less than 4.") 0 -> println("n is zero") -1, -2 -> println("n is a negative integer greater than 3.") }
}
خروجی برنامه فوق به صورت زیر است:
n is a negative integer greater than 3.
با استفاده از when امکان بررسی وجود مقداری در یک بازه فراهم میشود. به مثال زیر توجه کنید:
fun main(args: Array<String>) {
val a = 100
when (a) { in 1..10 -> println("A positive number less than 11.") in 10..100 -> println("A positive number between 10 and 100 (inclusive)") }
}
خروجی کد فوق به صورت زیر است:
A positive number between 10 and 100 (inclusive)
بررسی نوع یک مقدار
برای این که در زمان اجرا بررسی کنیم یک مقدار دارای نوع خاصی است یا نه، میتوانیم از عملگرهای is و !is استفاده کنیم. به مثال زیر توجه کنید:
when (x) { is Int -> print(x + 1) is String -> print(x.length + 1) is IntArray -> print(x.sum())
}
استفاده از عبارت به عنوان یک شرط شاخه. به مثال زیر توجه کنید:
fun main(args: Array<String>) {
val a = 11 val n = "11"
when (n) { "cat" -> println("Cat? Really?") 12.toString() -> println("Close but not close enough.") a.toString() -> println("Bingo! It's eleven.") }
}
خروجی برنامه فوق به صورت زیر است:
Bingo! It's eleven.
حلقه while و do…while در کاتلین
حلقهها در برنامهنویسی برای تکرار یک بلوک خاص از کد استفاده میشوند. در این بخش از مقاله آموزش کاتلین با شیوه ایجاد حلقه while و do…while در برنامهنویسی کاتلین آشنا خواهیم شد. حلقهها در برنامهنویسی برای تکرار یک بلوک خاص از کد تا زمانی که شرط معینی برقرار شود، استفاده میشود.
حلقهها آن چیزی هستند که رایانهها را به ماشینهای جذابی تبدیل میکنند. تصور کنید لازم است یک جمله را 50 بار روی صفحه پرینت کنید. این کار را میتوان با 50 بار استفاده از گزاره پرینت انجام داد. اما در صورتی که قرار باشد یک گزاره یک میلیون بار پرینت شود، این راهحل دیگر به کار نمیآید. در این صورت باید از حلقهها استفاده کرد.
در ادامه این مقاله با بررسی مثالهایی با دو نوع حلقه while و do…while در زبان کاتلین آشنا میشویم. اگر با حلقههای while و do…while در جاوا آشنا باشید، باید بدانید که عملکرد این حلقهها در کاتلین نیز دقیقاً به همان ترتیب است.
حلقه while در کاتلین
ساختار حلقه while به صورت زیر است:
while (testExpression) { // codes inside body of while loop
}
طرز کار حلقه while چگونه است؟
عبارت تست درون پرانتز یک عبارت بولی است. اگر عبارت تست به صورت true ارزیابی شود:
- گزاره درون عبارت while اجرا میشود.
- سپس عبارت تست دوباره ارزیابی میشود.
این فرایند تا زمانی که عبارت test به صورت false ارزیابی شود، تداوم مییابد. در این حالت حلقه while خاتمه مییابد.
فلوچارت حلقه While در کاتلین
مثالی از حلقه while در کاتلین
// Program to print line 5 times
fun main(args: Array<String>) {
var i = 1
while (i <= 5) { println("Line $i") ++i }
}
با اجرای برنامه فوق، خروجی زیر ایجاد میشود:
Line 1 Line 2 Line 3 Line 4 Line 5
توجه کنید که گزاره i++ درون حلقه while قرار دارد. پس از 5 بار تکرار، متغیر i به مقدار 6 افزایش مییابد. در این زمان عبارت تست به صورت i<=5 به صورت false ارزیابی میشود و حلقه خاتمه مییابد. اگر بدنه حلقه تنها یک گزاره داشته باشد، لزومی به استفاده از آکولاد {} وجود ندارد.
مثالی از محاسبه مجموع اعداد طبیعی
// Program to compute the sum of natural numbers from 1 to 100.
fun main(args: Array<String>) {
var sum = 0 var i = 100
while (i != 0) { sum += i // sum = sum + i; --i } println("sum = $sum")
}
خروجی برنامه فوق به صورت زیر است:
sum = 5050
در برنامه فوق متغیر sum با مقدار 0 آغاز میشود و i در ابتدا دارای مقدار 100 است. در هر بار تکرارِ حلقه while، متغیر sum به مقدار sum+1 انتساب مییابد و مقدار به اندازه 1 واحد کاهش مییابد تا این که i باربر با 0 باشد. برای تصور بهتر به نمونه اجرای زیر توجه کنید:
1st iteration: sum = 0+100 = 100, i = 99 2nd iteration: sum = 100+99 = 199, i = 98 3rd iteration: sum = 199+98 = 297, i = 97 ... .. ... ... .. ... 99th iteration: sum = 5047+2 = 5049, i = 1 100th iteration: sum = 5049+1 = 5050, i = 0 (then loop terminates)
در بخش عملگرهای مقایسه و منطقی این مقاله در خصوص عبارتهای تست بیشتر توضیح دادهایم.
حلقه do…while در کاتلین
حلقه do…while در کاتلین شبیه حلقه while است و تنها یک تفاوت با آن دارد. بدنه حلقه do…while یک بار پیش از بررسی عبارت تست، اجرا میشود. ساختار آن به صورت زیر است:
do { // codes inside body of do while loop
} while (testExpression);
طرز کار حلقه do…while چگونه است؟
کد درون بدنه سازه do یک بار و بدون بررسی عبارت تست (testExpression) اجرا میشود. سپس عبارت تست بررسی میشود. اگر عبارت تست به صورت true ارزیابی شود، کدهای درون بدنه حلقه اجرا میشوند و عبارت تست دوباره ارزیابی میشود. این فرایند تا زمانی که عبارت تست به صورت false ارزیابی شود ادامه مییابد. زمانی که عبارت تست به صورت false ارزیابی شود، حلقه do..while خاتمه مییابد.
فلوچارت حلقه do..while
مثالی از حلقه do..while
برنامه زیر مجموع اعداد وارد شده از سوی کاربر را تا زمانی که کاربر عدد 0 را وارد کند، محاسبه میکند. برای دریافت ورودی کاربر از تابع ()readline استفاده شده است.
fun main(args: Array<String>) {
var sum: Int = 0 var input: String do { print("Enter an integer: ") input = readLine()!! sum += input.toInt()
} while (input != "0")
println("sum = $sum")
}
خروجی برنامه فوق به صورت زیر است:
Enter an integer: 4 Enter an integer: 3 Enter an integer: 2 Enter an integer: -6 Enter an integer: 0 sum = 3