تفاوت عملگرهای | و || در سیشارپ
عملگرهای | و || هر دو به معنی "یا" (OR) هستن و توی منطق برنامهنویسی برای ترکیب شرطها به کار میرن، اما یه فرق مهم بینشون هست که میتونه روی رفتار کدمون تأثیر بذاره. کنجکاوید بدونید این تفاوت چیه؟ بیایید با هم شیرجه بزنیم توی این موضوع!
عملگر | (OR) معمولی
وقتی از | استفاده میکنید، به سیشارپ میگید که همه شرطها رو کامل بررسی کنه، حتی اگه یکی از شرطها true باشه و نتیجه کلی مشخص شده باشه. به عبارت دیگه، این عملگر تکتک شرطها رو چک میکنه و بعد نتیجه نهایی رو میده. این میتونه مفید باشه وقتی بخواهید مطمئن بشید همه شرطها اجرا شدن، مثلاً وقتی هر شرط یه عملیات خاص (مثل یه محاسبه) داره.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 | b > 0); // هر دو شرط بررسی میشن
Console.WriteLine(result); // خروجی: true
عملگر || (OR) کوتاهمدار
حالا نوبت || هست که یه کم زیرکتر عمل میکنه! این عملگر به محض اینکه یه شرط true بشه، دیگه بقیه شرطها رو نگاه نمیکنه و نتیجه رو برمیگردونه. به این میگن ارزیابی کوتاهمدار (Short-Circuit Evaluation). این رفتار باعث میشه کد سریعتر اجرا بشه و از بررسیهای غیرضروری یا خطاهای احتمالی جلوگیری کنه، مخصوصاً وقتی شرطهای بعدی به شرط اول وابسته باشن.
مثال:
int a = 5;
int b = 0;
bool result = (a > 0 || b > 0); // شرط دوم بررسی نمیشه چون a > 0 trueه
Console.WriteLine(result); // خروجی: true
تفاوت اصلی کجاست؟
| : همیشه همه شرطها رو چک میکنه، حتی اگه لازم نباشه.
|| : به محض دیدن یه true، بقیه رو ول میکنه و میره جلو.
مثال عملیتر:
int x = 0;
bool check = (x == 0 | 10 / x > 2); // خطا میده چون 10 / 0 بررسی میشه
int x = 0;
bool check = (x == 0 || 10 / x > 2); // خطا نمیده چون شرط دوم چک نمیشه
کی از کدوم استفاده کنیم؟
از | وقتی استفاده کنید که بخواهید همه شرطها اجرا بشن، مثلاً برای محاسبات یا بررسیهایی که باید کامل انجام شن.
از || وقتی استفاده کنید که بخواهید کدهاتون سریعتر و ایمنتر باشه و بعد از یه true نیازی به ادامه نداشته باشید (که معمولاً همین رو ترجیح میدیم!).