Murga

個人的に言いたいコト・主張・気持ち。

文字列リテラルを表すのにシングルクォートとダブルクォートどっちを使うか問題、私見

プログラミングにおいて、文字列リテラルを表すときにシングルクォートを使ったり、ダブルクォートを使ったりするが、両者をどう使い分けるかについての私見をまとめる。

シングル・ダブルで機能が異なる場合 (Bash・Perl・PHP など)

Bash をはじめとするいくつかの言語では、

  • シングルクォートで囲んだ場合は変数が展開されない
  • ダブルクォートで囲んだ場合は変数が展開される

という機能差が存在する。

こうした機能差が存在する言語においては、自分は変数展開したい場合を除いてシングルクォートを使うことにしている。変数展開させたい場所だけダブルクォートを使うワケだ。

# ただの文字列で変数展開しているのでシングルクォート
$ my_variable='Hello World'

# 変数展開しているのでココだけダブルクォートを使う
$ second_variable="Welcome to ${my_variable} !!"

# curl する時とか
$ curl -X POST \
    -u "${my_username}:${my_password}" \
    -H 'Content-Type: application/json' \
    "https://example.com/${api_name}/"

こんな感じ。

一律でダブルクォートを使う人もいるが、うっかり変数展開される事故を防ぐために、自分はシングルクォートを使うようにしている。

変数展開しない文字列の中に、文字としてシングルクォートを書きたい場合は、エスケープして書く。エスケープを面倒臭がってダブルクォートを使うことはしない。

シングル・ダブルで機能が変わらない場合 (JavaScript・Python など)

JavaScript や Python では、シングルクォートを使ってもダブルクォートを使っても、変数展開などの機能差がない。こういう言語では、シングルクォートのみを使うことにしている。

以前、JavaScript についてはクォーテーション問題について記事を書いたが、この時点から比べて現在はよりシングルクォート派になっている。

neos21.hatenablog.jp

シングルクォートを文字として使用したい場合は、やはりエスケープして挿入している。エスケープを面倒臭がってダブルクォートを使うことはないのだ。

シングルクォートを優先的に使うメリット

というワケで、自分はシングルクォートを優先的に使う派閥なのだが、なぜダブルクォートをなるべく使わず、シングルクォートを優先しているかというと、大きく2つの理由がある。

1. コードの見た目がダブルクォートよりスッキリする

"A"'A' とでは、後者のシングルクォートを使った方が、「点々」が少なくて見た目がスッキリする、という、見た目の問題。

2. US キーボード使用者はシングルクォートの方がタイプが楽

僕は普段、US キーボードを使っている。US キーボードの場合、

  • シングルクォートは、ホームポジションの右手小指の一つ右隣のキー (L キーから2つ右のキー。日本語配列だと : * け の刻印のキー位置)
  • ダブルクォートは、Shift を押しながら↑のキー

と入力する。つまり、シングルクォートは Shift を押さず、ホームポジションからほとんど移動せずに入力できるのだ。入力が楽だから、シングルクォートを使う傾向にある、ということ。

日本語キーボードの場合は、

  • シングルクォートは Shift + 7 キー
  • ダブルクォートは Shift + 2 キー

と入力する。いずれも Shift キーの押下が必要なので、あまり「入力が楽」という感覚が持ちづらいかと思う。

ただ、2 キーと 7 キーの位置関係から、シングルクォートを入力する際は左 Shift、ダブルクォートを入力する際は右 Shift を押下することになるだろう。ココで、右 Shift キーを使い慣れていないユーザがダブルクォートを入力しようとすると、「左小指で左 Shift を押しつつ、左中指あたりで 2 キーを入力する」という奇妙な手の形になってしまう。そう思うと、日本語配列の場合もシングルクォートを優先的に使うようにしておくと、右 Shift キーに慣れていないユーザでもあまり入力の負担がかからずに済むかと思う。

以上

US キーボードは記号キーの配列がとても理にかなっていて、日本語配列から転向してさらに入力速度が向上した。特にシングルクォートについては「Shift キーを押さなくて良くなった」唯一の記号であり、入力負荷が下がったことから、ダブルクォートよりも多用するようになった次第。

それに、プログラミング言語によって機能差がある場合は、それを明確に使い分けることで、変数展開の有無などを明示でき、リーダブルで誤解の少ないコードになると思っている。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 68人 クリック: 1,802回
  • この商品を含むブログ (140件) を見る