آموزش زبان Rust | انواع داده‌ها و ساختارها

انواع داده‌های اولیه

در زبان Rust، انواع داده‌های اولیه (Primitive Data Types) پایه‌ای‌ترین ساختمان‌های داده هستند که برای ذخیره‌سازی مقادیر ساده به کار می‌روند. Rust یک زبان «به‌شدت نوع‌دار» (Statically Typed) است؛ یعنی نوع هر متغیر در زمان کامپایل مشخص می‌شود و کامپایلر باید بداند هر مقدار از چه نوعی است. با این حال، در بسیاری از موارد خود کامپایلر می‌تواند نوع را از روی مقدار تشخیص دهد و نیازی به تعیین صریح نوع نیست.

انواع داده‌های اولیه در Rust به چند دسته اصلی تقسیم می‌شوند:

۱. اعداد صحیح (Integer Types)

اعداد صحیح اعدادی هستند که بدون بخش اعشاری نوشته می‌شوند. Rust برای این نوع داده‌ها چندین زیرشاخه دارد که بر اساس دو ویژگی تقسیم‌بندی می‌شوند: تعداد بیت‌ها (اندازه) و علامت‌داری (Signed/Unsigned).

  • انواع علامت‌دار (Signed) که می‌توانند مقدار منفی هم بگیرند: i8، i16، i32، i64، i128 و isize
  • انواع بدون علامت (Unsigned) که فقط مقادیر صفر و مثبت می‌پذیرند: u8، u16، u32، u64، u128 و usize

عدد بعد از حرف i یا u تعداد بیت‌های اشغال‌شده در حافظه را نشان می‌دهد. مثلاً i32 یک عدد صحیح علامت‌دار ۳۲ بیتی است و محدوده مقداری آن از ‎-2,147,483,648 تا 2,147,483,647 می‌باشد. نوع isize و usize به اندازه معماری سیستم وابسته‌اند (روی سیستم‌های ۶۴ بیتی معادل ۶۴ بیت و روی سیستم‌های ۳۲ بیتی معادل ۳۲ بیت هستند) و بیشتر برای اندیس‌گذاری آرایه‌ها و مجموعه‌ها کاربرد دارند.

نوع پیش‌فرض اعداد صحیح در Rust i32 است؛ یعنی اگر نوع را مشخص نکنید و کامپایلر نتواند نوع خاصی را استنباط کند، i32 در نظر گرفته می‌شود.

مثال:

let x: i32 = 42;
let y: u8 = 255;
let z = 100; // نوع پیش‌فرض i32

۲. اعداد اعشاری (Floating-Point Types)

برای ذخیره اعدادی که بخش اعشاری دارند از دو نوع استفاده می‌شود:

  • f32: عدد اعشاری ۳۲ بیتی با دقت تک (Single Precision)
  • f64: عدد اعشاری ۶۴ بیتی با دقت دوگانه (Double Precision)

نوع پیش‌فرض اعداد اعشاری در Rust f64 است، چون روی پردازنده‌های مدرن تقریباً به همان سرعت f32 عمل می‌کند اما دقت بیشتری دارد.

let pi: f64 = 3.14159;
let gravity = 9.8; // نوع پیش‌فرض f64

نکته مهم: در Rust برای اعداد اعشاری از نقطه (.) به عنوان جداکننده بخش اعشاری استفاده می‌شود، نه ممیز.

۳. نوع بولی (Boolean Type)

نوع bool تنها دو مقدار می‌تواند داشته باشد: true (درست) و false (غلط). این نوع معمولاً در شرط‌ها (مثل if) و عبارات منطقی کاربرد دارد و اندازه آن یک بایت است.

let is_active: bool = true;
let is_finished = false;

۴. نوع کاراکتر (Character Type)

نوع char در Rust برای نگهداری یک کاراکتر یونیکد (Unicode Scalar Value) به کار می‌رود. کاراکترها با علامت نقل‌قول تک (') نوشته می‌شوند، نه با نقل‌قول دوگانه. اندازه char چهار بایت است و می‌تواند حروف انگلیسی، اعداد، علائم و حتی ایموجی و حروف فارسی را در خود نگه دارد.

let letter: char = 'A';
let persian = 'س';
let emoji = '😊';

دقت کنید که char با رشته (String یا &str) یکسان نیست؛ char فقط یک کاراکتر واحد است، در حالی که رشته مجموعه‌ای از کاراکترهاست و با نقل‌قول دوگانه (") نوشته می‌شود.

let single: char = 'x';      // یک کاراکتر
let text: &str = "x";        // یک رشته شامل یک کاراکتر

۵. نوع واحد (Unit Type)

نوع () که به آن «تایپ واحد» می‌گویند، نوعی است که هیچ مقداری ندارد یا به عبارتی تنها یک مقدار با نام () دارد. این نوع زمانی به کار می‌رود که یک تابع یا عبارت هیچ مقداری را برنگرداند.

fn print_message() {
    println!("سلام");
}
// این تابع در واقع چیزی از نوع () برمی‌گرداند

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

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3
  • 4