شرط در برنامهنویسی و زندگی روزمره: حکم «اگر... آنگاه...»
شرط چیست؟ ریشه در منطق و تصمیمگیری
شرط (Condition)1 دستوری است که یک گزاره را بررسی میکند و بر اساس درست یا نادرست بودن آن، تصمیم میگیرد چه کاری انجام شود. در زندگی روزمره مدام از شرط استفاده میکنیم: «اگر باران ببارد، چتر بردارم» یا «اگر به لبهٔ پرتگاه رسیدی، برگرد». در برنامهنویسی، شرطها قلب تصمیمگیری الگوریتمها هستند. یک الگوریتم بدون شرط، فقط دنبالهای از دستورات خطی است؛ اما با اضافه شدن شرط، میتواند مسیرهای مختلف را انتخاب کند.
به بیان ساده، یک شرط شامل سه بخش اصلی است: ۱. گزاره یا عبارت بولی (Boolean expression)2 که نتیجهاش یا درست است یا نادرست. ۲. کاری که در صورت درست بودن انجام میشود.۳. (اختیاری) کاری که در صورت نادرست بودن انجام میشود. این ساختار را با عنوان «اگر-آنگاه-درغیراینصورت» میشناسیم.
اجزای اصلی یک دستور شرطی: گزاره، بدنه و شاخهها
در کدنویسی (مثلاً زبان پایتون)، یک دستور شرطی با if شروع میشود. بعد از آن یک عبارت بولی میآید و سپس دونقطه. در خط بعد با تورفتگی، دستورات درون شرط نوشته میشوند. برای بخش «در غیر این صورت» از else و برای بررسی چند شرط پشت سر هم از elif (مخفف else if) استفاده میشود.
عملگرهای مقایسه3 ابزارهایی هستند که به ما اجازه میدهند دو مقدار را مقایسه کنیم. مهمترین عملگرها عبارتند از: برابری (==)، نامساوی (!=)، بزرگتر (>)، کوچکتر (<)، بزرگتر یا مساوی (>=) و کوچکتر یا مساوی (<=).
| عملگر | معنی | مثال درست |
|---|---|---|
| == | برابری | 5 == 5 |
| != | نا مساوی | 3 != 4 |
| > | بزرگتر | 10 > 7 |
| < | کوچکتر | 2 < 9 |
شرطهای تودرتو و ترکیب چند شرط با عملگرهای منطقی
گاهی نیاز است چند شرط را همزمان بررسی کنیم یا یک شرط را درون شرط دیگر قرار دهیم. به شرط درون شرط، «شرط تودرتو» (Nested condition)4 میگویند. برای ترکیب شرطها از عملگرهای منطقی5 مانند و (and)، یا (or) و نقیض (not) استفاده میکنیم.
مثال ترکیب با «و»: برای ورود به یک باشگاه، باید هم سن فرد بیشتر از 18 سال باشد و هم کارت عضویت داشته باشد. در قالب شرط: اگر (سن > 18) و (کارت_عضویت == درست) پس اجازه ورود بده.
کاربرد عملی: سامانه نمرهدهی مدرسه و تشخیص قبولی
فرض کنید معلمی میخواهد برنامهای بنویسد که بر اساس نمرهٔ دانشآموز، وضعیت قبولی یا رد شدن را تعیین کند. شرط به این صورت نوشته میشود: اگر نمره بزرگتر یا مساوی 10 باشد، عبارت «پذیرفته شدی» نمایش داده شود، در غیر این صورت «متاسفانه رد شدی». اما میتوانیم شرط را دقیقتر کنیم: اگر نمره بین 10 تا 12 باشد «قبول ضعیف»، بین 12 تا 15 «قبول متوسط» و بالاتر از 15 «قبول عالی». این کار با elif انجام میشود.
مثال کد فرضی پایتون (فقط برای درک ساختار):
if نمره >= 18:
print("عالی")
elif نمره >= 15:
print("خیلی خوب")
elif نمره >= 10:
print("قبول")
else:
print("رد")
در بازیهای رایانهای، شرطها برای تشخیص برخورد دو شخصیت استفاده میشوند: «اگر موقعیت بازیکن با موقعیت دشمن یکی شد، جان بازیکن کم شود». یا در رباتهای مسیر یاب: «اگر سنسور جلوی ربات مانعی تشخیص داد، بچرخ در غیر این صورت مستقیم برو».
چالشهای مفهومی در شرطها و اشتباهات رایج
پاسخ: در ریاضی، علامت = بیانگر تساوی دو طرف است. در برنامهنویسی، یک علامت مساوی عمل «نسبتدهی مقدار» (مقدار سمت راست را در متغیر سمت چپ ذخیره میکند) و دو علامت مساوی برای مقایسه برابری استفاده میشود. اشتباه نوشتن if (x = 5) به جای if (x == 5) یکی از رایجترین خطاهای تازهکاران است.
پاسخ: وقتی شرایط به صورت سلسلهمراتبی باشند و وابستگی متوالی وجود داشته باشد، شرط تودرتو خوانایی بهتری دارد. مثلاً: ابتدا بررسی میکنیم آیا کاربر وارد شده است؟ اگر بله، سپس بررسی میکنیم آیا اجازه دسترسی دارد؟ این ساختار با if داخل if خواناتر از ترکیب with and است. اما برای شرایط مستقل و ساده، استفاده از عملگرهای منطقی کوتاهتر و بهتر است.
پاسخ: خیر، بخش else اختیاری است. بسیاری از شرطها فقط در صورت درست بودن یک گزاره کاری انجام میدهند و در غیر آن صورت هیچکاری لازم نیست. برای مثال «اگر دمای هوا از 30 درجه بیشتر شد، کولر را روشن کن» نیازی به else ندارد. با این حال اضافه کردن else حتی برای هیچکار نکردن میتواند قصد برنامهنویس را واضحتر کند.
جداول مقایسه انواع ساختارهای شرطی
| نوع ساختار | تعداد شاخهها | مثال کاربردی |
|---|---|---|
| if ساده | یک شاخه (فقط درست) | هشدار دادن در صورت کمبود موجودی |
| if-else | دو شاخه (درست و نادرست) | قبولی/رد شدن در آزمون |
| if-elif-else | چندین شاخه | درجهبندی نمرات (عالی، خوب، قبول، رد) |
پاورقیها
1. شرط (Condition): در علوم رایانه و منطق، عبارتی است که مقدار درست یا نادرست دارد و جریان اجرای برنامه بر اساس آن تغییر میکند.
2. عبارت بولی (Boolean expression): عبارتی که نتیجهاش مقادیر «درست» (True) یا «نادرست» (False) است. نام آن از جورج بول، ریاضیدان انگلیسی، گرفته شده است.
3. عملگرهای مقایسه (Comparison operators): نمادهایی مانند ==, !=, >, <, >=, <= که دو مقدار را مقایسه کرده و یک مقدار بولی برمیگردانند.
4. شرط تودرتو (Nested condition): حالتی که یک دستور شرطی درون بلوک شرطی دیگر قرار میگیرد.
5. عملگرهای منطقی (Logical operators): عملگرهایی مانند and (و)، or (یا) و not (نقیض) که برای ترکیب چند عبارت بولی استفاده میشوند.