
روز ۱۰: تمرین عملی Rust – Mini Project ۱
بعد از ۹ روز آموزش مفاهیم پایه Rust، نوبت به تمرین عملی میرسد. در روز دهم از سری آموزش «Rust در ۵۰ روز» یک Mini Project ساده اما کاربردی انجام میدهیم تا تمام مفاهیمی که تاکنون یاد گرفتهایم را در یک پروژه واقعی به کار ببریم. این تمرین به شما کمک میکند نه تنها با سینتکس و قواعد Rust آشنا شوید بلکه ذهنیت طراحی کد امن، قابل خواندن و قابل نگهداری را هم تمرین کنید. هدف این پروژه کوچک، تمرین متغیرها، توابع، شرطها، حلقهها، Scope و Shadowing است و در عین حال خروجی ملموس و قابل مشاهده ایجاد میکند.
این Mini Project شامل ساخت یک برنامه ساده مدیریت کارهای روزانه (To-Do List) است که کاربر میتواند چند وظیفه تعریف کند، وضعیت آنها را مشاهده کند و در صورت نیاز تغییر دهد. این پروژه به شما فرصت میدهد تا نحوه تعامل با متغیرها، مدیریت Scope و استفاده از توابع و حلقهها را بهصورت عملی تجربه کنید. در Rust، حتی پروژههای کوچک هم به شما کمک میکنند با قوانین مالکیت و ایمنی حافظه آشنا شوید.
تعریف متغیرها و استفاده از Scope در پروژه
ابتدا باید متغیرهایی برای ذخیره لیست کارها تعریف کنیم. در Rust توصیه میشود متغیرهای اصلی با let تعریف شوند و اگر نیاز به تغییر مقدار داریم، از mutable استفاده کنیم. Scope هر متغیر در بلوکی که ایجاد شده است محدود میشود و در صورت استفاده خارج از بلوک، کامپایلر Rust خطا میدهد. این رفتار باعث میشود حتی در یک پروژه کوچک، دادهها بهصورت ایمن مدیریت شوند و از بروز خطاهای منطقی جلوگیری شود.
برای مثال، متغیر tasks یک vector mutable از رشتهها خواهد بود که تمام وظایف کاربر را ذخیره میکند. استفاده از vector باعث میشود تعداد وظایف انعطافپذیر باشد و بتوانیم عملیات اضافه، حذف و ویرایش را راحت انجام دهیم. با این کار تمرین عملی مدیریت متغیرها، حلقهها و Scope در یک محیط واقعی انجام میشود.
let mut tasks: Vec<String> = Vec::new();
استفاده از توابع برای مدیریت پروژه
برای خوانایی و قابلیت نگهداری، بخشهای مختلف پروژه در توابع جداگانه قرار میگیرند. مثلاً تابعی برای اضافه کردن وظیفه جدید، تابعی برای نمایش وظایف و تابعی برای بروزرسانی وضعیت هر وظیفه ایجاد میکنیم. این کار باعث میشود کد تمیز و ماژولار باقی بماند و هر بخش پروژه مستقل از دیگری قابل استفاده و تست باشد.
Rust با سیستم Type و Scope قوی کمک میکند پارامترهای توابع دقیقاً مشخص باشند و خطاهای رایج کاهش یابد. همچنین میتوانیم از Shadowing برای پردازش مقادیر مرحلهای استفاده کنیم بدون آنکه نیاز به mutable اضافی داشته باشیم. این ویژگی به بهینهسازی حافظه و شفافیت کد کمک میکند.
fn add_task(tasks: &mut Vec<String>, task: String) {
tasks.push(task);
}حلقهها و شرطها در پروژه عملی
حلقهها و شرطها نقش کلیدی در Mini Project دارند. برای مثال، حلقه main loop برنامه کاربر را تا زمانی که قصد خروج داشته باشد، از منو عبور میدهد و گزینهها را دریافت میکند. شرطها بررسی میکنند کاربر چه عملیاتی انتخاب کرده است و کد مربوطه اجرا میشود. Rust با تعریف واضح boolean و شرطها، از رفتارهای مبهم جلوگیری میکند و اجرای برنامه قابل پیشبینی میماند.
استفاده از for برای پیمایش وظایف، while برای اجرای حلقه اصلی و if/else برای کنترل منطق کاربر، تمام مفاهیم آموزش داده شده در روزهای قبلی را در عمل نشان میدهند. این ترکیب باعث میشود تجربه عملی واقعی از Rust بدست آوریم و همزمان با مفاهیم پایه تسلط پیدا کنیم.
for (index, task) in tasks.iter().enumerate() {
println!("{}: {}", index + 1, task);
}استفاده از Shadowing و مدیریت مقادیر
در طول پروژه ممکن است نیاز باشد متغیرها را مرحلهبهمرحله پردازش کنیم. استفاده از Shadowing در Rust به ما اجازه میدهد بدون ایجاد mutable اضافی، مقادیر جدید را جایگزین کنیم و نوع متغیرها را تغییر دهیم. این کار به بهینهسازی حافظه و افزایش خوانایی کد کمک میکند و یکی از نقاط قوت Rust محسوب میشود.
برای مثال، وقتی میخواهیم ورودی کاربر را پردازش کنیم، میتوانیم رشته ورودی را چند مرحله پردازش کنیم و هر بار با یک متغیر Shadowed کار کنیم تا مرحله بعدی آماده شود. این تکنیک باعث میشود کد کوتاهتر، تمیزتر و امنتر باشد و تجربه عملی ارزشمندی ارائه دهد.
جمعبندی Mini Project 1
این پروژه کوچک اولین تمرین عملی شما در Rust بود و به شما کمک کرد تمام مفاهیم پایه از متغیرها و توابع گرفته تا شرطها، حلقهها، Scope و Shadowing را در عمل ببینید. انجام Mini Project باعث میشود که تنها مفاهیم تئوری را یاد نگیرید بلکه نحوه استفاده از آنها در یک برنامه واقعی را تجربه کنید. این تجربه پایهای قوی برای پروژههای پیچیدهتر و پیشرفتهتر Rust فراهم میکند و ذهنیت طراحی کد حرفهای و قابل نگهداری را شکل میدهد.
در روز بعدی وارد مفاهیم Ownership و Borrowing میشویم و یاد میگیریم چگونه Rust حافظه را بهصورت امن و بهینه مدیریت میکند، مفاهیمی که پایه بسیاری از ویژگیهای قدرتمند Rust هستند.