トラック
/
Ruby
Ruby
/
演習
/
ラザニア
ラザニア

ラザニア

学習演習

はじめに

この演習では、Rubyの基本的な構成要素を学びます。 扱う範囲は広いですが、難しく感じても心配しないでください。トラックを進めていく中で、それぞれの内容をずっと詳しく掘り下げていきます。

Rubyを理解するうえで重要なポイントの一つは、Rubyがオブジェクト指向言語であるということ、そしてRubyではすべてがオブジェクトであるということです。数値も文字列も配列も、すべてオブジェクトです。

変数と定数

オブジェクトは、変数か定数を使って名前を付けて利用するのが一般的です。

変数は常にスネークケースで書きます。 変数は、その寿命の中でさまざまなオブジェクトを参照できます。 たとえば、my_first_variableは=演算子を使って何度も定義し直すことができます。

my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new

一方、定数は一度だけ代入するものです。 大文字で始める必要があり、通常はすべて大文字で、単語をアンダースコアで区切って書きます。 たとえば、次のとおりです。

MY_FIRST_CONSTANT = 10

# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"

クラス

Rubyはクラスによって整理されています。 クラスは、classキーワードの後にクラス名を書いて定義します。 オブジェクトは通常、.newメソッドでクラスをインスタンス化して作ります。 たとえば、次のとおりです。

# Define the class
class Calculator
  #...
end

# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new

メソッド

機能の単位はメソッドにまとめられます。これは他の言語の_関数_に似ています。

メソッドは、位置引数やキーワード引数(:構文を使って定義・呼び出しします)を使って定義することも、引数をまったく持たないようにすることもできます。

メソッドは、最後に評価された文の結果を暗黙的に返すか、returnキーワードを使って明示的にオブジェクトを返します。

class Calculator

  # Positional arguments
  def add(num1, num2)
    return num1 + num2 # Explicit return
  end

  # Keyword arguments
  def multiply(num1:, num2:)
    num1 * num2 # Implicit return
  end
end

メソッドは.構文を使って呼び出します。

calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)

説明

この演習では、お気に入りの料理本をもとに、最高のラザニアを作るためのコードを書きます。

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

1. オーブンでの想定加熱時間(分)を定義する

ラザニアをオーブンに入れておくべき時間を分で返す定数Lasagna::EXPECTED_MINUTES_IN_OVENを定義します。料理本によると、オーブンでの想定加熱時間は40分です。

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. 残りのオーブン加熱時間(分)を計算する

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

lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10

3. 準備時間(分)を計算する

ラザニアに重ねた層の数を入力として受け取り、1層あたり2分かかると仮定して、ラザニアの準備に何分かかったかを返すメソッドLasagna#preparation_time_in_minutesを定義します。

lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4

4. 合計作業時間(分)を計算する

メソッドLasagna#total_time_in_minutesを定義します。このメソッドは2つの名前付き入力を受け取ります。number_of_layersはラザニアに重ねた層の数で、actual_minutes_in_ovenはラザニアがオーブンに入っていた時間(分)です。このメソッドは、ラザニアの調理に合計で何分かかったかを返す必要があります。合計は、準備にかかった時間(分)と、その時点でラザニアがオーブンに入っていた時間(分)を足したものです。

lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Ruby Exercism

ラザニアを始める準備はできましたか?

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