はじめに
Rubyでは文字列を作る際に、シングルクオート(')、またはダブルクオート(")で囲む方法が存在します。ちらっと調べると、「どちらでも良い」と書かれており、「どちらでも良い」が一番柔軟かつ困ることだなあと思ったので、調べてみようと思いました。
明確に異なる点
\n
改行文字など(バックスラッシュ記法)を使用する場合
puts 'りんご\nゴリラ\nらっぱ'
#=> りんご\nゴリラ\nらっぱ
puts "りんご\nゴリラ\nらっぱ"
#=> りんご
# ゴリラ
# らっぱ
他にも\s
空白文字や、\t
タブ文字もよく使用するが、シングルクオーテの場合そのまま文字列と見なされてしまう。
#{変数}
式展開を使用する場合
name = 'パンダ'
puts "しりとりの続きは#{name}です"
#=> しりとりの続きはパンダです
puts 'しりとりの続きは#{name}です'
#=> しりとりの続きは#{name}です
# シングルクオーテを使用したい場合このように書ける
puts 'しりとりの続きは' + name + 'です'
#=> しりとりの続きはパンダです
この場合もシングルクオーテではそのまま文字列とみなされてしまう。
+演算子を使用する書き方は、記号が多く登場してしまうのでダブルクオーテでの式展開の書き方の方が読み書きしやすい。
その他の記述
逆に機能を打ち消したい場合
puts "りんご\\nゴリラ\\nらっぱ"
#=> りんご\nゴリラ\nらっぱ
name = 'パンダ'
puts "しりとりの続きは\#{name}です"
#=> しりとりの続きは#{name}です
バックスラッシュ記法や、式展開の手前に \
バックスラッシュをつける
文字列の中でシングルクオーテやダブルクオーテを使用したい場合
puts 'He can\'t say, "Hello, World."'
#=> He can't say, "Hello, World."
puts "He can't say, \"Hello, World.\""
#=> He can't say, "Hello, World."
シングルクオーテやダブルクオーテの手前に \
バックスラッシュをつける
最後に
私の現在の開発現場では、文字列の中に ”式展開が記述されている” がわかりやすいからという理由で「ダブルクオートを使う必然性がない場合は、シングルクオートを使おう」というコーディング規約です。皆さんの考え方や捉え方など教えていただけると嬉しいです!
ご指摘や、その他ご意見などあれば是非コメントお待ちしております!
参考文献