Ruby の基礎(数値オブジェクト、文字列オブジェクト)

Ruby の基礎(オブジェクトの基本、コメント、変数と定数など) - tatsuyaoiw.hatenablog.com の続き。

数値オブジェクト

数値オブジェクトの例です。

p x = 10.1 # 少数もOK
p x = Rational(2, 3) # 分数で表示

実行結果はこちら。

10.1
(2/3)

あと、数値オブジェクトに使える演算子およびメソッドもろもろ。

p 5 + 2
p 5 - 2
p 5 * 2
p 5 / 2
p x = 5 ** 2 # 5の2乗
p x = 5 % 2 # 5を2で割った余り
p x = Rational(2, 3) + Rational(5, 6) # 分数どうしの演算

p 10.5.to_i # 整数に直す
p 10.5.to_r # 分数に直す

p 10.8.round # 四捨五入
p 10.8.ceil # 切り上げ
p 10.8.floor # 切り捨て
p rand(100) # 乱数を発生させる
p Math.sqrt(2) # 平方根

長いですが、実行結果はこちら。

7
3
10
2
25
1
(3/2)
10
(21/2)
11
11
10
97
1.4142135623730951

文字列オブジェクト

文字列オブジェクト = String クラスのオブジェクトなので、以下のように書くこともできます。(まあ、普通に書いたほうがラクなのであんまり意識する必要もないですが)

String.new("Hello")

あと、"" と '' の使い分けは重要とのこと。

puts x = "Hello\nworld!" # "" は変数や特殊文字を展開する
puts y = 'hello\nworld!' # '' は展開しない

実行結果に違いがでます。

Hello
world!
hello\nworld!

変数を文字列の中で展開するときは、#{[変数名]} を使います。

name = "tatsuya"
puts "My name is #{name}" # 変数の展開

また、もう一つ重要なのが、マルチバイト文字列の表示です。例えば、

puts "こんにちは" # マルチバイト文字列の表示

として実行したときに、そのままだと invalid multibyte char (US-ASCII) とエラーになります。(これ、Ruby のバージョンによって挙動が違うっぽい?ので注意が必要ですが、エラーになったのは Ruby 1.9.3 の場合です)マルチバイトの文字列を表示するときには、ファイルの一行目に # encoding: utf-8 を書いておきます。

# encoding: utf-8
puts "こんにちは" # マルチバイト文字列の表示

とすると、問題なく表示できます。

その他、文字列オブジェクトで使えるメソッドも様々です。

p "hello".length # 文字列の長さ
p "hello".upcase # すべて大文字にする
p "hello".reverse # 逆順にする
p "hello".index("o") # 文字のインデックス
p "hello".include?("o") # 文字列に含まれるか

実行結果。

5
"HELLO"
"olleh"
4
true

最後に、文字列オブジェクトに関連して、メソッドの中には "破壊的メソッド" と呼ばれるものがあります。破壊的メソッドは、メソッドによって何かしら値を変換して返すときに、元となるオブジェクトも同時に変換して上書くというものです。

s = "hello"
s1 = s.upcase! # "!" をつけると、元のオブジェクトも変換して上書き
p s
p s1

s も s1 も両方大文字になってます。

"HELLO"
"HELLO"

続きは次回。