スライドショー

はじめてのRuby!inspectとは!?使い方を徹底解説!

rubyには、オブジェクトや配列をわかりやすい文字列で返すメソッドとして、inspectメソッドが用意されています。

「オブジェクトや配列をわかりやすく出力するには?」
「inspectメソッドの使い方/書き方は?」
「inspectとto_sって何が違うの?」

といった方に向けて、この記事では、


【基礎】inspectメソッドとは何か?
【基礎】inspectメソッドの使い方
【発展】inspectとto_sの違い

など、inspectメソッドについての基礎から発展的な内容について解説していきます。

inspectとは

inspectメソッドとは、オブジェクトや配列などをわかりやすく文字列で返してくれるメソッドです。

実はデバッグでよく利用されるpメソッド(標準出力するメソッド)は、このinspectメソッドが使われています。

そのinspectメソッドの構文は以下のように表せます。

"オブジェクトや配列など".inspect

inspectメソッドの概要と書き方が分かったところで、次の項ではinspectメソッドの使い方について解説いたします。

inspectメソッドの使い方

inspectメソッドは、Objectクラスで定義されており、クラス名・オブジェクトid・インスタンス変数を出力します。

さらに、Stringクラス、Hashクラス、Arrayクラス、などそれぞれのクラスでinspectメソッドはオーバーライド(上書き)されています。

つまり、inspectメソッドは対象の型に沿った文字列を返すのです。

それでは、それぞれの型でinspectメソッドを使用した場合、どのように出力されるか具体的に確認していきましょう。

文字列や数値をinspectで出力する

inspectメソッドは文字列や数値の場合、値をそのまま出力します。

puts "moji".inspect
puts 12.inspect

実行結果:

"moji"
12

配列やハッシュをinspectで出力する

配列やハッシュの場合は、全体を[]または{}で囲み、各要素をそれぞれinspectメソッドで出力した結果が返ります。

array = ["apple", 1, true]
hash = {:name => "tanaka", :age => 25}

puts array.inspect
puts hash.inspect

実行結果:

["apple", 1, true]
{:name=>"tanaka", :age=>25}

モジュールやクラスをinspectで出力する

対象がモジュールの場合、モジュール名が実行結果として出力されます。

また、対象がクラスの場合、「#<クラス名:オブジェクトid インスタンス変数>」が実行結果として出力されます。

以下に、モジュールとクラスの場合のサンプルプログラムを記載します。

# モジュールを定義
module Hoge 
end

# クラスを定義
class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
end

puts Hoge.inspect
puts Person.new("tanaka", 25).inspect

実行結果:

Hoge
#<Person:0x00000002265de8 @name="tanaka", @age=25>

inspectとto_sの違いとは

inspectメソッドと同様のメソッドが他にもあります。

それはto_sメソッドです。

しかし、細かい部分で挙動が異なってくるので、この項ではinspectメソッドとto_sメソッドの違いを解説いたします。

nilの場合

nilをinspectメソッドとto_sメソッドで出力した場合、両者で異なる出力結果となります。

puts nil.inspect
puts nil.to_s

実行結果:

nil
 

inspectメソッドではnilを文字列として出力しますが、to_sメソッドではそのままnilとして出力しています。

文字列の場合

文字列を指定した場合にも、異なる出力結果となります。

puts "moji".inspect
puts "moji".to_s

実行結果:

"moji"
moji

文字列を指定してinspectメソッドとto_sメソッドで出力した場合、ダブルクォーテーションの有無の違いが生じます。

クラスの場合

クラスオブジェクトの場合も、inspetメソッドとto_sメソッドに違いが生じます。

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

tanaka = Person.new("tanaka", 25)

puts tanaka.inspect
puts tanaka.to_s

実行結果:

#<Person:0x00000001cdda88 @name="tanaka", @age=25>
#<Person:0x00000001cdda88>

inspectメソッドではクラス名とオブジェクトidとインスタンス変数を出力しますが、to_sメソッドはクラス名とオブジェクトidのみ出力しインスタンス変数は出力しません。

このようにinspectメソッドとto_sメソッドでは、同じ「文字列を返す」メソッドでも微妙に違いがあるので使用する際には注意が必要です。

まとめ

この記事では、inspectメソッドの使い方をサンプルプログラムを用いて解説しました。

inspectメソッドは、オブジェクトや配列をわかりやすい文字列で返してくれるメソッドです。

ただ、inspectメソッドとto_sメソッドの違いについて注意しておく必要があります。

デバッグの際にも役に立つメソッドなので、ぜひこの機会にinspectメソッドをマスターしてください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説