😺

Rubyで使われる%w記法(配列がいっぱいある時にめっちゃ便利!)。知っていたら実務で最強!

2023/11/07に公開

この記事の背景

現場RSpecでテストを実装している時に、テストデータが以下のようになっていました。
(以下のサンプルは例で実際の現場のものではないです)

 :abc=>["1900", "株式会社nori", "inu town【1900】", "ロンドン", "福岡2-9-11", "カフェ", "30", "中村", "2", "山口", "03-4578-5598", "20221124", "1689", "5"], 

このような配列がある時に、RuboCop(コード解析ツール)を使用した時に、配列が多すぎる!
と怒られてしまいました。実際人間の目から見ても見づらいです。
現場では自分がいなくなった後の人がコードを読みやすくしなければいけないので
修正する必要が出てきました。

その時に%wの書き方を学びました。

%w記法とは

配列を作成したいときに「[ ]」(ブラケット)や「” “」(ダブルクォーテーション)を省略して記述するためのRubyの書き方です。コードの可読性(読みやすくなる)がよくなり、コーディングもやりやすくなります。

以下は資料を引用します。

puts ["侍", "ブログ", "Ruby", "\"%w記法\""]
puts %w(侍 ブログ Ruby "%w記法")
侍
ブログ
Ruby
"%w記法"

引用 https://www.sejuku.net/blog/46939#index_id1

このように書けます。

もっと簡単な例で見ていく

rails コンソールを使ってもう少し見ていこうと思います。

animal = ["dog","cat","monkey","bird","lion","elephant"]
=> ["dog", "cat", "monkey", "bird", "lion", "elephant"]

irb(main):002:0> animal
=> ["dog", "cat", "monkey", "bird", "lion", "elephant"]

まだ文字列が少ないのですが、もっと多くなって来ると見づらいです。
それで以下のようにします。

irb(main):001:0> animal =%w(dog, cat, monkey, bird, lion, elephant)
=> ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant"]

上のようにした方が見やすいですよね!実行結果も同じです。

irb(main):002:0> animal
=> ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant"]

%w記法を使う時の注意点

数字を使う時は注意してください。%wを使わない場合は以下のようになります。

 p = ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant",
1000]
=> ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant", 1000]

%wを使う場合

irb(main):001:0> p= %w(dog, cat, monkey, bird, lion, elephant,1000)
=> ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant,1000"]
                           
irb(main):002:0> p= %w(dog, cat, monkey, bird, lion, elephant,1000,0.123)
=> ["dog,", "cat,", "monkey,", "bird,", "lion,", "elephant,1000,0.123"]

のようになります。数字も文字列になってしまいます。

%w以外

他にも書き方はあります。

記法
%W(式展開あり)
%と%Q(「”」のエスケープを省略して文字列を作成)
%r記法(正規表現)
%iと%I記法(シンボル配列)

詳しくは下の資料を見てください。

注意

この記事は2023年10月1日に投稿した記事です。

資料

https://www.sejuku.net/blog/46939#index_id1

Discussion