سلام و روزبخیر به همه. این هفته بر اساس قولی که داده بودیم میخوایم بریم سراغ «کنترل گردش» یا Flow Control
, در زبان برنامهنویسی کاتلین(Kotlin) و قطعا مطالعه قسمت قبل مثل همیشه ضروری هست:
در زبان برنامهنویسی Kotlin گردش کار و قواعد مورد استفاده در اون بسیار شبیه به زبانهای دیگه هست. اما بگذارید قبل از اینکه وارد دستورات بشویم، یک توضیحی بدیم در مورد مفهوم کنترل گردش برای کسایی که دارن همزمان با ما برنامهنویسی را هم یاد میگیرن:
تعریف ساده «کنترل گردش»:
تغییر فرآیند اجرای دستورات بر اساس یکسری شروط منطقی با خروجیهای بله و خیر یا درست و غلط و تصمیمگیری روی آنها.
مثال: فرآیند درست کردن ماکارونی. مثلاْ توی مرحله اول پختن ماکارونی این سوال را از خودمون میپرسیم که: «آیا ماکارونی داریم؟». اگر(if) جواب مثبت(true) باشه یک کاری میکنیم - مثلا میریم آب داغ میکنیم یا بررسی میکنیم ببینیم سس داریم یا نه - و در غیر اینصورت(else) اگر پاسخ منفی(false) باشه اونوقت یک کار دیگه ای میکنیم - مثلاً میریم ماکارونی میخریم.
با این تعریف ساده و نشانههایی که از خودمون در توضیح به جا گذاشتیم میتونیم بریم سراغ اصل ماجرا. در زبان کاتلین دو - یا به عبارتی هم سه - دستور برای کنترل اجرای برنامه if
و if..else
و when
.
if
اولین دستور کنترل گردش دستور if
هست. ساختار این دستور به شکل زیر هست:
در این دستور و در تمام دستورات کنترل گردش مقدار condition
تنها میتواند مقدار درست true
یا غلط false
داشته باشه. در صورتی که حاصل condition
برابر true
باشد، گزارههای داخل شرط اجرا شده و در غیر اینصورت این دستور اجرا نمیشه. یک مثال دیگه ببینیم:
همونطور که در مثال بالا میبینیم، چون باقیمانده number
به 2
مقدار 0
دارد و در نتیجه شرط خروجی true
دارد، دستورات داخل گزاره شرط اجرا میشود. همونطور که گفتیم condition
میتونه هر گزاره شرطی باشه که خروجی true
یا false
داشته باشه. در مثال زیر ما از کلمه کلیدی is
برای بررسی نوع ثابت number
استفاده کردیم که خروجی آن true
یا false
هست استفاده کردیم:
if..else
گزاره if..else
روش عملکردش این هست که اگر مقدار condition
حاصلش true
باشه گزارههای داخل if
اجرا میشه و اگر حاصل false
باشه گزارههای داخل else
اجرا خواهد شد.
مثال زیر میتونه گویاتر باشه:
همونطور که در مثال بالا میبینیم چون شرط number % 2 == 0
صادق نیست گزارههای داخل else
اجرا شده و خروجی بالا را ایجاد میکند. اما یکی از ویژگیهای فوقالعادهای که کاتلین داره و خیلی از زبانها ندارند و واقعاً کاربردیه اینه که شما میتونین خروجی اجرای دستورات داخل if..else
را به عنوان مقدار بازگشتی یا return value
داخل یک متغیر بریزین! مثال زیر را ببینیم:
همونطور که در مثال بالا میبینیم ما مقدار داخل else
را در متغیر result
ریختیم و بعد از if..else
آن را چاپ کردیم. دقت کنیم ما اینجا از کل if..else
به عنوان یک گزاره که یک نتیجه برمیگردونه استفاده میکنیم و در نتیجه این فرآیند برای if
تنها امکانپذیر نیست و اگر این کار را بکنیم خطای زیر را دریافت میکنیم:
نکته دیگهای که وجود داره اینه که اگر ما داخل بخش if
یا else
بیش از یک مقدار برگشتی داشته باشیم فقط مقدار آخر برمیگرده:
و اینکه این مقدار بازگشتی برای هر نوعی امکانپذیره:
در واقع با این روش کاتلین نیاز به اپراتور سهگانه یا ternary operator
را حذف کرده و دیگه نیازی بهش نیست.
توجه کنید که شما هر تعداد if..else
را که بخواهید میتونید توی هم استفاده کنید تا بتونید به بهترین شکل کنترل گردش کدتون را به دست بگیرید ولی حواستون باشه که استفاده if
های تو در تو یا nested if
میتونه بعداً در بازبینی و نگهداری و تغییر در کد کارتون را خیلی سخت کنه. پس سعی کنید تا میتونید if..else
های ساده داشته باشید و برید به سمت if-less programming یا برنامهنویسی بدون if
.
when
گزاره when
که در زبانهای مختلفی مانند ++C و Java و PHP و غیره با نام switch..case
شناخته میشه، کارکردش تصمیمگیری در مورد مقدار ورودی به آن هست و بسیار قدرتمندتر از switch..case
است. گزاره when
قابلیت انجام اعمال مختلفی روی مقادیر انواع کاتلین مثل Int
Byte
، String
و Short
و یا هر شی دیگری دارد. مثال زیر را ببینیم:
در مثال بالا گزاره when
مقدار number
را بررسی کرده و بر اساس مقدار آن و مقادیری که داخل آن وجود دارد اقدام به تصمیمگیری میکند که در بالا منجر به چاپ گزاره داخل else
که معادل break
در switch..case
است، شده است. حالا اگر بخواهیم بیش از یک دستور را در زمان یافتن مقدار مورد بررسی در when
انجام دهیم میتونیم از {}
استفاده کنیم:
علاوه بر این میتونیم برای چند مقدار یک عمل خاص را انجام دهیم:
خوب اینم از بحث گردش کنترل. متوقف نشید و مثال حل کنید.