عنوان:

‫بررسی مقادیر بولی تهی‌پذیر و دستورات شرطی در سی شارپ


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۲/۲۷ ۰۷:۵۳
آدرس: www.dntips.ir
در زبان برنامه‌نویسی سی شارپ، نوع داده bool? یا Nullable برای تعریف متغیرهای بولی (Boolean) استفاده می‌شود که می‌توانند سه مقدار داشته باشند: true (درست)، false (غلط) و null (تهی). این ویژگی زمانی کاربرد دارد که نیاز به نمایش عدم قطعیت یا مقدار نامشخص برای یک مقدار بولی داشته باشیم. مقاله اصلی که در اختیار دارید، به بررسی روش‌های مختلف استفاده از مقادیر بولی تهی‌پذیر در دستورات شرطی (if) در سی شارپ می‌پردازد و به این سوال پاسخ می‌دهد که آیا تفاوتی بین این روش‌ها وجود دارد یا خیر.

روش‌های مقایسه مقدار بولی تهی‌پذیر با true
در سی شارپ، چندین روش برای بررسی اینکه آیا یک مقدار bool? برابر با true است وجود دارد. دو روش رایج عبارتند از:
  • if (FooBar() == true)
  • if (FooBar() ?? false)
در قطعه کد بالا، FooBar() تابعی است که یک مقدار bool? برمی‌گرداند. روش اول، مقدار برگشتی تابع را مستقیماً با true مقایسه می‌کند. روش دوم از عملگر ادغام تهی (??) استفاده می‌کند. این عملگر، مقدار سمت چپ خود را برمی‌گرداند اگر تهی نباشد؛ در غیر این صورت، مقدار سمت راست خود را برمی‌گرداند. در این مورد، اگر FooBar() مقدار null برگرداند، عملگر ?? مقدار false را برمی‌گرداند.

بررسی عملکرد و تفاوت‌ها
نویسنده مقاله، با بررسی کد میانی (IL) تولید شده توسط کامپایلر سی شارپ، به این نتیجه رسید که هر دو روش فوق، دقیقاً یک کد IL را تولید می‌کنند. به عبارت دیگر، از نظر عملکرد، هیچ تفاوتی بین این دو روش وجود ندارد. انتخاب بین این دو روش، صرفاً به سلیقه شخصی برنامه‌نویس بستگی دارد. نویسنده مقاله، استفاده از عملگر ادغام تهی (??) را ترجیح می‌دهد، زیرا به نظر او خوانایی کد را افزایش می‌دهد.

توضیح عملگر ادغام تهی (??)
عملگر ادغام تهی (??) یک عملگر دودویی است که در سی شارپ برای ساده‌سازی مدیریت مقادیر تهی استفاده می‌شود. این عملگر، مقدار سمت چپ خود را برمی‌گرداند اگر تهی نباشد؛ در غیر این صورت، مقدار سمت راست خود را برمی‌گرداند. به عنوان مثال:
int? x = null;
int y = x ?? -1; // y برابر با -1 خواهد بود
در مثال بالا، اگر x مقدار null داشته باشد، y برابر با -1 خواهد شد. در غیر این صورت، y برابر با مقدار x خواهد بود.

متدGetValueOrDefault()
یکی دیگر از روش‌های کار با مقادیر بولی تهی‌پذیر، استفاده از متد GetValueOrDefault() است. این متد، مقدار متغیر bool? را برمی‌گرداند اگر مقدار داشته باشد؛ در غیر این صورت، مقدار پیش‌فرض نوع bool (یعنی false) را برمی‌گرداند. این متد، یک نسخه اضافه بارگذاری شده نیز دارد که به شما امکان می‌دهد یک مقدار پیش‌فرض سفارشی را مشخص کنید.
bool? flag = null;
bool result = flag.GetValueOrDefault(true); // result برابر با true خواهد بود

نتیجه‌گیری
در سی شارپ، برای بررسی مقدار true بودن یک متغیر bool? در دستورات شرطی، هم می‌توان از مقایسه مستقیم با true و هم از عملگر ادغام تهی (??) استفاده کرد. از نظر عملکرد، تفاوتی بین این دو روش وجود ندارد و انتخاب بین آن‌ها به سلیقه شخصی بستگی دارد. عملگر ادغام تهی (??) و متد GetValueOrDefault() ابزارهای قدرتمندی برای مدیریت مقادیر تهی در سی شارپ هستند و به افزایش خوانایی و کاهش پیچیدگی کد کمک می‌کنند.


مشاهده مطلب اصلی