新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。もう新人じゃないかも…

学習記録:Ruby

[Ruby] 学習記録:主な組み込みクラスとモジュール

内容:5章 主な組み込みクラス/モジュール

Numeric
  • 全ての数値クラスはNumericクラスから派生する。以下のサブクラスを持つ
    • Integer:整数を表す。FixnumとBignumというサブクラスを持つ
      • Fixnum:小さな整数
      • Bignum:大きな値(環境依存)は自動的にBignumのインスタンスとして扱われる
    • Float:浮動小数点数
    • Rational:有理数
    • Complex:複素数
# ゼロかどうか
## true/false
0.zero? # => true
3.zero? # => false
## self/nil
0.nonzero? # => nil
3.nonzero? # => 3

# 数値の種類
3.integer? # => true
3.56.integer? # => false
3.real? # => trie
Complex(1, 2).real? # => false
  • 算術演算
  • 比較演算
    • ==, !=, >, >=, <, <=
      • 整数と浮動小数点の比較では暗黙的な型変換が行われる(123 == 123.0)
    • <=>:宇宙船演算子(スペースシップ演算子)、左辺が右辺より小さければ負、等しければ0、大きければ正の数を返す
      • 主にソートのために使用される
      • Enumerable#sortはブロックでソート方法をカスタマイズできる。戻り値は宇宙船演算子と同じ条件で返すことが期待される
# 文字の長さでソート
%w(Alice Bob Charlie).sort {|a, b|
  a.length <=> b.length
} # => ["Bob", "Alice", "Charlie"]
  • 丸め操作
メソッド 戻り値
ceil 自身と等しいか、自身より大きい整数のうち最小のものを返す
floor 自身と等しいか、自身より小さい整数のうち最大のものを返す
round 四捨五入する。0.4以下は切り捨て、0.5以上は切り上げ
truncate 自身と0との間で最も自身に近い数を返す
1.4.round # => 1
1.5.round # => 2

1.4.ceil   # => 2
1.5.floor # => 1
1.5.truncate # => 1
  • 繰り返し処理
    • 自身から第一引数の数まで繰り返し
3.step 5 do |num|
  puts num
end # "3" "4" "5" と表示
    • 第二引数には繰り返し毎に足し合わせる数値を指定可能
1.2.step 2.0, 0.2 do |num|
  puts num
end # "1.2" "1.4" ... "2,0"
  • Integerクラス
    • 大きさによってFixnumかBignumとして扱われる
    • 述語メソッド
# 奇数か偶数か
1.odd?
2.even?

# 次または前の数
2.next # => 3
2.succ # => 3
2.pred # => 1
|||<
-- 文字列への変換:to_s
-- 整数への変換:to_i
-- 繰り返し:upto, downto

- Float
-- 浮動小数点数を表す。精度は環境に依存
-- 四則演算・余り・べき乗

- Rational
-- 有理数を表現
-- Kernel.#Rationalで得られる。第一引数に分子、第二引数に分母を渡す
>|ruby|
r = Rational(1, 3) # => 1/3

# 分母・分子を得る
r.denominator # => 3
r.numerator    # => 1
    • to_f:浮動小数点数に変換
    • quo:除算(/)の代わりに使うことで戻り値をRationalオブジェクトとして得られる
    • to_r:レシーバをRationalに変換
  • Complex
    • 複素数を表現
    • Kernel.#Complexで得られる。第一引数に実部、第二引数に分母を虚部を渡す
    • to_c:レシーバをComplexに変換
String
# 空文字か否か
'hoge'.empty? # => false
''.empty?        # => true

# 長さ
'hoge'.length # => 4
'ほげ'.bytesize # => 6

