خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه استفاده از Enums در TypeScript

نوع برشماری TypeScript یک روش مفید برای بسته بندی مقادیر مرتبط با معنای واضح است.

enum یا یک نوع شمارش شده، ساختار داده ای است که به شما امکان می دهد مجموعه ای از مقادیر نامگذاری شده را تعریف کنید.

Enums راهی برای نمایش مجموعه ثابتی از مقادیر به عنوان ثابت فراهم می کند. آنها می توانند با دادن نام های معنی دار به مقادیر خاص، کد شما را گویاتر و مستندتر کنند. در اینجا یاد خواهید گرفت که چگونه می توانید از enum ها در TypeScript استفاده کنید.

ایجاد Enum

Enums به طور کلی تعداد ثابتی از گزینه ها را برای یک مقدار معین نشان می دهد. برای مثال، یک عدد که رنگ‌های اصلی را نشان می‌دهد ممکن است مقادیر ثابتی برای قرمز، زرد و آبی داشته باشد.

Enum ها داده ها را به عنوان مجموعه ای از جفت های کلید/مقدار که به عنوان اعضای enum شناخته می شوند، نشان می دهند. کلید همیشه باید یک رشته باشد. با این حال، مقدار – یک عدد افزایش خودکار به طور پیش فرض – می تواند عددی، رشته ای یا محاسبه شود.

می توانید با استفاده از کلمه کلیدی enum یک enum در زبان TypeScript ایجاد کنید. آن را با نام enum و یک جفت بریس فرفری ({}) حاوی اعضای enum دنبال کنید. یک قرارداد نامگذاری رایج جاوا اسکریپت بیان می کند که نام های enum باید با حرف بزرگ شروع شوند.

enum Direction {
  Up,
  Down,
  Left,
  Right
}

این مثال دارای یک enum به نام Direction است. enum دارای یک عضو است که هر جهت را نشان می دهد: بالا، پایین، چپ و راست.

از آنجایی که این کد برای هر یک از کلیدها مقداری مشخص نمی کند، TypeScript به طور خودکار مقادیری را اختصاص می دهد. اولین عضو، Up، دارای مقدار 0 خواهد بود. اعضای باقیمانده هر یک مقدار 1 بزرگتر از اعضای قبلی خواهند داشت. اگر به خاطر سپردن برایتان سخت است، می‌توانید این را به صراحت اعلام کنید:

enum Direction {
  Up = 0,
  Down = 1,
  Left = 2,
  Right = 3,
}

یا می‌توانید به صراحت مقادیر مختلف را اعلام کنید و مقادیر اعلام‌نشده را رها کنید تا مانند قبل به افزایش ادامه دهند:

enum Status {
  Active = 9,
  Inactive, // 10
}

در این مثال، عضو Inactive دارای مقدار 10 است. این رفتار برای enum هایی اعمال می شود که فقط دارای مقادیر عددی هستند، نه آنهایی که دارای رشته یا اعضای ناهمگن هستند.

مطلب مرتبط:   قالب HTML با Go

انواع مختلف Enum

Enum ها در TypeScript یک نوع ضمنی دارند که بر اساس نوع مقادیری که اعضایشان دارند، هستند. متداول ترین نوع، عدد عددی است که رفتار آن در بخش قبل پوشش داده شده است، اما دو تغییر وجود دارد.

تعداد رشته ها

رشته enum enum است که تمام اعضای آن رشته هستند. بر خلاف enum های عددی، که مقادیر به طور خودکار اختصاص داده می شوند، باید هر عضو را با یک رشته مقداردهی اولیه کنید:

enum PrimaryColors {
  Red = "RED",
  Yellow = "YELLOW",
  Blue = "BLUE"
}

اگرچه فهرست‌های رشته‌ای ویژگی‌های افزایش خودکار ندارند، اما اگر آنها را سریالی کنید، ممکن است منطقی‌تر شوند. مقادیر آنها همچنان باید توصیفی و بدون نام اعضا باشد، در حالی که مجموعه ای از مقادیر عددی ممکن است خود توصیف کننده نباشند.

Enums ناهمگن

Enum های ناهمگن، enum هایی هستند که هم شامل اعضای عددی و هم اعضای رشته ای هستند. مثلا:

enum Result {
  Success = "SUCCESS",
  Failure = 0
}

enum های ناهمگن زمانی مفید هستند که اعضای enum داشته باشید که بر اساس زمینه یا معنای خاص هر عضو به انواع مقادیر متفاوتی نیاز دارند. با این حال، اسناد TypeScript از استفاده از enum های ناهمگن جلوگیری می کند زیرا آنها پیچیدگی هایی را ایجاد می کنند که می تواند کد شما را مستعد خطا کند.

تعداد اعضای محاسبه شده و ثابت

هر عضو enum دارای یک مقدار است که می تواند ثابت یا محاسبه شود.

تعداد اعضای ثابت

یک عضو enum در صورتی ثابت است که هر یک از شرایط زیر را برآورده کند.

  1. این اولین عضو enum است و هیچ مقدار اولیه ای ندارد.
  2. این یک مقدار اولیه ندارد و عضو enum قبلی یک ثابت عددی بود.
  3. با یک عبارت enum ثابت مقداردهی اولیه می شود.
مطلب مرتبط:   کار با تاریخ و زمان در Rust

