トラック
/
C#
C#
/
演習
/
体重計
体重計

体重計

学習演習

はじめに

プロパティ

C#のプロパティは、クラスのメンバーであり、そのクラス内のデータへのアクセスを提供します。呼び出し側は、データを設定したり取得(get)したりできます。プロパティは、自動実装にするか、バッキングフィールドを持つことができます。プロパティは、setアクセサーまたはgetアクセサー、あるいはその両方で構成されます。他の言語では、「mutator」がsetアクセサーに、「accessor」がgetアクセサーにほぼ相当しますが、構文の構成はまったく異なります。

プロパティを設定するときには、入力値を検証したり、整形したり、その他の方法で操作したりできます。実際、クラス内のコードからアクセスできるあらゆるプログラム的操作を実行できます。

同様に、プロパティを取得するときには、データを計算したり整形したりできます。ここでも、クラスで利用できるあらゆるプログラム的操作を実行できます。

プロパティは、他のクラスメンバーと同じようにアクセス修飾子(public、privateなど)を持ちますが、setアクセサーは、取得(get)アクセサーとは独立したアクセスレベルを持てますし、その逆も同様です。プロパティは必ずしも両方のアクセサーを持つ必要はなく、片方(getまたはset)だけでもかまいません。

プロパティを表す基本的な構文には、2つの形があります。

フィールドまたは式を基にしたプロパティ:

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

自動実装プロパティ

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

初期化は省略できます。

説明

この演習では、キログラムを単位とするはかりをモデル化します。

6つのタスクがあり、それぞれで1つ以上のプロパティを実装する必要があります。

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に登録すれば、62個のコンセプト178個の演習、そして本物の人間によるメンタリングとともに、C#を学んでマスターできます。すべて無料です。