Help us understand the problem. What is going on with this article?

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

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ヶ月間の体験談を読んでアウトプットの重要性を知ったので毎日継続できるようにまずは習慣化させていきます!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away