クラスの定義
CoddyのRubyジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 2/57。
クラスは、オブジェクトの種類を表します。つまり、そのオブジェクトが知っていることと、できることを定義します。class Dog ... endはクラスを宣言し、Dog.newはそのクラスのオブジェクトであるインスタンスを作成します。クラス内でdefを使って定義されたメソッドは、すべてのインスタンスで呼び出せます。
class Dog
def speak
"Woof"
end
end
rex = Dog.new
puts rex.speak
puts rex.class出力:
Woof
Dognewはオブジェクトを作成し、その後、newに渡した引数を使ってオブジェクトのinitializeメソッドを呼び出します。initializeはオブジェクトをセットアップします。通常は、引数をインスタンス変数に格納します。インスタンス変数の名前は@で始まります。
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
puts Dog.new("Rex").speak
puts Dog.new("Bella").speak出力:
Rex says Woof
Bella says Woofメソッドは他の Ruby メソッドと同様に引数を受け取り、最後の式の値を返します。new を呼び出すたびに、別々のオブジェクトが構築されます。
class Calculator
def add(a, b)
a + b
end
def average(numbers)
numbers.sum.to_f / numbers.size
end
end
calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])出力:
5
3.0クラス名は CamelCase で記述する定数です(BankAccount)。メソッド名と変数名には snake_case を使用します(deposit_money)。new は引数を initialize と照合するため、引数が不足していると ArgumentError が発生します。
class Point
def initialize(x, y)
@x = x
@y = y
end
end
begin
Point.new(1)
rescue ArgumentError => e
puts e.message
end出力:
wrong number of arguments (given 1, expected 2)チャレンジ
簡単クラス Formatterを完成させてください。そのメソッド title(text)は、すべての単語の先頭を大文字にしたテキストを返します(the hobbitはThe Hobbitになります)。slug(text)は、単語を小文字にして-で連結したものを返し(the-hobbit)、initials(text)は、各単語の最初の文字を大文字にして返します(TH)。
提供されたコードはFormatterを1つ作成し、入力行ごとに3つの結果を別々の行に出力します。
コードはformatter.rbに記述してください。main.rbには提供された入出力コードが含まれており、編集できません。
自分で試してみよう
require_relative 'formatter'
# 提供された入出力コード: そのままにしておく
input = []
while (line = gets)
input << line.chomp
end
formatter = Formatter.new
input.each do |line|
puts formatter.title(line)
puts formatter.slug(line)
puts formatter.initials(line)
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