トラック
/
C#
C#
/
演習
/
ルシアンの絶品ラザニア
ルシアンの絶品ラザニア

ルシアンの絶品ラザニア

学習演習

はじめに

基本

C#は静的型付け言語です。つまり、コンパイル時にすべてのものに型が付きます。名前を付けて値を代入することを、変数の定義と呼びます。変数は、型を明示的に指定して定義する方法と、代入する値からC#コンパイラーに型を推論させる方法(これは_型推論_と呼ばれます)のどちらでも定義できます。したがって、次の2つの変数定義は同じ意味になります。

int explicitVar = 10; // Explicitly typed
var implicitVar = 10; // Implicitly typed

変数の値を更新するには、=演算子を使います。一度定義すると、変数の型は変えることができません。

var count = 1; // Assign initial value
count = 2;     // Update to new value

// Compiler error when assigning different type
// count = false;

C#はオブジェクト指向言語であり、すべての関数を_クラス_の中で定義する必要があります。クラスを定義するには、classキーワードを使います。オブジェクト(または_インスタンス_)は、newキーワードを使って生成します。

class Calculator
{
    // ...
}

var calculator = new Calculator();

クラスの中にある関数は、_メソッド_と呼びます。各メソッドは、0個以上の仮引数を持てます。すべての仮引数には型を明示する必要があり、仮引数には型推論がありません。同様に、戻り値の型も明示する必要があります。メソッドから値を返すには、returnキーワードを使います。ほかのファイルのコードからメソッドを呼び出せるようにするには、publicアクセス修飾子を付ける必要があります。

class Calculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

メソッドは、インスタンスに対してドット(.)構文を使って呼び出します。呼び出すメソッド名を指定し、メソッドの各仮引数に対応する引数を渡します。引数には、対応する仮引数の名前を任意で指定できます。

var calculator = new Calculator();
var sum_v1 = calculator.Add(1, 2);
var sum_v2 = calculator.Add(x: 1, y: 2);

C#のスコープは、{と}の文字の間に定義されます。

C#では、2種類のコメントを書けます。1行コメントは//で始め、複数行コメントは/*と*/の間に書きます。

説明

Lucianのガールフレンドが家に帰ってくるというのに、Lucianは記念日のディナーをまだ作っていません!

この演習では、Lucianがお気に入りの料理本のとおりに絶品のラザニアを作れるよう、コードを書いていきます。

タスクは4つあり、どれもラザニアを調理するのにかかる時間に関するものです。

1. 想定されるオーブン加熱時間を分単位で定義する

入力を受け取らず、ラザニアをオーブンに入れておくべき分数を返すLasagna.ExpectedMinutesInOven()メソッドを定義します。料理本によると、想定されるオーブン加熱時間は40分です。

var lasagna = new Lasagna();
lasagna.ExpectedMinutesInOven();
// => 40

2. 残りのオーブン加熱時間を分単位で計算する

ラザニアが実際にオーブンに入っていた分数を入力として受け取り、前のタスクで求めた想定加熱時間をもとに、ラザニアをあと何分オーブンに入れておく必要があるかを返すLasagna.RemainingMinutesInOven()メソッドを定義します。

var lasagna = new Lasagna();
lasagna.RemainingMinutesInOven(30);
// => 10

3. 準備時間を分単位で計算する

ラザニアに重ねた層の数を入力として受け取り、1層につき2分かかるものとして、ラザニアの準備に何分かかったかを返すLasagna.PreparationTimeInMinutes()メソッドを定義します。

var lasagna = new Lasagna();
lasagna.PreparationTimeInMinutes(2);
// => 4

4. 経過時間を分単位で計算する

2つの入力を受け取るLasagna.ElapsedTimeInMinutes()メソッドを定義します。1つ目の入力はラザニアに重ねた層の数で、2つ目の入力はラザニアがオーブンに入っていた分数です。このメソッドは、ラザニアの調理に費やした時間を分単位で返します。それは、準備時間と、その時点までラザニアがオーブンにいた時間を足したものです。

var lasagna = new Lasagna();
lasagna.ElapsedTimeInMinutes(3, 20);
// => 26
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

ルシアンの絶品ラザニアを始める準備はできましたか?

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