Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

【初心者向け】Rubyでクラスを作成・定義する方法をわかりやすく解説

Rubyのクラスとは?

クラスは、オブジェクト指向プログラミング(OOP)における基本的な構成要素であり、オブジェクトを作成するための「設計図」を定義するものです。

オブジェクトは、クラスから生み出される「製品」です。

では、オブジェクトとは何でしょうか?

オブジェクトとは、それぞれが固有のアイデンティティとデータを持つ、個別の「もの」のことです。

例を挙げましょう。

Book(本)クラスは、本というオブジェクトを作り出すための設計図になります。

このクラスでは、すべての本に共通する属性を次のように定義できます。

  • タイトル
  • 著者
  • ページ数
  • など

個々の本はすべてオブジェクトであり、Bookクラスのおかげで、同じ構造を持つオブジェクトをいくらでも生成できます。これこそがクラスを作る目的であり、Rubyアプリケーションにおいて再利用可能な設計図として機能します。

それでは始めましょう。

この記事を読めば、自分でクラスを書けるようになり、今日からOOPのコードが書けるようになります。

Rubyでクラスを作成する方法

クラスを作成する基本の構文は次のとおりです。

class Orange
end

注目すべきポイント:

  • クラス名は必ず大文字で始める
  • classキーワードで始まり、endキーワードで閉じる
  • 空のクラスはあまり実用性がありませんが、そこからでもオブジェクトを生成することは可能

クラスを作成する方法は他にもあります(Class.newなど)が、これらは特殊な状況でのみ役立つ上級者向けの手法です。

1つのクラスから、たくさんのオブジェクトを

クラスの主な役割は、メソッド・インスタンス変数・定数をまとめたコンテナとして機能し、そこからオブジェクトを生成するための設計図になることです。

オブジェクトを生成するには、newメソッドを使います。

次のように書きます:

Orange.new

オブジェクトを生成するこのプロセスは「インスタンス化」と呼ばれ、生成されたオブジェクトはクラスの「インスタンス」と呼ばれます。

なぜオブジェクトを生成するのでしょうか?

それは、生成したオブジェクト1つひとつがそれぞれ異なり、唯一無二だからです。すべてのオブジェクトには、固有のアイデンティティがあります。

例えば:

Orangeクラスの場合、生成した各orangeオブジェクトは、それぞれ独自の重さや産地、品質などの情報を持っています。

クラスをもっと便利にする

インスタンスメソッドやインスタンス変数を追加し始めると、クラスは一気に実用的になります。

メソッドとは、そのクラスが「できること」です。

例えば:

オレンジを絞ればジュースが取れますよね。

コード例を見てみましょう:

class Orange
  def squeeze
    puts "Here's your juice!"
  end
end

orange = Orange.new
orange.squeeze

こうして定義したメソッドは、オブジェクトに対する「コマンド」になります!

生成したすべてのOrangeオブジェクトは、このsqueezeメソッドを利用できます。これこそがクラスを使う大きなメリットのひとつです。

インスタンス変数とは、クラスが「知っている」状態や情報のことです。

例:

class Orange
  def initialize
    @juice_available = 100
  end

  def squeeze
    @juice_available -= 50
  end
end

インスタンス変数は、先頭に@記号が付く点でローカル変数とは異なります。attr_accessorなどを定義しない限り、クラスの外側から直接アクセスすることはできません。

そのオブジェクトはどのクラス?

Rubyでオブジェクトを扱う際には、そのオブジェクトがどのクラスから作られたのかを把握しておくと非常に便利です。

次のように確認できます:

"".class
# => String

[].class
# => Array

orange.class
# => Orange (orange = Orange.new の場合)

なぜこれが便利なのでしょうか?

メソッドは、Rubyの中でさまざまな処理を動かす小さなエンジンのようなものです。

クラスが分かれば、どんなメソッドが使えるのかを調べられます(Google検索、riコマンド、pryなどを活用しましょう)。つまり、そのオブジェクトに何ができるのかを発見できるのです!

クラスについてさらに学ぶには

ここで紹介した内容は、クラスに関して言えばまだ「氷山の一角」にすぎません。

さらに学びたい方は、以下のトピックもチェックしてみてください。

おすすめの学習テーマ:

  • Rubyのinitializeメソッド
  • attr_accessor、attr_reader、attr_writer
  • OOPにおける継承(inheritance)
  • オブジェクト指向プログラミング全般

ちなみに、Rubyではクラス自体もまたオブジェクトである、ということをご存じでしたか?🙂

まとめ

今回は、Rubyにおけるクラスとは何か、その作成方法、そしてクラスがなぜ便利なのかを学びました!

まずは自分でも簡単なクラスを定義し、newでインスタンスを生成して、メソッドを呼び出してみてください。実際に手を動かすことが、理解への一番の近道です。

最後までお読みいただき、ありがとうございました。この記事が役に立ったら、ぜひ周りの方にもシェアしてくださいね。

  1. Rubyで学ぶ!シーザー暗号エンコーダーの自作方法

    シーザー暗号(Caesar cipher)をご存知ですか? これは、ユリウス・カエサルが敵に知られないよう秘密のメッセージを隠すために実際に使った暗号化手法です。 シーザー暗号は、最も原始的な暗号技術の一つとされています。 その仕組みの核心は、アルファベットの文字をx個分だけずらす(ローテートする)というシンプルなアイデアにあります。 例えば x = 1 の場合、「A」は「B」に、「C」は「D」に変換されます。以下同様です。 では、これをコードで実装するにはどうすればよいのでしょうか? 答えは意外と簡単です。文字は数値(ASCIIコード)として表現できるという事実を利用すれば、文字の回転処理

  2. ブラウザ拡張機能の作り方を徹底解説【サンプルプロジェクト付き】

    この記事では、ブラウザ拡張機能とは何か、どのように動作するのか、そして自分でオリジナルの拡張機能を作る方法について解説します。記事の最後には、実際に「ワンクリックでコードスニペットをクリップボードにコピーできる」拡張機能を作成します。とても楽しい内容ですよ!この記事を読み進めるには、以下が必要です。JavaScriptの基本的な知識Firefoxブラウザ(他のブラウザでも可)ブラウザ拡張機能とは?ブラウザ拡張機能とは、ブラウザに追加することでその機能を拡張し、閲覧体験を向上させるツールのことです。例えば、デバイスにインストールした広告ブロッカーを思い浮かべてください。Webを閲覧する際に広告を