</>مدرسه زیب‌موجیاد بگیر، تمرین کن، بساز
مدرسهRustدرس 7
درس 7 از 20 · ۴۰ دقیقه

مالکیت و move

یک مسئله واقعی را با «مالکیت و move» حل می‌کنیم و نتیجه را همان لحظه می‌بینیم.

۰امتیاز شما
نقشه این درس

بعد از این درس چه کاری می‌توانی انجام بدهی؟

  • هر مقدار heap یک مالک دارد؛ انتقال مالکیت جلوی double free را در زمان کامپایل می‌گیرد.
  • کد را اجرا و نتیجه را پیش‌بینی کنی
  • یک تغییر کوچک بدهی و اثرش را توضیح بدهی
  • خطای واقعی درس را بخوانی و برطرف کنی
نکته مهم برای شروع Rust

اگر برنامه اجرا نشد، از آخرین خط پیام خطا شروع کن؛ نام فایل و شماره خط معمولاً نزدیک‌ترین سرنخ‌اند.

چرا مهم است؟ هر مقدار heap یک مالک دارد؛ انتقال مالکیت جلوی double free را در زمان کامپایل می‌گیرد.

اولین تمرین تو: بعد از consume عنوان را چاپ کن، خطا را بخوان و با borrow اصلاح کن. قبل از اجرا، خروجی تازه را در یک جمله بنویس.

توضیح ساده و قدم‌به‌قدم

از یک مثال کوچک شروع کن

هر مقدار heap یک مالک دارد؛ انتقال مالکیت جلوی double free را در زمان کامپایل می‌گیرد. کد زیر را در فایل «src/main.rs» خودت تایپ و اجرا کن. بعد خروجی را با انتظار درس مقایسه کن.

1

۱. نمونه را اجرا کن

پیش از اجرا خروجی را حدس بزن و سپس تفاوت را یادداشت کن.

2

۲. کد را تغییر بده

بعد از consume عنوان را چاپ کن، خطا را بخوان و با borrow اصلاح کن.

3

۳. خطا را عمداً بساز

use of moved value یعنی مالکیت قبلاً منتقل شده است. متن خطا و شماره خط را بخوان، علت را پیدا کن و فقط همان بخش را اصلاح کن.

نکته مهم

اگر برنامه اجرا نشد، از آخرین خط پیام خطا شروع کن؛ نام فایل و شماره خط معمولاً نزدیک‌ترین سرنخ‌اند.

مفهوم‌های اصلی

سه قطعه‌ای که باید بفهمی

مالکیت و move

هر مقدار heap یک مالک دارد؛ انتقال مالکیت جلوی double free را در زمان کامپایل می‌گیرد.

نتیجه قابل مشاهده

پیام ذخیره عنوان چاپ می‌شود.

خطایی که باید بشناسی

use of moved value یعنی مالکیت قبلاً منتقل شده است.

سناریوی واقعی

عنوان کار نباید پس از افزودن به فهرست تصادفی دوباره استفاده شود.

فرض کن عنوان کار نباید پس از افزودن به فهرست تصادفی دوباره استفاده شود. فعلاً قرار نیست کل برنامه را بسازیم؛ فقط همین نیاز را با چند خط کد حل می‌کنیم تا معلوم باشد هر خط چه کاری انجام می‌دهد.

کارگاه تعاملی

بررسی ساختار تمرین

این صفحه کامپایلر کامل Rust نیست؛ ساختار تمرین را صادقانه بررسی می‌کند و خروجی مورد انتظار را نشان می‌دهد. برای اجرای کامل به محیط رسمی همان زبان نیاز است.

src/main.rs
خروجیآماده
یک بخش را تغییر بده و دکمه بررسی را بزن.
بعد از هر تغییر، نتیجه را دوباره بررسی کن.
تمرین هدایت‌شده

بعد از consume عنوان را چاپ کن، خطا را بخوان و با borrow اصلاح کن. قبل از اجرا، خروجی تازه را در یک جمله بنویس.

دام‌های رایج

این سه اشتباه را انجام نده

1

use of moved value یعنی مالکیت قبلاً منتقل شده است.

2

کپی‌کردن کد بدون اجرای مرحله‌به‌مرحله

3

تغییر چند قسمت هم‌زمان و گم‌شدن علت نتیجه

سنجش چندمرحله‌ای

با 5 سؤال مطمئن شو که مفهوم را گرفته‌ای

سؤال 1 از 5

خروجی درست این نمونه چیست؟

سؤال 2 از 5

چرا پیش از اجرا نتیجه را حدس می‌زنیم؟

سؤال 3 از 5

سرنخ خطای این درس چیست؟

سؤال 4 از 5

بعد از تغییر کد چه کنیم؟

سؤال 5 از 5

چه وقت آماده درس بعدی هستی؟

پایان درس 7

فهمیدی، تغییر دادی، نتیجه را توضیح دادی؟

فقط در این صورت درس را کامل کن و سراغ مرحله بعد برو.