ترازو

ترازو

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

مقدمه

ویژگی

یک «ویژگی» در C# عضوی از یک کلاس است که دسترسی به داده‌های داخل آن کلاس را فراهم می‌کند. کدهای فراخوانی‌کننده می‌توانند داده را تنظیم یا بازیابی (خواندن) کنند. ویژگی‌ها می‌توانند خودکارپیاده‌سازی‌شده باشند یا یک «فیلد پشتیبان» داشته باشند. ویژگی‌ها شامل یک «دسترسگر» set و/یا یک دسترسگر get هستند. در برخی زبان‌های دیگر، یک «تغییردهنده» تقریباً معادل یک دسترسگر set است و یک «دسترسگر» تقریباً معادل یک دسترسگر get، هرچند ساختار نحوه‌ی نگارش کاملاً متفاوت است.

هنگام تنظیم یک ویژگی، می‌توان مقدار ورودی را اعتبارسنجی کرد، قالب‌بندی کرد یا به شکل دیگری دستکاری کرد. در واقع، هر عملیات برنامه‌ای که برای کد داخل کلاس قابل دسترسی باشد، می‌تواند اجرا شود.

به همین ترتیب، هنگام بازیابی یک ویژگی می‌توان داده را محاسبه یا قالب‌بندی کرد و باز هم هر عملیات برنامه‌ای که در دسترس کلاس باشد، می‌تواند اجرا شود.

ویژگی‌ها مانند سایر اعضای کلاس «اصلاح‌کننده‌های دسترسی» (public، private و غیره) دارند، اما دسترسگر set می‌تواند سطح دسترسی‌ای مستقل از دسترسگر get داشته باشد و برعکس. یک ویژگی لازم نیست هر دو دسترسگر را داشته باشد؛ می‌تواند فقط یکی را داشته باشد (یا get یا set).

نحوه‌ی نگارش پایه برای بیان ویژگی‌ها دو شکل دارد:

ویژگی مبتنی بر فیلد/عبارت:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

ویژگی خودکارپیاده‌سازی‌شده

public int MyProperty { get; private set; } = 42;

مقداردهی اولیه اختیاری است.

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

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

شما ۶ وظیفه دارید که هر کدام مستلزم پیاده‌سازی یک یا چند ویژگی است:

1. امکان تعیین دقت برای ترازو

برای پاسخ به نیازهای مختلف، اجازه می‌دهیم هر ترازو با یک دقت سفارشی‌سازی شود (تعداد ارقام بعد از جداکننده‌ی اعشار). کلاس WeighingMachine را طوری پیاده‌سازی کنید که یک ویژگی Precision فقط‌خواندنی داشته باشد که با آرگومان precision سازنده مقداردهی می‌شود:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. امکان تنظیم وزن روی ترازو

ویژگی WeighingMachine.Weight را طوری پیاده‌سازی کنید که وزن هم قابل خواندن و هم قابل تنظیم باشد:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. اطمینان از رد شدن وزن ورودی منفی

واضح است که وزن کسی نمی‌تواند منفی باشد. به ویژگی WeighingMachine.Weight اعتبارسنجی اضافه کنید تا هنگام تلاش برای تنظیم آن روی یک وزن منفی، ArgumentOutOfRangeException پرتاب شود:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. امکان اعمال «تنظیم تار» روی ترازو

تنظیم تار می‌تواند هر مقداری باشد (حتی منفی، یا مقداری که وزن نمایش‌داده‌شده را منفی کند). ویژگی WeighingMachine.TareAdjustment را پیاده‌سازی کنید تا تنظیم تار قابل تنظیم باشد:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. اطمینان از داشتن تنظیم تار پیش‌فرض در ترازو

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

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. امکان بازیابی وزن

ویژگی WeighingMachine.DisplayWeight را پیاده‌سازی کنید که باید رشته‌ای برگرداند که وزن را پس از اعمال تنظیم تار، با دقت درست و همراه با یکا نشان دهد. توجه کنید که: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید ترازو را شروع کنید؟

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