基本のデータ型(2)
文字
Rubyには、組み込みの文字型はありません。文字は数値として表されます。文字定数は?
構文を使って表すことができます。chr
メソッドを使うと、数値をその文字に対応する文字列に変換できます。
irb(main):025:0> "Reader"[2] => 97 irb(main):026:0> ?a => 97 irb(main):027:0> 97.chr => "a"
代入
単に演算を行っても、結果を格納して後から利用できなければあまり役に立ちません。
irb(main):028:0> x = 42 => 42
文字列には、評価を埋め込むことができる特別な構文があります。この評価は、単純な変数の置換に限りません。あらゆる評価を埋め込むことができます。
irb(main):029:0> "The answer is #{x}!" => "The answer is 42!" irb(main):030:0> "The answer is #{6 * 7}!" => "The answer is 42!"
評価が行われないようにするには、文字列を二重引用符("
)ではなく一重引用符('
)で囲みます。
irb(main):031:0> 'The answer is #{x}!' => "The answer is \#{x}!"
配列
Rubyの配列は、.NET 1.0のArrayList
クラスとよく似た働きをします。これらは任意の型のデータを格納できる可変サイズの配列で、添字は0から始まります。
irb(main):032:0> a = ["hello", 42, "world"] => ["hello", 42, "world"] irb(main):033:0> a << 5.0 * 7.5 => ["hello", 42, "world", 37.5] irb(main):034:0> a[0] => "hello" irb(main):035:0> a[6] = 'hi' * 2 => "hihi" irb(main):036:0> a => ["hello", 42, "world", 37.5, nil, nil, "hihi"] irb(main):037:0> a[99] => nil
このコードでは、プッシュ演算子(<<
)を使って配列の末尾に要素を追加する方法と、添字演算子([]
)を使って値を取得および設定する方法を示しています。配列の末尾よりも後ろに要素を追加すると、配列内の「穴」はnil
値で埋められます。配列の末尾を越えた位置の値にアクセスしようとすると、例外がスローされる代わりにnil
値が返されます。
範囲添字を使うと、配列の一部を切り取ることができます。これを負の添字と組み合わせて使い、前からではなく後ろから配列にアクセスすることもできます(-1
は末尾の要素、-2
は末尾から2番目の要素という順になります)。逆方向の範囲を使って配列の一部を逆順に切り取ることはできませんが、順方向の範囲を使った後でreverse
メソッドを呼び出すことはできます。
irb(main):038:0> a[-1] => "hihi" irb(main):039:0> a[1..3] => [42, "world", 37.5] irb(main):040:0> a[2..-2] => ["world", 37.5, nil, nil] irb(main):041:0> a[-4..-1] => [37.5, nil, nil, "hihi"] irb(main):042:0> a[-1..-4] # Won't work => [] irb(main):043:0> a[-4..-1].reverse # Works fine => ["hihi", nil, nil, 37.5]
文字列と同様に、配列でもいくつかのユニークで便利なメソッドを利用できます。
irb(main):044:0> a => ["hello", 42, "world", 37.5, nil, nil, "hihi"] irb(main):045:0> a.compact => ["hello", 42, "world", 37.5, "hihi"] irb(main):046:0> a.join => "hello42world37.5hihi" irb(main):047:0> [10, 75, 6, 29].sort => [6, 10, 29, 75] irb(main):048:0> [[1, 2, 3], [4, 5, 6]] => [[1, 2, 3], [4, 5, 6]] irb(main):049:0> [[1, 2, 3], [4, 5, 6]].flatten => [1, 2, 3, 4, 5, 6]