مسیرها
/
C#
C#
/
تمرین‌ها
/
اسباب‌بازی‌های جدلیک
اسباب‌بازی‌های جدلیک

اسباب‌بازی‌های جدلیک

تمرین یادگیری

مقدمه

کلاس

سازه‌ی اصلی شیءگرا در C#، کلاس است که ترکیبی از داده (فیلد) و رفتار (متد) است. به فیلدها و متدهای یک کلاس، اعضای آن می‌گویند.

دسترسی به اعضا را می‌توان از طریق اصلاح‌کننده‌های دسترسی محدود کرد که دو مورد رایج‌تر آن‌ها عبارتند از:

  • public: هر کدی می‌تواند به این عضو دسترسی داشته باشد (بدون محدودیت).
  • private: فقط کدی که در همان کلاس است می‌تواند به این عضو دسترسی داشته باشد.

می‌توانید به کلاس مانند قالبی برای ساختن نمونه‌هایی از آن نگاه کنید. برای ساختن نمونه‌ای از یک کلاس (که به آن شیء هم می‌گویند)، از کلیدواژه‌ی new استفاده می‌شود:

class Car
{
}

// Create two car instances
var myCar = new Car();
var yourCar = new Car();

فیلدها یک نوع دارند و می‌توان آن‌ها را در هر جای کلاس تعریف کرد. فیلدهای عمومی با PascalCase و فیلدهای خصوصی با camelCase و با پیشوند زیرخط _ تعریف می‌شوند:

class Car
{
    // Accessible by anyone
    public int Weight;

    // Only accessible by code in this class
    private string _color;
}

می‌توان به‌صورت اختیاری یک مقدار اولیه به فیلد اختصاص داد. اگر فیلدی مقدار اولیه‌ای تعیین نکند، مقدار پیش‌فرض نوعش برای آن تنظیم می‌شود. می‌توان به مقادیر فیلدهای یک نمونه با نشانه‌گذاری نقطه‌ای دسترسی داشت و آن‌ها را به‌روزرسانی کرد.

class Car
{
    // Will be set to specified value
    public int Weight = 2500;

    // Will be set to default value (0)
    public int Year;
}

var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year;   // => 0

// Update value of the field
newCar.Year = 2018;

فیلدهای خصوصی معمولاً به‌عنوان اثر جانبی فراخوانی یک متد به‌روزرسانی می‌شوند. چنین متدهایی معمولاً مقداری برنمی‌گردانند که در این صورت نوع بازگشتی باید void باشد:

class CarImporter
{
    private int _carsImported;

    public void ImportCars(int numberOfCars)
    {
        // Update private field from public method
        _carsImported = _carsImported + numberOfCars;
    }
}

دستورالعمل‌ها

در این تمرین با یک ماشین کنترل از راه دور سر و کار دارید که بالاخره پول کافی برای خریدنش را جمع کرده‌اید.

هر ماشین با باتری کاملاً پر (۱۰۰٪) شروع می‌کند. هر بار که ماشین را با کنترل از راه دور می‌رانید، ۲۰ متر را طی می‌کند و یک درصد از شارژ باتری کم می‌شود.

ماشین کنترل از راه دور یک نمایشگر LED شیک دارد که دو مورد را نشان می‌دهد:

  • مسافت کل طی‌شده، که به این شکل نمایش داده می‌شود: "Driven <METERS> meters".
  • شارژ باقی‌مانده‌ی باتری، که به این شکل نمایش داده می‌شود: "Battery at <PERCENTAGE>%".

اگر شارژ باتری ۰٪ باشد، دیگر نمی‌توانید ماشین را برانید و نمایشگر باتری "Battery empty" را نشان می‌دهد.

شش وظیفه دارید که هر کدام با نمونه‌هایی از ماشین کنترل از راه دور کار می‌کنند.

1. یک ماشین کنترل از راه دور کاملاً نو بخرید

متد (static) RemoteControlCar.Buy() را پیاده‌سازی کنید تا یک نمونه‌ی کاملاً نو از ماشین کنترل از راه دور برگرداند:

RemoteControlCar car = RemoteControlCar.Buy();

2. مسافت طی‌شده را نمایش دهید

متد RemoteControlCar.DistanceDisplay() را پیاده‌سازی کنید تا مسافت را همان‌طور که روی نمایشگر LED نمایش داده می‌شود برگرداند:

var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"

3. درصد شارژ باتری را نمایش دهید

متد RemoteControlCar.BatteryDisplay() را پیاده‌سازی کنید تا درصد شارژ باتری را همان‌طور که روی نمایشگر LED نمایش داده می‌شود برگرداند:

var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"

4. هنگام رانندگی، تعداد مترهای طی‌شده را به‌روزرسانی کنید

متد RemoteControlCar.Drive() را پیاده‌سازی کنید که تعداد مترهای طی‌شده را به‌روزرسانی می‌کند:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"

5. هنگام رانندگی، درصد شارژ باتری را به‌روزرسانی کنید

متد RemoteControlCar.Drive() را به‌روزرسانی کنید تا درصد شارژ باتری را به‌روزرسانی کند:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"

6. وقتی باتری خالی شد، جلوی رانندگی را بگیرید

متد RemoteControlCar.Drive() را طوری به‌روزرسانی کنید که وقتی باتری خالی (۰٪) است، نه مسافت طی‌شده افزایش یابد و نه درصد شارژ باتری کاهش یابد:

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

car.DistanceDisplay();
// => "Driven 2000 meters"

car.BatteryDisplay();
// => "Battery empty"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید اسباب‌بازی‌های جدلیک را شروع کنید؟

در Exercism ثبت‌نام کنید تا C# را همراه با 62 مفهوم178 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.