با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمند به دوره آموزش کاتلین هستند. در جلسه قبل به آموزش انواع داده های پایه در کاتلین پرداختیم. در این جلسه به آموزش جریان کنترل در کاتلین می پردازیم.
در آموزش جریان کنترل در کاتلین ، می خواهیم انواع مکانیزم های جریان کنترل در کاتلین را مورد بحث قرار دهیم.
کاتلین یک بان کاربردی است و مثل هر زبان کاربردی دیگر در آن “if” یک عبارت محسوب می شود؛ نه یک کلمه کلیدی.
عبارت “if” هر گاه که لازم باشد قادر است که مقدار اولیه را برگرداند.
مانند دیگر زبان های برنامه نویسی، بلوک “if-else” به عنوان یک اپراتور بررسی اولیه شرطی استفاده می شود.
در مثال زیر ما دو متغیر را مقایسه خواهیم کرد و خروجی مورد نیاز را مطابق با آن ارائه خواهیم داد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | fun main(args: Array<String>) { val a:Int = 5 val b:Int = 2 var max: Int if (a > b) { max = a } else { max = b } print("Maximum of a or b is " +max) // As expression // val max = if (a > b) a else b } |
قطعه کد بالا خروجی زیر را در نتیجه مرورگر تولید می کند.
مثال زیر از یک خط کد دیگر نیز استفاده می کند که نشان می دهد چگونه از عبارت “If” بعنوان عبارت استفاده کنیم.
1 | Maximum of a or b is 5 |
در ادامه آموزش جریان کنترل در کاتلین به استفاده از Use of When می پردازیم.
اگر با زبان های برنامه نویسی دیگر آشنا باشید، ممکن است اصطلاح سوئیچ switch را شنیده باشید.
switch یک اپراتور شرطی است که می تواند چندین شرایط را برای یک متغیر خاص اعمال کند.
اپراتور “when” مقدار متغیر متقابل را با شرایط شاخه ای branch conditions تطابق می دهد.
اگر این مقدار برای شرایط شاخه ای قانع کنده باشد در آن صورت می توانید عبارت درون محدوده آن را اجرا نمایید.
در مثال زیر می توانید درک بهتری از “when” در کاتلین به دست آورید.
1 2 3 4 5 6 7 8 9 10 11 | fun main(args: Array<String>) { val x:Int = 5 when (x) { 1 -> print("x = = 1") 2 -> print("x = = 2") else -> { // Note the block print("x is neither 1 nor 2") } } } |
قطعه کد بالا خروجی زیر را در نتیجه مرورگر تولید می کند.
1 | x is neither 1 nor 2 |
در مثال بالا، کامپایلر کاتلین با مقدار x با شاخه ی داده شده برابر است.
اگر کامپایلر با هیچ یک از شاخه ها برابر نباشد؛ در این صورت شروع به اجرای بخش های دیگری می کند.
قرار دادن چندین checks در یک خط با استفاده از “,” درون checks نوع دیگری از انعطاف پذیری در کاتلین، است.
بگذارید مثال فوق را به صورت زیر ویرایش کنیم.
1 2 3 4 5 6 7 8 9 10 | fun main(args: Array<String>) { val x:Int = 5 when (x) { 1,2 -> print(" Value of X either 1,2") else -> { // Note the block print("x is neither 1 nor 2") } } } |
قطعه کد بالا خروجی زیر را در نتیجه مرورگر تولید می کند
1 | x is neither 1 nor 2 |
LOOP انعطاف پذیری را برای هر نوع ساختار داده ای تکرار می کند.
همانند سایر زبان های برنامه نویسی، کاتلین نیز از بسیاری از روش های Looping پشتیبانی میکند.، اما در میان آنها “For” یکی از موفق ترین ها است.
پیاده سازی و استفاده از For loop بسیار شبیه به استفاده از آن ها در JAVA است.
مثال زیر نشان می دهد که چطور می توان از مثال real-life استفاده کرد.
1 2 3 4 | fun main(args: Array<String>) { val items = listOf(1, 2, 3, 4) for (i in items) println("values of the array"+i) } |
در کد بالا، ما یک لیست را به نام “items” ایجاد کردیم و از آن به عنوان for loop استفاده می کنیم که از طریق فهرست تعریف شده تکرار می شود و ارزش آن را در مرورگر نمایش می دهیم که به صورت خروجی زیر است.
1 2 3 4 | values of the array1 values of the array2 values of the array3 values of the array4 |
در زیر از نمونه دیگری از کد استفاده شده که در آن از برخی از توابع کتابخانه وجود دارند تا کار توسعه را راحت تر کنند.
1 2 3 4 5 6 7 | fun main(args: Array<String>) { val items = listOf(1, 22, 83, 4) for ((index, value) in items.withIndex()) { println("the element at $index is $value") } } |
قطعه کد بالا را کامپایل کرده و سپس در زمینه کدگذاری خود اجرا می نماییم.
قطعه کد بالا خروجی زیر را در نتیجه مرورگر تولید می کند.
1 2 3 4 | the element at 0 is 1 the element at 1 is 22 the element at 2 is 83 the element at 3 is 4 |
شیوه کار While و Do-While دقیقاً مشابه شیوه کار آن ها در زبان های برنامه نویسی دیگر است.
تنها تفاوت بین این دو loops، این است که در Do-while loop شرایط در پایان حلقه آزمایش خواهد شد.
مثال زیر استفاده از While loop نشان می دهد.
1 2 3 4 5 6 7 8 9 | fun main(args: Array<String>) { var x:Int = 0 println("Example of While Loop--") while(x< = 10) { println(x) x++ } } |
قطعه کد بالا خروجی زیر را در نتیجه مرورگر تولید می کند.
1 2 3 4 5 6 7 8 9 10 11 12 | Example of While Loop-- 0 1 2 3 4 5 6 7 8 9 10 |
علاوه بر این کاتلین از loop دیگری با عنوان Do-While loop استفاده می کند که یک بار اجرا می شود و سپس به بررسی شرایط می پردازد.
مثال زیر استفاده از Do-While loop را نشان می دهد.
1 2 3 4 5 6 7 | fun main(args: Array<String>) { var x:Int = 0 do { x = x + 10 println("I am inside Do block---"+x) } while(x <= 50) } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
در کد بالا، کامپایلر کاتلین بلوک DO را اجرا خواهد کرد، سپس برای بررسی شرایط بلوک اقدام می نماید.
1 2 3 4 5 6 | I am inside Do block---10 I am inside Do block---20 I am inside Do block---30 I am inside Do block---40 I am inside Do block---50 I am inside Do block---60 |
اگر با هر زبان برنامه نویسی آشنا باشید، باید یک ایده از کلمات کلیدی مختلف داشته باشید که به جریان کنترل در برنامه کمک کند.
در زیر کلمات کلیدی مختلفی هستند که می توانند برای کنترل loops ها یا هر نوع دیگری از جریان کنترل استفاده شوند.
Return − یک کلمه کلیدی است که تعدادی از مقادیر را برای انجام تابع فراخوانی از تابع فراخوانی برمی گرداند.
در مثال زیر ما این سناریو را با استفاده از زمین کدگذاری کاتلین اجرا می کنیم.
1 2 3 4 5 6 7 | fun main(args: Array<String>) { var x:Int = 10 println("The value of X is--"+doubleMe(x)) } fun doubleMe(x:Int):Int { return 2*x; } |
در کد بالا، ما تابع دیگری را فراخوانی کرده و ورودی را با ۲ ضرب می کنیم و مقدار نتیجه را به تابع فراخوانی که تابع اصلی ما است بر می گردانیم.
کاتلین این تابع را به شیوه ای دیگر تعریف می کند که آن را در جلسه بعدی بررسی خواهیم کرد.
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
1 | The value of X is--20 |
Continue & Break − شکستن و پیوستن یکی از بخش های مهم logical problem است.
اگر بعضی از شرایط در “continue” شکست خورده باشند کلمه کلیدی “break” با بررسی شرایط، به آن خاتمه خواهند داد.
همه این عملیات، با سرعت قابل توجهی رخ می دهند.
کاتلین از زبان های برنامه نویسی دیگر باهوش تر است و اجازه استفاده از چندین label را می دهد.
در مثال زیر میتوانید استفاده از این label را ببینید.
1 2 3 4 5 6 7 8 9 10 11 12 | fun main(args: Array<String>) { println("Example of Break and Continue") myLabel@ for(x in 1..10) { // appling the custom label if(x = = 5) { println("I am inside if block with value"+x+"\n-- hence it will close the operation") break@myLabel //specifing the label } else { println("I am inside else block with value"+x) continue@myLabel } } } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
1 2 3 4 5 6 7 | Example of Break and Continue I am inside else block with value1 I am inside else block with value2 I am inside else block with value3 I am inside else block with value4 I am inside if block with value5 -- hence it will close the operation |
همان طور که می بینید کنترل کننده loop را تا زمانی که مقدار x برابر با ۵ باشد ادامه می دهد.
هنگامی که مقدار x به ۵ می رسد، شروع به اجرای بلوک if می کند و دستور breaks به دست می آید تا کل جریان کنترل برنامه به طور کامل اجرا شود.
در این جلسه به آموزش جریان کنترل در کاتلین پرداختیم. در جلسه بعدی به معرفی و بررسی Class & Object در کاتلین خواهیم پرداخت.
با پی وی لرن همراه باشید.