• 締切済み

スクリプト言語で文字列を囲む "" '' の厳密な使い分け?

スクリプト言語、Perl, PHP, Pythonでよく a = "文字列" b = '文字列' のように、ダブルとシングルが使われますが、 サンプル等は''シングルが多いですが、私は元々VBをよく使っていたので、""の方が馴染みます。 ''との違いは""は中で変数が展開されることだと思いますが それ以外で使い分ける厳密な理由はありますか?

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.7

>#6 私もツッコミをば スクリプト言語とインタープリタをごっちゃにしていませんか? 逐次実行って言葉がインタープリタ方式と勘違いしてるな、思わせるって事ですが。 スクリプト言語ってのはかなり広範な意味があるようですし、狭義にもインタープリタ方式限定ではないようです。 http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E

  • hiroshi_y
  • ベストアンサー率100% (1/1)
回答No.6

5> 気になったのでツッコミ。 >実行の最初に行われるコンパイルがマシン語命令で数命令(ナノ秒単位)で遅いだけで スクリプト言語は、最初にコンパイルなど行われません。 PERLがスクリプト言語ではない、と言われる理由です。 PHP, Pythonは共にスクリプト言語です。 シングル、ダブルの比較ではありませんが、PHPで文字列の置換え結果の実験記事です。 http://www.objective-php.net/blog/detail/20100123 {}の有無で速度が劇的に変わる、というあたりが、毎回文字列を処理しているとする判断根拠となるでしょう。 逐次実行するのがスクリプト言語の特徴で、ループ内の文字列を毎回逐次実行する処理系は、スクリプト言語であれば別に間抜けではありません。 コンパイル言語とスクリプト言語の違いも知らず、その事でスクリプト言語の作者を間抜け呼ばわりするする方が、よっぽど間抜けです。

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.5

言語によって違うというのは他の方が書いている通り。とはいえ、" " の方が ' ' より機能が多いというケースが多いですが。 で、"ABC" と 'ABC' のようにどちらを使っても同じ場合に、どちらを使うのかは好みでしょう。 私は、両者が混在すると見にくいので、" " の機能を使うケースが多ければ、" " で統一する方が良いと思います。 実行速度の事を書いてる人もいますが、"ABC" と 'ABC' では、実行の最初に行われるコンパイルがマシン語命令で数命令(ナノ秒単位)で遅いだけで、コンパイル結果の構文木や中間コードの実行の際には全く同じでしょう。従って、深いループの内側に合った場合でも実行時間は同じはず。そうでなければ処理系を書いた人が間抜けすぎです。 シェルはループだと毎回ソースを読んでそうな気がするので、数億回のループの中なら"ABC"より'ABC'の方が1秒くらい速いかもしれません。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

言語によっても違います。 Perlやシェルスプリプトでは シングル: \や変数置換をほとんど行わない ダブル:\や変数置換を行う なのですが、 Pythonでは、両者に違いはありません。両方とも\の展開をします。 唯一、(エスケープなしに)シングルの中にはシングルを書けず、ダブルの中にはダブルを書けない点だけが違います。 \を展開しないような文字列は r''とかr""とrを付けます。 また同じ「展開しない」シングルでも Perlではシングルでも\'と\\だけは例外的に展開しますが シェルスクリプトでは一切の例外なく\は展開されません シングルが使われるのは、展開をせずに入力したままを使いたいときです。 例えば、Perlでは @も展開される対象ですから $a='a@b' のつもりで $a="a@b" とやると思った通りになりません。 あとは、文字列中にシングルクオートが使われるならダブルクォートで、逆ならシングルクオートで、という使いわけもあります。 さらに、言語によっては、そのどちらでもないクオートが用意されているものがあります。 例えば、Perlでは q(....) で '....'と、qq(....)で"...."と同じ意味になります。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

シングルでくくった場合、ダブルをエスケープしなくて良い、逆も同様。 なので、エスケープが面倒だという手抜き気分のときに、使う事はあります。 echo '<a href="hoge">ホゲホゲ</a>'; "SELECT * FROM t_table WHERE f_field='hoge'"; 勉強中に参照していたサイトで、推奨していたので悪いクセとして残ってしまった。 たぶん、私自身がVB出身ってこともあるでしょう(もしかすると、私が参照していたサイトの制作者も)。 使い分ける理由は、シングルは変数が展開されないので余分な処理を通らない、つまり、少し早い。※もしかするとメモリ使用量にも影響があるかも知れない。 『ループの中で何回も使われる場合に多少影響がある』程度の事で、『ウェブプログラムを0.1秒縮めたとしても体感どれほど変わる?』としか思えないぐらいの影響でしかないでしょうが。 『ダブルを使う必要がない個所では、使わない方がプログラムコードとして美しい、無駄に意味なく実行速度を遅くすることは美しくない。』 という、自己満足が最大の理由で私は使い分けてます。 ※なので、開発期間に余裕のないときのプログラムコードはダブルクォーテーションだらけです。 ま、必要不必要で使い分ける場合でも、以下のように混在させるのは美しくないので、どっちかに統一しますが。 query = 'SELECT * FROM t_table '; query .= "WHERE f_field='{$hoge}' ";

noname#111181
noname#111181
回答No.2

ダブルクォーテーションの中では、\nや\tといったエスケープ文字を展開してくれます。

回答No.1

>''との違いは""は中で変数が展開されることだと思いますが >それ以外で使い分ける厳密な理由はありますか? 認識はあっていますが・・・引用符の展開する規則がプログラム言語で違いがあるので要注意です ^ ^ なお、バック・クォート『`』はコマンドを実行した結果を展開してくれる機能を持つ言語もあります。