Rubyタグ作りました -文字リテラル-
少し復習してゆきましょう。いつまで続くかな・・・
基本的な部分でですが、本格的にお仕事では利用していなかったので復習するたびに新たな発見があります。最近担当している運用系のデータやログおよび作業管理系のツールとして利用できればと思っています。顧客が利用を許可してくれるかの問題もあるのですけどね。EXCELやMS-ACCESSのVBAでもできるのでしょうが、テキストファイルだけだったりメールを整理しようとするとRubyでやりたいです。
文字列はダブルクォートまたはシングルクォートで囲まれています.ダブルクォートで囲まれた文字列ではバックスラッシュによるエスケープと式展開(後述)が有効になります.シングルクォートで囲まれた文字列では,\\(バックスラッシュそのもの)と \'(シングルクォート)を除いて文字列の中身の解釈は行われません.
%で始まる形式の文字列を用いることでバックスラッシュの数を減らすことができます. %q!STRING! はシングルクォート文字列, %Q!STRING! (または %!STRING!)はダブルクォート文字列と同じ展開を行います. !の部分には改行を含めた任意の非英数字を使うことができます.始まりの区切り文字が括弧 (`(',`[',`{',`<')である時には,終りの区切り文字は対応する括弧になります.
シングルクォートとダブルクォートの違いは、VBプログラマとしてはあまり意識していませんでした。大昔C言語使っていたときは無条件にダブルクォートでしたからね。シングルクォートは文字列じゃなくて単なるキャラクタでしたからね。Perlとかの文化臭いな。
%Q[STRING]この記述方式も便利そうですね。
irb(main):027:0> print 'abc\nxyz' abc\nxyz=> nil irb(main):028:0> print "abc\nxyz" abc xyz=> nil irb(main):009:0> print %Q[STRING] STRING=> nil irb(main):010:0> print %Q[STR irb(main):011:0" ING] STR ING=> nil
文字列中の式展開
例:
"my name is #{$ruby}"
ダブルクォート(")で囲まれた文字列式,コマンド文字列および正規表現,の中では#{式}という形式で式の内容(を文字列化したもの)を埋め込むことができます.式が変数記号($,@)で始まる変数の場合には {}を省略して,#変数名という形式でも展開できます.文字#に続く文字が {,$,@でなければ,そのまま文字#として解釈されます.明示的に式展開を止めるには#の前にバックスラッシュを置きます.
VBってこの機能無いから文字列連結がけっこうたるいんだよね。
irb(main):024:0> $ruby='RUBY' => "RUBY" irb(main):025:0> print "my name is #{$ruby}" my name is RUBY=> nil irb(main):026:0> print "my name is \#{$ruby}" my name is #{$ruby}=> nil
ヒアドキュメント (行指向文字列リテラル)
シェルのような行指向の文字列リテラルの表現もあります.このような文字列リテラルを「ヒアドキュメント」と呼びます. <<に続いて,引用終了記号になる文字列または識別子を指定します.文字列を指定した場合は,その文字列の種別("",'',``)が文字列全体の性質を決定します. <<の後ろには空白を置くことはできません.
識別子または文字列の前に-が置かれた場合,区切り文字列の前の空白文字(タブとスペース)が取り除かれます.これによって区切り文字をインデントに合わせることが出来ます.
Perlとかでおなじみのヒアドキュメント機能ですね。このヒアドキュメントのソース可読性は賛否両論ですが、SQL文とか記述するのに欲しいんですよね。