ویرگول
ورودثبت نام
Soheib Papi
Soheib Papiیک برنامه نویس علاقه مند به یادگیری.
Soheib Papi
Soheib Papi
خواندن ۳ دقیقه·۲ سال پیش

Operator Lifting in C#

ساختار Nullable<T> عملگرهایی مانند <, >, یا حتی == را تعریف نمی‌کند. با این وجود، کد زیر به درستی کامپایل شده و اجرا می‌شود:

int? x = 5; int? y = 10; bool b = x < y; // true

این موضوع به این دلیل کار می‌کند که کامپایلر عملگر کوچک‌تر از (less-than) را از نوع مقدار اصلی (underlying value type) قرض می‌گیرد یا به اصطلاح "بالا می‌برد" (lift می‌کند). به صورت مفهومی، کامپایلر عبارت مقایسه‌ای بالا را به این صورت ترجمه می‌کند:

bool b = (x.HasValue && y.HasValue) ? (x.Value < y.Value) : false;

به عبارت دیگر، اگر هر دو متغیر x و y دارای مقدار باشند، مقایسه از طریق عملگر کوچک‌تر از (less than) مربوط به نوع int انجام می‌شود؛ در غیر این صورت، مقدار false بازمی‌گرداند.

به عبارت دیگر، عملگرهای تعریف‌شده برای انواع مقدار (Value Types) به‌طور خودکار برای انواع nullable آن‌ها نیز کار می‌کنند. برای مثال، اگر عملگر + برای int تعریف شده باشد، به صورت خودکار برای Nullable<int> (یعنی int?) نیز قابل استفاده خواهد بود.

در سی‌شارپ، Operator Lifting به فرآیندی گفته می‌شود که طی آن عملگرها (Operators) برای انواع nullable (Nullable<T>) نیز پشتیبانی می‌شوند. این ویژگی امکان استفاده از عملگرهای ریاضی، منطقی و مقایسه‌ای را برای انواع nullable فراهم می‌کند، به‌طوری که رفتار عملگرها برای مقدار null به‌درستی مدیریت می‌شود.

چرا Operator Lifting اهمیت دارد؟

فرض کنید می‌خواهید روی متغیرهایی کار کنید که ممکن است مقدار null داشته باشند. بدون پشتیبانی از Operator Lifting، باید قبل از هر عملیات، وجود مقدار (HasValue) را به‌صورت دستی بررسی کنید. اما سی‌شارپ این کار را با قابلیت lifting ساده کرده است.

مثال:

در زیر یک مثال ساده از عملیات ریاضی روی انواع nullable آورده شده است:

int? a = 10; int? b = null; int? result = a + b; Console.WriteLine(result); // Output: null

توضیح:

  1. مقدار a برابر 10 است و مقدار b برابر null.
  2. هنگام استفاده از عملگر +، به دلیل اینکه یکی از متغیرها null است، نتیجه نیز null می‌شود.
  3. این رفتار مطابق قوانین null propagation در سی‌شارپ است.

عملگرهای پشتیبانی‌شده

عملگرهای زیر در سی‌شارپ برای انواع nullable lifted شده‌اند:

  • عملگرهای ریاضی: +, -, *, /, %
  • عملگرهای مقایسه‌ای: <, >, <=, >=, ==, !=
  • عملگرهای منطقی: &, |, ^

مثال‌های کاربردی:

1. مقایسه اعداد nullable:

int? x = 5; int? y = null; bool isEqual = x == y; // Output: false

2. ترکیب مقادیر nullable:

double? value1 = 2.5; double? value2 = null; double? sum = value1 * 3 + value2; // Output: null

نکات مهم:

  1. اگر یکی از مقادیر nullable null باشد، نتیجه معمولاً null خواهد بود.
  2. اگر هر دو مقدار nullable باشند و مقداری داشته باشند، عملگر روی مقادیر اجرا می‌شود.
  3. در صورت استفاده از عملگرهای منطقی مانند && یا ||، رفتار بر اساس قوانین کوتاه‌سازی (short-circuiting) عملگرها تنظیم می‌شود.

نتیجه‌گیری

قابلیت Operator Lifting یکی از ویژگی‌های بسیار کاربردی در سی‌شارپ است که باعث ساده‌تر شدن کار با انواع nullable می‌شود. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا کدهای خواناتر، مختصرتر و امن‌تر در برابر خطاهای مرتبط با null بنویسند.

۰
۰
Soheib Papi
Soheib Papi
یک برنامه نویس علاقه مند به یادگیری.
شاید از این پست‌ها خوشتان بیاید