Ruby リテラルで数値や文字を直接扱う スクリプトの書き方

バイオインフォ道場、くまぞうです。

プログラムで数値や文字を直接記述することは自然に行いますが、「リテラル」ということを覚えておくと、活用の幅が広がるかもしれません。

スポンサーリンク



リテラルとは

プログラム中で使いたい番号や、ファイル名などの文字列など固定の値として使うことがあります。このように、プログラム中で、数値や文字列を直接的に記述方法はリテラルと呼ばれます。色々な書き方があります。

Rubyで色々なリテラルを使う

数値リテラル

数値リテラルは、文字列リテラル同様よく使う記述方法です。整数・小数は普通に使うと思いますが、16進数表記なども一応覚えておくと便利なときがあります。例えば、リードのマッピング情報でSAMファイルを得られますが、FLAG情報はビットの位置で情報を管理しています。人が読むには難しい情報ですが、プログラムで解析を行う場合は、2進数や16進数表記などを使うと比較的解析しやすくなるかもしれません。

lit1.rb

#! /usr/bin/ruby

a = 6
printf "%04d\n", a
printf "%04b\n", a
$ lit1.rb
0006  # 10進数
0110  #  2進数表記 ビットの位置がわかりやすい

文字列リテラル と ヒアドキュメント

文字列リテラルも良く使う記述方法です。文字列の囲み方は、「”(ダブルクォート)」または「’(シングルクォート)」があります。通常はどちらも同じ効果を得られますが、その他の情報と組み合わせて使う場合には注意が必要です。文字列内で他の情報と組み合わせる場合は「”」を使います。単純に文字列として扱いたい場合は「’」を使います。ヒアドキュメントでは、複数行にわたるメッセージを使うことができます。「<<EOS〜EOS」までがメッセージになります。EOSは任意の文字列の組をマークにできます。

lit2.rb

#! /usr/bin/ruby

a = "hello"
puts "a=#{a}"
puts 'a=#{a}'
puts

b =<<EOS
hello
world.
EOS
puts b
$ lit2.rb
a=hello  # 文字列と組み合わせた変数が展開後出力
a=#{a}   # ただの文字列として出力

# 複数行をそのまま表示
hello
world.
スポンサーリンク



配列 と ハッシュ

配列やハッシュは、生成時に初期値を設定することができます。配列は、カンマ区切りで値を列挙します。ハッシュは、キーと値をセットにして並べます。尚、キーと値は「=>」で連結します。

lit3.rb

#! /usr/bin/ruby

a = [1, 2, 3]
b = {1=>"AAA", 2=>"BBB", 3=>"CCC"}

puts a[1]
puts b[1]
$ lit3.rb
2
AAA

正規表現

正規表現のパターンをリテラルで記述します。「/」で囲んで表現します。尚、$1は正規表現に合致した部分の抜き取りで、(w.*)の部分で「wを先頭にした文字パターン」を保存するように指示しています。

lit4.rb

#! /usr/bin/ruby

"hello world" =~ /(w.*)/
puts $1
$ lit4.rb
world

範囲

範囲を記述することが出来ます。範囲は「..」または「…」で指定します。例えば「1..3」「1…3」とした場合、前者は1,2,3ですが、後者は1,2。つまり終端を含む・含まないの相違があります。

lit5.rb

#! /usr/bin/ruby

(1..3).each {|x| puts x}
puts
(1...3).each {|x| puts x}
$ lit5.rb
1
2
3

1
2

コマンド

rubyのプログラム中から、システムのコマンドを呼び出すときに使います。system関数内に文字列リテラルを記述します。尚、バッククォートで囲む方法もあります。

lit6.rb

#! /usr/bin/ruby

system('cat aaa.txt')

file="aaa.txt"
system("cat #{file}")
$ lit6.rb
aaa bbb
aaa bbb  
スポンサーリンク