#13 Rubyで学ぶクラスの基本

Rubyのクラスは、シンプルな書き方が特徴です。この記事では、Rubyにおけるクラスの基本と、便利な仕組みを解説します。

クラスを作ってみる

class Person
  def initialize(name)
    @name = name
  end

  def greet
    puts "こんにちは、#{@name}です"
  end
end

initializeという特別なメソッドが、Javaのコンストラクタにあたります。@が付いた変数は「インスタンス変数」と呼ばれ、そのインスタンスの中で共有される値を表します。

クラスからインスタンスを作る

person = Person.new("太郎")
person.greet # こんにちは、太郎です

継承を使う

既存のクラスの機能を引き継ぎたい場合は、<を使って親クラスを指定します。

class Student < Person
  def initialize(name, grade)
    super(name)
    @grade = grade
  end

  def greet
    puts "こんにちは、#{@grade}年生の#{@name}です"
  end
end

super(name)は、親クラス(Person)のinitializeを呼び出す書き方です。

attr_accessorという便利な機能

インスタンス変数を外部から読み書きできるようにするには、通常メソッドを自分で書く必要がありますが、Rubyにはattr_accessorという、それを自動化する便利な機能があります。

class Person
  attr_accessor :name
end

person = Person.new
person.name = "太郎"  # 書き込み用メソッドが自動で使える
puts person.name       # 読み込み用メソッドが自動で使える

読み込み専用にしたい場合はattr_reader、書き込み専用にしたい場合はattr_writerを使います。

クラスメソッドという仕組み

インスタンスを作らなくても呼び出せるメソッドを定義したい場合は、メソッド名の前にself.を付けます。

class MathUtils
  def self.add(a, b)
    a + b
  end
end

puts MathUtils.add(3, 5) # 8

Rubyならではの注意点

@name(インスタンス変数)は、クラスの外から直接アクセスできません。外部から値を読み書きしたい場合は、attr_accessorのような仕組みを使う必要がある、というルールを覚えておきましょう。すべてのインスタンス変数を無条件でattr_accessorにしてしまうと、外部から自由に書き換えられてしまうため、本当に外部への公開が必要な変数だけに絞るのがよい設計です。

まとめ

Rubyのクラスはinitializeで初期化し、@でインスタンス変数を扱います。superによる継承や、attr_accessorによる外部からのアクセスも覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Rubyをもっと学びたい方には「プロを目指す人のためのRuby入門[改訂2版]」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本