これまで見てきた演習は、すべてクラスを使ってきました。
状態を持つオブジェクトを作る手間が不要なこともあります。そんなときは、代わりにmoduleを使います。
モジュールはクラスとよく似ています(実際、オブジェクト階層ではModuleはClassの親です)。主な違いは、インスタンスメソッドではなくクラスメソッドを使うことです。
クラスメソッドはself.で始まり、モジュールに対して直接呼び出します。
たとえば、次のようになります。
module Speaker
def self.echo(something)
"#{something} ... #{something}"
end
end
Speaker.echo("Hello") #=> "Hello ... Hello"
Rubyでループを書く方法はいくつかありますが、一般にはループよりもイテレーションを使うことが多いため、おそらく最もよく見かけるループはwhileループでしょう。
counter = 0
while counter < 5
counter += 1
end
その兄弟分であるuntilも使えます。
counter = 0
until counter == 5
counter += 1
end
この演習では、貯蓄口座を扱います。貯蓄口座の残高は、毎年、利率に基づいて更新されます。銀行が適用する利率は、口座に入っている金額(残高)によって決まります。
1000ドル未満の場合は0.5%。1000ドル以上5000ドル未満の正の残高の場合は1.621%。5000ドル以上の正の残高の場合は2.475%。ここには3つのタスクがあり、それぞれが残高とその利率を扱います。
指定された残高に基づいて利率を計算するSavingsAccount.interest_rateメソッドを実装しましょう。
SavingsAccount.interest_rate(200.75)
#=> 0.5
戻り値がFloatのインスタンスであることに注意してください。
利率を考慮して、年間の残高更新を計算するSavingsAccount.annual_balance_updateメソッドを実装しましょう。
SavingsAccount.annual_balance_update(200.75)
#=> 201.75375
戻り値がFloatのインスタンスであることに注意してください。
目標の残高に到達するために必要な最小年数を計算するSavingsAccount.years_before_desired_balanceメソッドを実装しましょう。
SavingsAccount.years_before_desired_balance(200.75, 214.88)
#=> 14
戻り値がIntegerのインスタンスであることに注意してください。