#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