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#packString#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の人。 映画オデッセイと火星の人は最高。

Published: February 24 2016

blog comments powered by Disqus