プログラミング、フリーダイビング、ブロックチェーンのブログ

プログラミング道場

自分の市場価値を知りたい人にオススメの記事です

【すぐできる】エンジニアとしての市場価値を診断してみよう!

エンジニアが市場価値を把握しておくべき理由 エンジニアは、なぜ市場価値を把握しておいた方がいいのか、まずはその理由について説明します。 エンジニアの市場価値を決める要素 エンジニアの市場価値を決める要素について説明します。 経験業務と年数 ...

続きを見る

私がオススメするプログラミング教材です

私がおすすめするプログラミング教材のまとめ【書籍と動画】

これからエンジニアになりたい人へ向けた本 私が書いた、「これからエンジニアになりたい人」に向けた本です。 最近、世間ではプログラミングの必要性が声高く叫ばれるようになりました。 子供向けには2021年からプログラミング教育が義務教育で実施さ ...

続きを見る

【Ruby入門】クラス(class)の使い方

更新日:

記事の内容


この記事では、Rubyのクラスの定義方法や使い方について説明していきたいと思います。

クラス(class)とは何か?

クラスとは、データを管理する型であり、設計図でもあります。
そのため、クラス名は抽象的な名前になりがちです。
例えば、車を管理するクラスを作りたいとします。
その場合、クラス名は、「プリウス」「ベンツ」という具体的な名前にはなりません。
クラス名は、「Car」といった抽象的な名前をつけます。
なぜならば、繰り返しにはなりますが、クラスは設計図であり抽象的なものを表すからです。

インスタンス(オブジェクト)とは何か?

クラスは設計図なので、それを実際に動かすためには、クラスを組み立てて実体化させてやる必要があります。
その作業を「インスタンス化する」と言ったり、「オブジェクトを生成する」と呼んだりします。

クラスの定義方法

クラスを定義するためには、「class」「end」という2つのキーワードを使います。
クラス名の先頭は、常に大文字にして下さい。
具体的には、このように定義します。

class クラス名
end

インスタンスの使い方

インスタンスを生成するためには、「new」というキーワードを使います。
一つのクラスに対して、インスタンスは、いくつでも作成することができます。

インスタンスメソッドとインスタンス変数

クラスに「インスタンスメソッド」と「インスタンス変数」を定義する

今までは、クラスの定義方法とインスタンスの使い方について紹介しました。
ここでは、実際にクラスを使う方法を紹介します。

クラスには、インスタンスメソッドと、インスタンス変数という2つのモノを定義することができます。
インスタンスメソッドは、クラスの中に「def」「end」という2つのキーワードを使って定義します。
インスタンス変数は、「@」というキーワードを使って定義します。
インスタンス変数は、クラスの中で共有される変数です。
「@」を付けない変数とのスコープの違いを意識すると、インスタンス変数の意義がわかるはずです。

この2つは、クラスからインスタンスを生成することで、使うことができるようになります。
「インスタンスメソッド」と「インスタンス変数」は、クラスのままでは使うことができません。

「initialize」というキーワードを使って、インスタンスに初期値を与える

「initialize」メソッドは、オブジェクトが生成される時に実行されるメソッドなので、インスタンス変数に初期値を設定することができます。
「initialize」メソッドのように、「オブジェクトが生成される時に実行されるメソッド」をコンストラクタと呼びます。

「initialize」メソッドを使って、先程のコードを綺麗に書いてみます。
「new」キーワードに渡した値が、initializeの引数に入ってきます。
「initialize」メソッドを使うことで、「new」を使ってインスタンスを生成したタイミングで、nameとsizeに値をセットできたことがわかります。

「attr_accessor」というキーワードを使って、値を代入するメソッドを省略する

「attr_accessor」を使うことで、上記のコードにある「name=」「size=」の2つのメソッドを省略できます。
「attr_accessor」をコメントアウトした場合に、インスタンスのnameやsizeに値を代入できないことを確認してみて下さい。

クラスメソッド

クラスには、クラスメソッドというものもあります。
クラスメソッドは、個々のインスタンスに含まれる必要がないデータを扱う時に使います。
例えば、Carクラスで言えば、車を作るメソッドは、インスタンスメソッドに含まれる必要がありません。
なぜならば、carインスタンスは、プリウスやベンツといった個々の車のデータを管理していて、「車を作る」という作業内容をcarインスタンスが持つ必要はないからです。

クラスメソッドは、メソッド名の前に「self.」をつけることで定義することができます。
もう一つのやり方は、「class << self」と「end」の間にメソッドを入れる方法です。
クラスメソッドを使う場合は、「new」キーワードがナシで使うことができます。

クラス変数

クラスの中には、クラス変数を定義することもできます。
クラス変数は「@@」というキーワードで管理します。
先程、車を作る「create」メソッドがありましたが、車の製造台数を管理したい場合に、クラス変数を使います。
なぜならば、車の製造台数といった情報も、個々のインスタンスが持つ必要のない情報だからです。
今回は、車を2台作成した後で、3台目を作成しました。
その際にも、車の製造台数が保持されていることがわかるはずです。

クラスでデータを管理すると便利

「何で、クラスを使う必要があるのか?」「Hashでもデータを管理できるのではないか?」という疑問を持つ方もいるかもしれません。
確かに、上記の規模のデータならば、下記のようにHashでデータを管理することもできそうです。
ただし、Hashはキーを追加したり削除をすることもできるので、脆くて壊れやすいプログラムになりがちです。
そのため、より堅牢で扱いやすいデータ型を作るために、Carクラスを作成するのが一般的です。

まとめ

この記事では、クラスとインスタンスに関することを説明しました。
クラスを理解することで、様々なコードを柔軟に書くことができるようになるはずです。

Good luck for your engineer life!

【Ruby入門】クラスの継承の使い方

【Ruby入門】Module(モジュール)の使い方

Ruby初心者から抜け出したい人に、オススメの本です



Rubyをより詳しく勉強したい人には、この記事がオススメです

Rubyの学習でおすすめの本と動画(Udemy)【2022年最新】

▼ Ruby on Railsについては、この記事で紹介しています 初心者向け【入門編】 脱初心者のための問題集 Ruby編 Rubyの基礎的な文法を学習し終わった後、次に何をしようかと考えている人にオススメの本です。 基礎を学んだ後にする ...

続きを見る


Ruby on Railsをより詳しく勉強したい人には、この記事がオススメです

Ruby on Railsの学習でおすすめの本と動画(Udemy)【2022年最新】

初心者向け Ruby on Rails 5.0 初級① Ruby on Railsは、基本的には初心者向けではありません。 ただし、これらの本は、比較的、簡単に書かれています。 プログラミング経験が浅くてRailsを勉強したい人は、この本か ...

続きを見る


Gitをより詳しく勉強したい人には、この記事がオススメです

Gitの学習でおすすめの本と動画(Udemy)【2022年最新】

漫画?でわかりやすく学ぶ入門書の定番 改訂2版 わかばちゃんと学ぶ Git使い方入門 Gitの入門書の定番と言っても差し支えありません。 絵や図で解説している本なので、わかりやすく頭に入ってきます。 サルでもわかるGit入門 Gitの解説サ ...

続きを見る

関連コンテンツ

-Ruby, プログラミング

Copyright© プログラミング道場 , 2022 All Rights Reserved Powered by AFFINGER4.