0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自分でクラスを作る

Last updated at Posted at 2023-05-25

クラスを作る

Rubyではオブジェクトを作ったり使ったりすることで処理を実現していきます。「既存のクラスのオブジェクトを作って使う」のではなく、「自分でクラスを作り、そのクラスのオブジェクトを作る」方法を説明していきます。

Userクラスを作る

Rubyのようなオブジェクト指向のプログラミング言語では、意味的な共通性のあるデータを1つのオブジェクトに集約して扱えるようにクラスを作ります。ここでは、ユーザーの名前、住んでいる場所、メールアドレスはすべて、あるユーザー個人に属する詳細情報という共通性があるので、「ユーザー個人」がオブジェクトとなるように、「ユーザー」クラスを作れば良いということになります。

user.rb
class User
end

これでUserというクラスが作れました。さっそくUserクラスを使います。

Userクラスにメソッドを定義する

私たちのイメージするユーザーオブジェクトは、名前、住んでいる場所、メールアドレスというデータを持ち、問い合わせれば答えてくれるものです。例えばこんな感じです。

user.rb
> user.name
=> "吉良吉影"

しかし、現時点ではUserクラスにはnameというメゾットはないので、実際にはエラーが返ってきます。

> user = User.new
> user.name

 Traceback (most recent call last):            
 ...
 NoMethodError (undefinef method 'name' for ~ )

そこでエラーが出ないようにnameというメソッドを作ってみましょう。メソッドを定義するには、 def <メソッド名> end という構文を使います。

user.rb
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メソッドの実装は次のようになる。

returnを使う場合.rb
class User
 def name
    return "匿名さん"
 end
end
returnを使わない場合.rb
class User
 def name
   "匿名さん"
 end
end

どちらの書き方でもnameメソッドの戻り値として「匿名さん」という文字列を得ることができます。

> user = User.new
> user.name
=> "匿名さん"

ただし、実際には全てのUserオブジェクトが同じ名前を持つように実装することはほとんどないでしょう。ログインしてきたユーザーをそれぞれの名前を保持するようにしたいはずです。オブジェクトごとに異なるデータを保持できるようにするためには、「インスタンス変数」 を使います。

参考

[現場で使えるRuby on Rails 5 速習実践ガイド]

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?