ジョギング
- 香椎浜 x 2 周
- ゆっくりと
日課
- お休み
SRE 本輪読会
- 月一の勉強会
- 今日は自分が 9 章「単純さ」について話した
- 資料のタイポもさることながら, 漢字があまりに読めないので漢字の勉強からやり直しだなって思った
明日から
- 東京出張
今日のるびぃ ~ 数値型クラスについて ~
数値型クラスについて気になったことをメモ. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
尚, Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書 を参考にした.
Numeric クラス
子クラスには以下のようなクラスが属している.
各クラス同士の演算
この組み合わせについて, よく忘れるので...
irb(main):001:0> # Fixnum 同士 irb(main):002:0* (1 + 1).class => Fixnum irb(main):003:0> # Fixnum と Float irb(main):004:0* (1 + 1.0).class => Float irb(main):005:0> # Fixnum と Rational irb(main):006:0* (1 + 1r).class => Rational irb(main):007:0> # Float と Rational irb(main):008:0* (1.0 + 1r).class => Float irb(main):009:0> # Fixnum と Complex irb(main):010:0* (1 + 1i).class => Complex irb(main):011:0> # Float と Complex irb(main):012:0* (1.0 + 1i).class => Complex irb(main):013:0> # Ration と Complex irb(main):014:0* (1r + 1i).class => Complex
数値演算
数値演算について見てみる.
irb(main):001:0> # 演算 irb(main):002:0* 1 + 2 => 3 irb(main):003:0> 1 - 2 => -1 irb(main):004:0> 2 * 3 => 6 irb(main):005:0> 4 / 2 => 2 irb(main):006:0> 4 % 3 => 1 irb(main):007:0> # 比較 irb(main):008:0* 1 == 1 => true irb(main):009:0> 1 != 2 => true irb(main):010:0> 1 < 2 => true irb(main):011:0> 2 >= 2 => true irb(main):001:0> # UFO 演算子 irb(main):002:0* 100 <=> 10 => 1 irb(main):003:0> 100 <=> 100 => 0 irb(main):004:0> 10 <=> 100 => -1 irb(main):005:0> # 自己代入演算子 irb(main):006:0* a = 100 => 100 irb(main):007:0> a += 1 => 101 irb(main):008:0> a -= 1 => 100 irb(main):009:0> a *=2 => 200 irb(main):010:0> a **=2 => 40000
- UFO 演算子 (比較演算子) は, 比較の結果を数値で返す
- 左辺の値が右辺の値より大きければ 1
- 等しければ 0
- 左辺の値が右辺の値より小さければ -1
- Ruby には
++
や--
のようなインクリメント, デクリメント演算子は存在せず, 自己代入演算子を利用する
数値型クラスに関する問題
Q1. [ x ] に記述すると, 実行結果にならないコードを全て選ぶ
# コード puts [ x ] # 実行結果 0.8
以下, 解答.
4 / 5
4 / 5r
以下, irb による確認.
irb(main):015:0> 4 / 5 => 0 irb(main):016:0> 4 / 5r => (4/5)
尚, 4 / 5r
については, to_f
を付けると 0.8
になる.
Q2. 以下のコードを実行するとどうなるか. 該当するものを全て選ぶ
a = 1.0 + 1 a = a + (1 / 2r) a = a + (1 + 2i)
以下, 解答.
以下, irb にて確認.
irb(main):001:0> a = 1.0 + 1 => 2.0 irb(main):002:0> a.class => Float irb(main):003:0> a = a + (1 / 2r) => 2.5 irb(main):004:0> a.class => Float irb(main):005:0> a = a + (1 + 2i) => (3.5+2i) irb(main):006:0> a.class => Complex
以下, 解説より抜粋.
- Float インスタンスと Rational インスタンスの演算結果は Float になる
- Float インスタンスと Complex インスタンスの演算結果は Complex になる (Fixnum インスタンスと Complex インスタンスも同様に Complex となる)
フムフム.