0
0

More than 1 year has passed since last update.

今一度、再認識しておこう、""と''の違い

Posted at

環境

Ruby 2.6

はじめに

文字列を囲む時、ダブルクォーテーションで囲む場合と、シングルコーテーションで囲む場合とがあります。基本的な使い方をする分には、どっちを使ってもいいし、どっちを使っても同じです。個人的には、ダブルクォーテーションをひいきしてよく使っています。しかし、時々ありがちなことがあります。ネット上からサンプルコードをコピペして引用したときのことです。サンプルコードにシングルコーテーションが使われていて、気にせずに、そのまま利用し続けるようなことがあります。なぜ、ダブルクォーテーションに置換しなかったのかと言えば、特に理由はありません。本当になんとなくだけです。しかし、シングルコーテーションを残しておいたことで、あるとき、思わぬところで、変な挙動を見かけてしまうことがあります。「あれ? メッセージ名に変数が含まれている。」

そこで、ダブルクォーテーションとシングルコーテーションの違いについて、今一度、再確認しておきましょう。

その1

単に、文字列だけを扱う場合であれば、ダブルクォーテーションでも、シングルコーテーションでも、どっちを使っても同じです。

sample.rb
str1 = "次の停車駅は、米原です"
str2 = '次の停車駅は、米原です'

puts str1
puts str2

出力結果。

次の停車駅は、米原です
次の停車駅は、米原です

その2

文字列の中に変数が含まれる場合、ダブルクォーテーションとシングルコーテーションとでは、挙動が変わってきます。文字列の中に変数が含まれる場合は、必ず、ダブルクォーテーションで囲む必要があります。シングルコーテーションで囲むと、変数がそのまま文字列として認識されてしまいます。

sample.rb
station = "米原"

str1 = "次の停車駅は、#{station}です"
str2 = '次の停車駅は、#{station}です'

puts str1
puts str2

出力結果。

次の停車駅は、米原です
次の停車駅は、#{station}です

文字列の中に変数を含める場合、下記のように、文字列と変数を分離させて+で繋げると、ダブルクォーテーションを使っても、シングルコーテーションを使っても同じ結果になります。他言語からRubyに移った人は、Ruby特有の#{変数}という書き方が、最初はなんとなく、気持ち悪いといった印象を持つかも分かりません。だが、慣れてくると、逆に#{変数}の書き方の方が、スマートな気がしてくるものです。慣れというのは不思議なものです。

sample.rb
station = "米原"

str1 = "次の停車駅は、" + station + "です"
str2 = '次の停車駅は、' + station + 'です'

puts str1
puts str2

出力結果。

次の停車駅は、米原です
次の停車駅は、米原です

その3

文字列の中に、変数だけでなく改行コードが含まれている場合でも、シングルコーテーションは使えません。シングルコーテーションを使うと、改行コードも文字列として認識してしまいます。あえて意図的に、文字列として認識させたい場合は、シングルコーテーションを使えばいいでしょう。しかし、そのようなケースが訪れることは、自身の経験上、あまりないような気がします。

sample.rb
str1 = "次の停車駅は、米原です \n"
str2 = '次の停車駅は、米原です \n'

puts str1
puts str2

出力結果。

次の停車駅は、米原です
次の停車駅は、米原です \n

その4

ダブルクォーテーションの中にシングルコーテーションを記述することはできます。逆に、シングルコーテーションの中にダブルクォーテーションを記述することもできます。しかし、このような書き方をすれば、後からコードを見直した時に、一瞬「おや?」と思ってしまうことになりかねません。このような書き方をするケースも、恐らくそうそうないかとは思います。

sample.rb
str1 = "'次の停車駅は、米原です'"
str2 = '"次の停車駅は、米原です"'

puts str1
puts str2

出力結果。

'次の停車駅は、米原です'
"次の停車駅は、米原です"

その5

ダブルクォーテーションの中にダブルクォーテーションを書く場合、また、シングルコーテーションの中にシングルコーテーションを書く場合は、エスケープする必要があります。

sample.rb
str1 = "\"次の停車駅は、米原です\""
str2 = '\'次の停車駅は、米原です\''

puts str1
puts str2

出力結果。

"次の停車駅は、米原です"
'次の停車駅は、米原です'

データベースに、nilではなく、空白文字列(""または'')を更新する場合は、このような書き方をすることはよくあります。

sample.rb
"\"\""
'\'\''
0
0
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
0
0