インスタンス変数を参照する attr_reader
クラスを定義するときにインスタンス変数を初期化することは多い。
そのインスタンス変数を読み込みたいときがある。
そんなときはattr_readerメソッドを使う。
目次
attr_readerとは
attr_readerとは、インスタンス変数を読み込むメソッドを定義するメソッド。
attr_readerについてはRubyリファレンスマニュアル参照。
Moduleクラス インスタンスメソッド
attr_reader
https://docs.ruby-lang.org/ja/latest/class/Module.html
attr_readerを使う書式は次のとおり。
attr_reader シンボル
シンボルには: + @なしの変数名
が入る。
シンボルを,
でつなぐと複数のシンボルを設定できる。
シンボルの:
以下がメソッド名になる。
シンボルについてはRubyリファレンスマニュアルを参照。
Rubyリファレンスマニュアル ライブラリ一覧
組み込みライブラリ Symbolクラス
https://docs.ruby-lang.org/ja/latest/class/Symbol.html
attr_readerを使ったコードを書く
Regattaクラスを定義してattr_readerメソッドを試す。
attr_test.rb
#Regattaクラスを定義する class Regatta attr_reader :tournament, :event def initialize @tournament = "全日本選手権" @event = "女子シングルスカル" end def display(rank,crew) puts "#{@tournament} #{rank}着 #{crew}" end end #Regattaクラスのインスタンスをつくる regatta = Regatta.new #結果をためす puts "直接呼び出す。" puts "@event => #{@event}" puts "eventメソッドで呼び出す。" puts "regatta.event => #{regatta.event}" puts "条件つき出力でためす。" print "if @event == 女子シングルスカル: " regatta.display(1,"Aボートクラブ") if regatta.event == "女子シングルスカル" print "if @event == 男子シングルスカル: " regatta.display(1,"Bボートクラブ") if regatta.event == "男子子シングルスカル" print "\n"
コードの説明
テストコードの実行結果
コードを実行する。
ターミナル/PowerShell
ruby attr_test.rb
実行結果
直接呼び出す。 @event => eventメソッドで呼び出す。 regatta.event => 女子シングルスカル 条件つき出力でためす。 if @event == 女子シングルスカル: 全日本選手権 1着 Aボートクラブ if @event == 男子シングルスカル:
直接は呼み込めないインスタンス変数がattr_readerで定義したeventメソッドを使うと読み込めているのがわかる。
eventメソッドで呼び出したオブジェクトがif文の条件に使えている。
書き込み専用と読み書き用のメソッド
読み込み専用attr_reader
のほかに次のメソッドもある。
書き込み専用: attr_writer
読み書き用: attr_accessor
今回の動作確認環境
macOS 10.13.4
Ruby 2.4.4p296
ターミナル 2.8.2
Windows10 1709
Ruby 2.5.1p57 [x64-mingw32]
Windows PowerShell 5.1.16299.251