LoginSignup
2
1

More than 3 years have passed since last update.

Ruby%記法 〜チェリー本2章〜

Last updated at Posted at 2019-04-30

Ruby%記法 〜チェリー本2章〜

※この記事は初心者の私がチェリー本で学習するにあたって新しく知ったことや考えたことアウトプットするための場として書いています。
この記事は以下の情報を参考にして記述し、一部引用しています。
プロを目指す人のためのRuby入門

 -2.8.2 %記法で文字列を作る

irb(main):001:0> puts Hello, World
Traceback (most recent call last):
        2: from /Users/hiwillowz/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
        1: from (irb):1
NameError (uninitialized constant Hello)

irb(main):002:0> puts 'Hello, World'
Hello, World

irb(main):003:0> puts %q!Hello, World!
Hello, World

1行目は何も囲ってないのでNameErrorが出てますね
2行目はシングルクォーテーションで囲ったので文字列としてちゃんと認識されています
3行目は%記法というもので%q!何か!でシングルクォーテーション文字列を作ることができるものになります。

irb(main):004:0> a = 1
=> 1
irb(main):005:0> a.class
=> Integer
irb(main):006:0> b = %Q!1!
=> "1"
irb(main):007:0> b.class
=> String

%Q!何か!で%の次のqを大文字することでダブルクオーテーションで展開することができます。


追加

%記法で配列を作る

irb(main):122:0> %w(red green blue)
=> ["red", "green", "blue"]

irb(main):123:0> prefix = 'Colors of traffic light are'
=> "Colors of traffic light are"
irb(main):124:0> %W(#{prefix}red green deep\ blue)
=> ["Colors of traffic light arered", "green", "deep blue"]

%w()で()の中の文字列で配列を作る(空白で区切り、空白前の\で空白も文字列と認識させる)。
%W()で()の中の文字列で配列を作り、同時に式展開もする。


%記法でシンボルやシンボルの配列を作成する

irb(main):117:0> %s(ruby is fun)
=> :"ruby is fun"

irb(main):118:0> %i(ruby is fun)
=> [:ruby, :is, :fun]

irb(main):120:0> name = 'Alice'
=> "Alice"
irb(main):121:0> %I(hello\ngood-bye #{name.upcase})
=> [:"hello\ngood-bye", :ALICE]

%s()は()の中の文字全体でシンボル化する。
%i()は()の中の文字毎にシンボル化する(空白で区切る)。
%I()は()の中の文字毎にシンボル化し、同時に式展開もする。


忘れやすそうな文字列

-\n 改行 " "

irb(main):011:0> puts "Hello,\nWorld"
Hello,
World

クォートを入れる為のバックススラッシュ\

irb(main):019:0>  %Q!Hello,World!!
irb(main):020:0* 
irb(main):021:0* quit
Traceback (most recent call last):
        1: from /Users/hiwillowz/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
SyntaxError ((irb):19: syntax error, unexpected '!', expecting end-of-input)
 %Q!Hello,World!!
                ^
irb(main):022:0>  %Q!Hello,World\!!
=> "Hello,World!"

\を何か意味を含む記号の前につけることでその記号をただの文字列と認識させることができます!
1行目\をつけなかったことで!が文字列と認識されずエラーを起こしている。

あとがき
Qiita初投稿になりますがこんな5分くらいで書けそうな記事でも1時間以上かかりました。
ただMarkdown記法を覚えたり、タイピングが遅かったりこれから早くしていきます。

そもそもなぜこんな大したことない記事でも書こうかと思ったのかというと、
ryoutakuさんの
【未経験から転職】「28歳+空白期間1年+高卒+プログラミング経験なし」が、自社開発の企業からスカウト頂いてエンジニア転職する4ヶ月間の体験談を読んでアウトプットの重要性を知ったので毎日継続できるようにまずは習慣化させていきます!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1