トラック
/
C#
C#
/
演習
/
Jedlikのおもちゃ
Jedlikのおもちゃ

Jedlikのおもちゃ

学習演習

はじめに

クラス

C#の中心となるオブジェクト指向の構成要素は、_クラス_です。クラスは、データ(フィールド)と振る舞い(メソッド)を組み合わせたものです。クラスのフィールドとメソッドは、その_メンバー_と呼ばれます。

メンバーへのアクセスは、アクセス修飾子で制限できます。よく使われるのは次の2つです。

  • public:メンバーはどのコードからもアクセスできます(制限なし)。
  • private:メンバーは同じクラス内のコードからしかアクセスできません。

クラスは、そのクラスのインスタンスを作るためのテンプレートだと考えることができます。クラスのインスタンス(_オブジェクト_とも呼ばれます)を作るには、newキーワードを使います。

class Car
{
}

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

フィールドには型があり、クラス内のどこにでも定義できます。 publicフィールドはパスカルケースで、privateフィールドはキャメルケースで定義し、先頭にアンダースコア_を付けます。

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;

privateフィールドは通常、メソッドを呼び出した副作用として更新されます。このようなメソッドは通常、値を返しません。その場合、戻り値の型はvoidにする必要があります。

class CarImporter
{
    private int _carsImported;

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

説明

この演習では、ラジコンカーを操作して遊びます。ようやくお金を貯めて買えるようになった車です。

車のバッテリーは、満充電(100%)の状態から始まります。リモコンで車を1回動かすたびに、車は20メートル進み、バッテリーが1パーセント減ります。

このラジコンカーには、2つの情報を表示するおしゃれなLEDディスプレイが付いています。

  • これまでに走った合計距離。表示は"Driven <METERS> meters"です。
  • バッテリーの残量。表示は"Battery at <PERCENTAGE>%"です。

バッテリーが0%になると、もう車を動かすことはできません。そのとき、バッテリーの表示は"Battery empty"になります。

タスクは6つあり、どれもラジコンカーのインスタンスを扱います。

1. 新品のラジコンカーを買う

新品のラジコンカーのインスタンスを返す、(_static_な)RemoteControlCar.Buy()メソッドを実装してください:

RemoteControlCar car = RemoteControlCar.Buy();

2. 走った距離を表示する

LEDディスプレイに表示される距離を返すRemoteControlCar.DistanceDisplay()メソッドを実装してください:

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

3. バッテリー残量を表示する

LEDディスプレイに表示されるバッテリー残量を返すRemoteControlCar.BatteryDisplay()メソッドを実装してください:

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. バッテリーが切れたときは運転できないようにする

バッテリーが切れた(0%の)ときは、走行距離を増やさず、バッテリー残量も減らさないようにRemoteControlCar.Drive()メソッドを更新してください:

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

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

car.BatteryDisplay();
// => "Battery empty"
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

Jedlikのおもちゃを始める準備はできましたか?

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