
سلام و روزبخیر به همه. این هفته بر اساس قولی که داده بودیم میخوایم بریم سراغ «کنترل گردش» یا 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 انجام دهیم میتونیم از {} استفاده کنیم:
علاوه بر این میتونیم برای چند مقدار یک عمل خاص را انجام دهیم:
خوب اینم از بحث گردش کنترل. متوقف نشید و مثال حل کنید.