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

プログラミング道場

【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の学習でオススメの本【2020年最新】

初心者向け【入門編】 スラスラ読める Rubyふりがなプログラミング ふりがなプログラミングシリーズのRuby版です。 文句なしに、やさしい内容なので、これからプログラミングを始めてみようという人は、この本から始めると良いかもしれません。 ...

続きを見る


Ruby on Railsをより詳しく勉強したい人は、この記事を読んで下さい

Ruby on Railsの学習でオススメの本と動画【2020年最新】

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

続きを見る


30代からプログラミングを始めようか迷っている人は、この記事を読んで下さい

30代からプログラミングを始めることは可能なのか?【頑張ればギリギリセーフ】

エンジニアは人気の職種だと聞いていますが、若い人達が多い印象です。 30代から始めても間にあいますか? 2019年12月の有効求人倍率 記事やニュースなどで知っている人もいるかと思いますが、今、エンジニアは世界的に不足しています。 まずは、 ...

続きを見る


プログラミングスクールに行くか迷っている人は、この記事を読んで下さい

なんとなく、エンジニアになりたい人が無料のプログラミングスクールに行くべき理由【2020年最新】

有料や無料のプログラミングスクールが多すぎて、どこにしようか迷っています。 無料のプログラミングスクールは、お得そうに見えますが、実際の所はどうですか? メリットやデメリットなどがあれば教えて下さい。 無料のスクールを推す理由 まずは、私が ...

続きを見る


自分がプログラミングスクールに行っても大丈夫か知りたい人は、この記事を読んで下さい

プログラミングスクールに通って挫折する人と上手くいく人の違い

スクールに通っている人の3パターン プログラミングスクールに通っている人のパターンを整理すると、以下の3パターンに分かれます。 それぞれのタイプの特徴を、もう少し詳細に説明していきます。 それぞれのタイプの特徴 大した努力をせずに文句ばかり ...

続きを見る


ゼロからWebエンジニアになりたい人は、この記事を読んで下さい

ゼロからWebエンジニアとして就職する方法【何もない自分に積み上げていく】

ちまたには、「エンジニアになるための情報」で溢れかえっています。 ジョージさんが考える「Webエンジニアになる方法」を教えて下さい。 私が定義するWebエンジニア まず、最初に以下の図を見て下さい。 これが、Web業界で働く人達の大分類です ...

続きを見る


独学で実務っぽい経験を積みたい人は、この記事を読んで下さい

エンジニアが独学で実務経験っぽいことを学ぶ方法

エンジニアとして就職するためには実務経験が大事だと聞いていますが、就職しないことには実務経験を積むことができません。 どうやって、最初の実務経験を積んだらいいでしょうか? スクールの理想と現実 これからプログラミングを学ぼうとしている人が描 ...

続きを見る

関連コンテンツ

-Ruby, プログラミング

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