クラスを作る
Rubyではオブジェクトを作ったり使ったりすることで処理を実現していきます。「既存のクラスのオブジェクトを作って使う」のではなく、「自分でクラスを作り、そのクラスのオブジェクトを作る」方法を説明していきます。
Userクラスを作る
Rubyのようなオブジェクト指向のプログラミング言語では、意味的な共通性のあるデータを1つのオブジェクトに集約して扱えるようにクラスを作ります。ここでは、ユーザーの名前、住んでいる場所、メールアドレスはすべて、あるユーザー個人に属する詳細情報という共通性があるので、「ユーザー個人」がオブジェクトとなるように、「ユーザー」クラスを作れば良いということになります。
class User
end
これでUser
というクラスが作れました。さっそくUser
クラスを使います。
Userクラスにメソッドを定義する
私たちのイメージするユーザーオブジェクトは、名前、住んでいる場所、メールアドレスというデータを持ち、問い合わせれば答えてくれるものです。例えばこんな感じです。
> user.name
=> "吉良吉影"
しかし、現時点ではUser
クラスにはname
というメゾットはないので、実際にはエラーが返ってきます。
> user = User.new
> user.name
Traceback (most recent call last):
...
NoMethodError (undefinef method 'name' for ~ )
そこでエラーが出ないようにname
というメソッドを作ってみましょう。メソッドを定義するには、 def <メソッド名> end という構文を使います。
class User
def name
end
end
これでUser
クラスのオブジェクトに name
というメソッドをつくることができました。user.rb
に加えた変更を読み込んでuser.name
を読み込んでみます。
>require `./user,rb` #ファイル読み込む
>user = User.new
> user.name
=> nil #nameメソッドが空(何も評価されていない)のでnilが返ってくる。
メソッドが呼ばれた時に返ってくる値のことを 「返り値(または戻り値)」と呼びます。Rubyでは、return
を使って明示的に指定された値や、メソッド内で最後に評価された値がメソッドの返り値となります。
※一般的に、メソッドの途中でメソッドを抜けたい場合にはreturnを使い、メソッドの最後で返り値を指定する場合はreturn使わないことが多い。
例えば、どんなユーザーのnameも”匿名さん”で返したい場合は、returnメソッドの実装は次のようになる。
class User
def name
return "匿名さん"
end
end
class User
def name
"匿名さん"
end
end
どちらの書き方でもnameメソッドの戻り値として「匿名さん」という文字列を得ることができます。
> user = User.new
> user.name
=> "匿名さん"
ただし、実際には全てのUserオブジェクトが同じ名前を持つように実装することはほとんどないでしょう。ログインしてきたユーザーをそれぞれの名前を保持するようにしたいはずです。オブジェクトごとに異なるデータを保持できるようにするためには、「インスタンス変数」 を使います。
参考
[現場で使えるRuby on Rails 5 速習実践ガイド]