トラック
/
C#
C#
/
演習
/
Need for Speed
Need for Speed

Need for Speed

学習演習

はじめに

コンストラクター

_クラス_のインスタンスを作るには、new演算子を通してその_コンストラクター_を呼び出します。コンストラクターは特別な種類のメソッドで、作られたばかりのインスタンスを初期化するのが役割です。コンストラクターは通常のメソッドとよく似ていますが、戻り値の型がなく、名前がクラス名と一致するという違いがあります。

class Library
{
    private int books;

    public Library()
    {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

通常のメソッドと同じように、コンストラクターも仮引数を持つことができます。コンストラクターの仮引数は、あとで使うために(privateな)フィールドとして保存するのが普通で、そうでなければ一度きりの計算に使われます。通常のメソッドに引数を渡すのと同じように、コンストラクターにも引数を渡せます。

class Building
{
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight)
    {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)

説明

この演習では、さまざまな種類のラジコンカーのレースを組み立てていきます。それぞれのカーには、速度とバッテリー消費という特性があります。

カーはバッテリーが満タン(100%)の状態からスタートします。リモコンでカーを走らせるたびに、車はその速度の分だけメートル進み、バッテリー残量のパーセンテージがバッテリー消費の分だけ減ります。

バッテリー残量がバッテリー消費のパーセンテージを下回ると、そのカーはもう走らせられません。

それぞれのレーストラックには距離があります。カーは、バッテリーを使い切らずにトラックを完走できるかどうかでテストされます。

ここには6つのタスクがあり、それぞれがラジコンカーのインスタンスを扱います。

1. ラジコンカーを作成する

RemoteControlCarクラスのコンストラクターを定義して、ラジコンカーを作成できるようにします。このコンストラクターは、車の速度(メートル)とバッテリー消費のパーセンテージを2つの仮引数として受け取ります(どちらもint型です)。

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

2. レーストラックを作成する

RaceTrackクラスのコンストラクターを定義して、レーストラックを作成できるようにします。このコンストラクターは、トラックの距離(メートル)を唯一の仮引数として受け取ります(int型です)。

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. カーを走らせる

RemoteControlCar.Drive()メソッドを実装し、車の速度に基づいて走行したメートル数を更新します。また、RemoteControlCar.DistanceDriven()メソッドを実装して、車が走ったメートル数を返すようにします。

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.DistanceDriven();
// => 5

4. バッテリー切れを確認する

RemoteControlCar.Drive()メソッドを更新して、車のバッテリー消費に基づいてバッテリーを消耗させます。また、RemoteControlCar.BatteryDrained()メソッドを実装して、バッテリーが切れているかどうかを示すようにします。

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.BatteryDrained();
// => false

5. Nitroラジコンカーを作成する

一番よく売れているラジコンカーはNitroで、驚異の最高速度50メートル、バッテリー消費は4%です。(静的)RemoteControlCar.Nitro()メソッドを実装して、このタイプのカーを返すようにします。

var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50

6. ラジコンカーがレースを完走できるか確認する

レーストラックを完走するには、カーがトラックの距離を走り切れる必要があります。つまり、ゴールラインを越える前にバッテリーを使い切ってはいけないということです。RaceTrack.TryFinishTrack()メソッドを実装します。このメソッドはRemoteControlCarのインスタンスを仮引数として受け取り、カーがレーストラックを完走できる場合はtrueを、それ以外の場合はfalseを返します。

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

int distance = 100;
var raceTrack = new RaceTrack(distance);

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

Need for Speedを始める準備はできましたか?

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