Rust

Rust — شمارشی ها (Enums)

آخرین بروزرسانی: 1404/08/14

شمارشی ها (Enums)

شمارشی (Enum) یعنی نوعی که چند حالت محدود دارد. مثل جهت های بازی یا روزهای هفته. بنابراین «شمارشی ها در راست» کمک می کنند حالت ها را ایمن و خوانا مدیریت کنیم.

ساخت یک Enum

با کلیدواژه enum یک نوع می سازیم و حالت ها (Variant) را نام گذاری می کنیم.

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

مشاهده در ادیتور

استفاده از Enum و انتساب حالت

برای استفاده، یک متغیر می سازیم و با :: یکی از حالت ها را می دهیم.

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

fn main() {
  let my_direction = Direction::Up;
  println!("We are going up!");
}

مشاهده در ادیتور

match روی مقدار Enum

با match برای هر حالت، کد مناسب اجرا می شود. مثل انتخاب مرحله بازی.

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

fn main() {
  let my_direction = Direction::Left;
  match my_direction {
    Direction::Up => {
      println!("Going up");
    }
    Direction::Down => {
      println!("Going down");
    }
    Direction::Left => {
      println!("Going left");
    }
    Direction::Right => {
      println!("Going right");
    }
  }
}

مشاهده در ادیتور

شمارشی با داده همراه

هر حالت می تواند داده داشته باشد. مثل نتیجه ی ورود با پیام.

enum LoginStatus {
  Success(String),
  Error(String),
}

fn main() {
  let result1 = LoginStatus::Success(String::from("Welcome, John!"));
  let result2 = LoginStatus::Error(String::from("Incorrect password"));
  match result1 {
    LoginStatus::Success(message) => {
      println!("Success: {}", message);
    }
    LoginStatus::Error(message) => {
      println!("Error: {}", message);
    }
  }
}

مشاهده در ادیتور

نکته ها و ارتباط ها

نکته: شمارشی ها در راست با match بسیار خوانا می شوند. برای مدل های سفارشی تر، ساختارها را ببین. برای نگه داری زوج های کلید/مقدار، هش مپ مناسب است. همچنین لینک شمارشی ها در راست را برای مرور سریع نگه دار.

گام های تمرین

  1. یک Enum جهت ها بساز و چاپ کن.
  2. با match برای هر جهت پیام بده.
  3. یک Enum نتیجه با پیام بساز.
  4. ورودی متفاوت بده و خروجی را بررسی کن.

جمع بندی سریع

  • Enum چند حالت مشخص را مدل می کند.
  • انتساب حالت با :: انجام می شود.
  • match برای هر حالت کد جدا می زند.
  • Variant می تواند داده همراه داشته باشد.