# 含まれているか、始まるか
'hoge Bob hoge'.include?('Bob') # => true
'Alphabet'.start_with?('Alpha')   # => true
    • +での連結、*での繰り返し、<<での追加
  • 部分文字列の取得
    • slice:第一引数で開始位置、第二引数(省略可)で取得文字数
    • []でも可('hoge'[3] # => e)
  • 整形
    • strip:両端から空白文字を取り除く。(右端用と左端用のrstripとlstripも)
    • chomp:末尾の改行コードを1つだけ取り除く
    • chop:末尾の1文字を取り除く
    • squeeze:連続している同じ文字を全て一つにまとめる
    • downcase, upcase, swapcase, capitalize:小文字・大文字変換、大文字小文字入れ替え、先頭のみ大文字
    • sub, gsub:最初にマッチした文字列を置換・マッチした文字列を全て置換
    • split:セパレータとして分割した配列を返す
  • 繰り返し処理
    • each_char, each_byte, each_line:文字毎・バイト毎・行毎の繰り返し
  • エンコーディング
'ほげ'.encoding # => #<Encoding:UTF-8>
Regexp
  • 正規表現。文字列とのパターンマッチを行う
  • パターンマッチ
    • ===:マッチするか否か
    • =~:マッチした位置
# 0から9の数字を含んでいるか
/[0-9]/ === 'ruby'   # => false
/[0-9]/ === 'ruby5' # => true

/[0-9]/ =~ 'ruby'   # => nil
/[0-9]/ =~ 'ruby5' # => 4
記号 意味
^, $ 行頭(行末)、改行文字の直後(直前)にマッチ
\A, \Z, \z 文字列の先頭(末尾)にマッチ。\Zは末尾が改行ならその改行の直前にマッチ
\w, \W 英数字(以外)にマッチ
\s, \S 空白文字(以外)にマッチ
\d, \D 数字(以外)にマッチ
. 改行をのぞく任意の1文字にマッチ
+, * 直前の正規表現の1回(0回)以外の反復
Comparable
  • 比較演算のためのメソッドを提供する。NumericをはじめStringやSymbolはComparableモジュールをincludeする
Enumerable
  • ArrayやHash, Rangeなどオブジェクトの集まりを表現するクラスはEnumerableをincludeしている
    • 繰り返し処理
      • each_with_index
      • reverse_each
      • each_slice:n個ずつで区切って繰り返す
      • each_cons:n個の連続した要素を1つずつずらしながら繰り返す
      • succメソッドを用いて繰り返し処理を行うので、succメソッドをもたないオブジェクトに対しては繰り返し処理はできない
      • cycle:レシーバの要素を先頭から末尾まで繰り返し、それを永遠に繰り返す
    • 新しい配列の生成
      • map:元の配列の各要素を変換して、新しい配列をつくる(collectも同じ(
# 文字列を全て大文字にする
['ruby', 'rails'].map {|str| str.upcase } # => ["RUBY", "RAILS"]
    • 特定の条件を満たしているか
# 全ての要素が真ならtrue
[true, true, true].all? # => true
# 全ての要素が偽ならtrue
[false, false,  false].none? # => true
# 1つでも真ならtrue
[true, false, false].any? # => true
# 1つだけ真ならtrue
[true, true, false].one? # => false
    • 部分要素の取得
      • grep正規表現とマッチした要素を取得
      • detect(find):ブロックを各要素に対して実行し、戻り値が最初に真となった要素を返す
      • select(find_all):上記で戻り値が真となった全ての要素を返す
      • take(drop):先頭から任意の数の要素(をスキップした要素)を配列として返す
      • take_while(drop_while):ブロックが最初に偽を返すまで(返してから)の要素の配列を返す
    • 繰り返しとオブジェクトの更新
      • each_with_object:要素を繰り返しながら1つのオブジェクトを更新していく
# 引数には初期値となるオブジェクト(ここでは空のハッシュ)を渡す
# ブロック引数には一番目がレシーバの各要素(name)、二番目が初期値として渡されたオブジェクト(result)が代入される
%w(Alice Bob Charlie).each_with_object({}) {|name, result|
  result[name] = name.length
} # => {"Alice"=>5, "Bob"=>3, "Charlie"=>7}
    • 最大値と最小値
      • max, min, minmax(最小と最大の配列)
    • ソート
  • Array
    • 添字で参照
    • first/last:先頭(末尾)の要素か先頭(末尾)からn個の要素を取る
    • sample:ランダムに要素を返す
    • push, pop:末尾に追加、末尾の要素を取得
    • delete:引数の値と等しい要素を自身から全て削除
    • compact:nilを取り除く
    • flatten:多次元配列を平らにする
    • transpose:配列を行列と見立てて、行と列を入れ替え