طبق اسناد TypeScript، یک عبارت enum ثابت زیرمجموعه ای از عبارات TypeScript است که می تواند در زمان کامپایل به طور کامل ارزیابی شود. به عنوان مثال، یک رشته یا یک لفظ عددی.

برای مثال، اعضای enums در بلوک کد زیر همگی ثابت هستند:

// CASE 1
enum Direction {
  Up,
  Down,
  Left,
  Right
}

// CASE 2
enum Weekday {
  Monday = 1,
  Tuesday,
  Wednesday,
  Thursday,
  Friday
}

// CASE 3
enum Season {
  Spring = "SPRING",
  Summer = "SUMMER",
  Autumn = "AUTUMN",
  Winter = "WINTER"
}

وقتی اعضای enum ثابت را به جاوا اسکریپت ساده تبدیل می کنید، کد تولید شده از مقادیر تحت اللفظی آنها استفاده می کند. این می تواند برای عملکرد مفید باشد و اشکال زدایی را آسان تر کند.

به عنوان مثال، در اینجا نسخه ترجمه شده از Season enum است:

var Season;
(function (Season) {
    Season["Spring"] = "SPRING";
    Season["Summer"] = "SUMMER";
    Season["Autumn"] = "AUTUMN";
    Season["Winter"] = "WINTER";
})(Season || (Season = {}));

تعداد اعضای محاسبه شده

می توانید از اعضای enum محاسبه شده برای تخصیص مقادیر به اعضای enum بر اساس عبارات یا سایر محاسبات پویا استفاده کنید. مثلا:

enum Size {
  Small = 1,
  Medium = calculateSize(12),
  Large = calculateSize(5)
}

function calculateSize(value: number): number {
  return value * 5;
}

console.log(Size.Large)

Size enum سه عضو دارد: Small، Medium و Large. به صراحت مقدار 1 را به عضو Small اختصاص می دهد. اعضای Medium و Large از یک تابع accountSize برای محاسبه مقادیر خود در زمان اجرا استفاده می کنند.

هنگام کار با اعضای enum محاسبه شده، توجه به این نکته مهم است که مقادیر تا زمان اجرا مشخص نیستند. این ممکن است پیچیدگی و خطاهای بالقوه زمان اجرا را در مقایسه با اعضای enum با مقادیر ثابت ایجاد کند.

مثلا:

var Size;
(function (Size) {
    Size[Size["Small"] = 1] = "Small";
    Size[Size["Medium"] = calculateSize(12)] = "Medium";
    Size[Size["Large"] = calculateSize(5)] = "Large";
})(Size || (Size = {}));

console.log(Size.Large)

بلوک کد بالا نسخه ترجمه شده Size enum است. توجه کنید که چگونه TypeScript مقادیر بازگشتی از ()calculSize را در کد جاوا اسکریپت شامل نمی شود. در عوض، شامل فراخوانی تابع اصلی می شود تا جاوا اسکریپت مقادیر را در زمان اجرا تعیین کند.

مطلب مرتبط:   نحوه استایل دادن به فرم ها با فرم های django-crispy

دسترسی به مقادیر Enum

شما می توانید با استفاده از نماد نقطه شی به مقادیر اعضای enum دسترسی پیدا کنید.

مثلا:

enum Direction {
  Up = 0,
  Down = 1,
  Left = 2,
  Right = 3,
}

console.log(Direction.Left) // 2

نگاشت معکوس شماره های عددی

نگاشت معکوس در enums عددی به توانایی واکشی نام عضو enum مربوطه از مقدار آن اشاره دارد. این می تواند به ویژه هنگام کار با مقادیر عددی مفید باشد، که ممکن است نیاز به رمزگشایی داشته باشید.

به‌طور پیش‌فرض، مقادیر enum در TypeScript به سمت جلو نگاشت می‌شوند، به این معنی که شما فقط می‌توانید به مقدار مرتبط با یک نام دسترسی داشته باشید. با این حال، می توانید به صورت دستی نقشه برداری معکوس را برای بازیابی عضو enum بر اساس مقدار آن انجام دهید.

مثلا:

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

function getDirectionName(directionValue: number): string {
  // Reverse mapping
  const directionName = Direction[directionValue];
  return directionName;
}

console.log(getDirectionName(1)); // "Up"
console.log(getDirectionName(3)); // "Left"

این تابع getDirectionName با دسترسی به نام عضو enum با استفاده از مقدار آن به عنوان یک شاخص، نگاشت معکوس را انجام می دهد. تابع یک directionValue را به عنوان آرگومان می گیرد و نام عضو enum مربوطه را با استفاده از Direction[directionValue] بازیابی می کند.

نگاشت معکوس می تواند در سناریوهایی مفید باشد که در آن شما یک مقدار عددی دارید و باید نام عضو enum مربوطه را تعیین کنید. این یک راه راحت برای کار با enum ها در هر دو جهت جلو و عقب فراهم می کند.

کاربردهای زیادی از Enums وجود دارد

شما می توانید از enum ها در سناریوهای مختلف استفاده کنید، مانند مدیریت دستورات سوئیچ، تعریف پارامترهای تابع، نقشه برداری داده ها، و نمایش انتخاب ها یا تنظیمات.

چه نیاز به نمایش مجموعه محدودی از گزینه‌ها داشته باشید و چه نیاز به مدیریت انتقال‌های حالت پیچیده داشته باشید، enums در TypeScript ابزار ارزشمندی برای افزایش وضوح و ساختار کد شما است.