2/24(水)にNTT-ATさんの会議室にてkawasaki.rb #033を開催しました。
togetterのまとめはこちら
パーフェクトRuby読書会
「5-1-8 Complex」まで終えました。
5-1-5 Integer
Rubyでは小さな整数はFixnum, 大きい整数はBignumのインスタンスとして扱われます
1
2
100.class # => Fixnum
10000000000000000000.class # => Bignum
2の何乗からBignumになるのか?を検証したところ62乗からBignumとなりました。
1
2
3
4
5
6
7
8
9
10
11
12
60.upto(70) {|i| puts "#{i}: #{(2 ** i).class}" }
# 60: Fixnum
# 61: Fixnum
# 62: Bignum
# 63: Bignum
# 64: Bignum
# 65: Bignum
# 66: Bignum
# 67: Bignum
# 68: Bignum
# 69: Bignum
# 70: Bignum
Integerには様々な述語メソッドが用意されています.
1
2
3
4
5
1.odd? # => true
2.even? # => true
2.next # => 3
2.succ # => 3
2.pred # => 1
0除算を行うと例外ZeroDivisionErrorが発生します
1
1 / 0 # => ZeroDivisionError: divided by 0
Integer#to_sで文字列に変換でき、基数を指定することもできます。
1
2
3
4
30.to_s # => "30"
30.to_s(2) # => "11110"
30.to_s(8) # => "36"
30.to_s(16) # => "1e"
Integer#chrを用いると、数値に対応する文字を得ることができます。
1
2
(65..70).map {|n| n.chr} # => => ["A", "B", "C", "D", "E", "F"]
12354.chr("UTF-8") # => "あ"
また、数値と文字列の相互変換にはArray#packやString#unpackもあります。
1
2
3
4
"あいうえお".unpack("U*")
# => [12354, 12356, 12358, 12360, 12362]
[12354, 12356, 12358, 12360, 12362].pack("U*")
# => "あいうえお"
いくつかのクラスに定義されているto_iメソッドを用いれば整数として表現した結果を得られます。
1
2
'123'.to_i # => 123
Time.now.to_i # => 1456650331
また、Kernel.#Integerを用いることもできます。Kernel.#Integerは、to_iと違い例外を発生させます。
1
2
3
"a".to_i # => 0
Integer("a") # => ArgumentError: invalid value for Integer(): "a"
Integer(["a"]) # => TypeError: can't convert Array into Integer
余談として、Arrayを使って初期化すれば、Integer、Array、nilを判別せずにArrayを得られるというテクニックが紹介されました。
1
2
3
Array(1) # => [1]
Array([1,2,3]) # => [1, 2, 3]
Array(nil) # => []
5-1-6 Float
Rubyでは浮動小数点をFloat型で表現します。 Rubyでも、Floatを繰り返し加算していくと誤差が生じます。
1
sum = 0.0; 10.times{|i| sum += 0.1 }; p sum # => 0.9999999999999999
Integerでは0除算を行うと例外ZeroDivisionErrorが発生しましたが、浮動小数点の場合はNaNもしくはInfinityが返ります。
1
2
3
1.0 / 0 # => Infinity
-1.0 / 0 # => -Infinity
0.0 / 0 # => NaN
5-1-7 Rational
有理数はRationalで表します
1
r = Rational(1, 3) # => (1/3)
Ruby2.1.0以降はRational型のリテラルが用意されています。
1
1/3r # => (1/3)
5-1-8 Complex
複素数はComplexで表します
1
2
3
c = Complex(2, 3)
c.real # => 2
c.imaginary # => 3
今回のiruby notebookは以下のとおりです。
セッション
清貧Docker from @harupongさん
Dockerを個人でコストを抑えて運用する方法について発表されました。安価なVPS、計量なDockerイメージを作る方法など、とても参考になる情報が含まれています。
次回予告
次回は2016/3/30(水)開催予定です。ご参加お待ちしております。
寄稿者について
松久保 敬人 (@Peranikov)
RailsからiOSアプリ開発を経て今はDDDとScalaの人。 映画オデッセイと火星の人は最高。