عنوان:

C# 7 - Binary literals and digit separators


نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۵/۱۲/۲۹ ۱۱:۵۰
آدرس: www.dntips.ir
binary literals و digit separators دو ویژگی جدید در سی‌شارپ 7 هستند که باعث افزایش خوانایی کدها خواهند شد. 

Binary Literals 
از همان نسخه‌های اولیه سی‌شارپ قابلیت تعریف مقادیر عددی در مبنای 10 و 16 موجود بوده و تا قبل از سی‌شارپ 7 روش رایج برای تعریف مقادیر هگزادسیمال استفاده از enum بوده است:
[Flags]
public enum Option
{
None = 0x00,
Option1 = 0x01,
Option2 = 0x02,
Option3 = 0x04,
Option4 = 0x08,
Option5 = 0x10,
Option6 = 0x20,
Option7 = 0x40,
Option8 = 0x80,
All = 0xFF
}

در سی‌شارپ 7 می‌توانیم مقادیر فوق را به صورت باینری بنویسیم:
[Flags]
public enum Option
{
None = 0b00000000,
Option1 = 0b00000001,
Option2 = 0b00000010,
Option3 = 0b00000100,
Option4 = 0b00001000,
Option5 = 0b00010000,
Option6 = 0b00100000,
Option7 = 0b01000000,
Option8 = 0b10000000,
All = 0b11111111
}

Digit Separators 
این ویژگی نیز همانطور که از نامش پیداست به عنوان یک جدا کننده در نظر گرفته خواهند شد؛ به عنوان مثال کد قبل را می‌توانیم به صورت زیر بنوسیم:
[Flags]
public enum Option
{
None = 0b0000_0000,
Option1 = 0b0000_0001,
Option2 = 0b0000_0010,
Option3 = 0b0000_0100,
Option4 = 0b0000_1000,
Option5 = 0b0001_0000,
Option6 = 0b0010_0000,
Option7 = 0b0100_0000,
Option8 = 0b1000_0000,
All = 0b1111_1111
}

همانطور که مشاهده می‌کنید با قرار دادن این جدا کننده، خوانایی کد بیشتر شده است. لازم به ذکر است که در زمان کامپایل، این کاراکتر حذف خواهد شد. در واقع از آن تنها جهت افزایش خونایی در حین کدنویسی استفاده می‌شود:

نظرات

  • وحید نصیری در ۱۳۹۶/۱۱/۳۰ ۸:۵۶
    یک نکته‌ی تکمیلی: بهبود جزئی جداکننده‌های ارقام در C# 7.2

    در C# 7.2، جهت بهبود خوانایی، جداکننده‌ی ارقام را درست پس از پیشوندهای 0b و 0x نیز می‌توان قرار داد:
    class Class‍CS72
    {
       const int intLiteral = 100_000;
       const int binaryLiteral = 0b_0101_0101;
       const int hexLiteral = 0x_FF_FF;
    }
  • وحید نصیری در ۱۳۹۶/۱۲/۰۳ ۱۴:۵۴
    یک نکته‌ی تکمیلی: «TypeScript 2.7: Numeric Separators»  

    یک چنین قابلیتی به TypeScript 2.7 هم اضافه شده‌است:
    const worldPopulationIn2017 = 7_600_000_000;
    const leastSignificantByteMask = 0b1111_1111;
    const papayawhipColorHexCode = 0xFF_EF_D5;