pp とは
pen-pineapple のことではない。
Ruby のメソッドで,ややこしいオブジェクト1もいい感じに表示してくれるもの。
用途は p
メソッドと同じだが,それよりもっと分かりやすくきれいに表示してくれることになっている。メソッド名は pretty print から。
p
と pp
でどう違うかはよく知らないけど,たとえば要素数が多いハッシュを表示させると,後者では改行を入れてくれるようだ(小さいハッシュだと変わらない)。
p "A".upto("K").with_index.to_h
# => {"A"=>0, "B"=>1, "C"=>2, "D"=>3, "E"=>4, "F"=>5, "G"=>6, "H"=>7, "I"=>8, "J"=>9, "K"=>10}
pp "A".upto("K").with_index.to_h
# => {"A"=>0,
# "B"=>1,
# "C"=>2,
# "D"=>3,
# "E"=>4,
# "F"=>5,
# "G"=>6,
# "H"=>7,
# "I"=>8,
# "J"=>9,
# "K"=>10}
require 必要?
pp
はメソッド名だがライブラリーの名称でもある。
pp
ライブラリーは組込みではなく「標準添付ライブラリー」だ。だからインストールは必要ないが,require
が必要となる。
なのだけれど,実は Ruby 2.5 以降では2,pp
メソッドが最初に呼ばれたときに pp
ライブラリーを裏で自動的に require
してくれるようになっている。
だから,「require
が必要」なのは嘘ではないけれど,「ユーザーにとっては不要」なのだ。
(ユーザーにとって)require
が不要,ということは公式リファレンスマニュアルにも書かれている:
Kernel.#pp (Ruby 3.0.0 リファレンスマニュアル)
Ruby 2.5 リリース時に公開された @jnchito さんの以下の記事にも書かれている。
サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 Part 2 - Qiita
記事を書いたきっかけ
以下の記事を読んでいて,「おや」と思った。
週刊Railsウォッチ(20210209後編)Rubyでミニ言語処理系を作る、Kernel#getsの意外な機能、CSSのcontent-visibilityほか|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社
ここに
「ちなみに
pp
はrequire
しないと使えないんですよ」
という台詞が出てくる。
そういえば,いろいろなところで「require
が必要」と書かれているなあ,と思ったのがこの記事を書いたきっかけ。
いま改めて上記の記事を見に行くと,本件は既に @ima1zumi さんが指摘されていて,記事の訂正も済んでいた。
なお,「週刊Railsウォッチ」は面白くて役に立つので毎回楽しみにしている。
-
「ややこしいオブジェクト」というのは,「ハッシュの配列」みたいなのとか。 ↩
-
Ruby 2.4 系のサポートは 2020-04-05 に切れている ので,現在サポートされているすべての Ruby バージョンに当てはまる。 ↩