気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Ruby Gold対策(添付ライブラリ)

Ruby公式教科書の模擬問題に出題された箇所について情報をまとめてみる。

数学関連

Rationalクラス

  • 有理数を扱うNumericクラスのサブクラス
  • Integerクラスを拡張する
  • Integer、Rationalとの演算結果はRational
  • Floatとの演算結果はFloat

Complexクラス

  • 複素数を扱うNumericクラスのサブクラス
  • Nemericクラス、Mathモジュールを拡張する
  • 演算結果は常にComplex
require 'rational'
require 'complex'

a = 1.0 + 1

# FloatとRationalの演算はFloatになる
a = a + Rational(1,2)
# => 2.5 

# FloatとComplexの演算はComplexになる
a = a + Complex(1,2)
# => (3.5+2i) (Complexオブジェクト)

StringIO

  • 文字列をIOクラスと同様のインターフェースで取り扱うためのクラス
  • StringIO内のバッファに文字列を格納し、getsやreadlineで文字列を取得可能
  • IOクラスとは直接の継承関係はなし

Threadクラス

start,fork,newというメソッドあり。すべてthreadを生成するメソッド
違いはstart,forkはinitializeを呼ばないが、newは呼ぶ

日時関連

DateTime

require "Date"

d1 = DateTime.new
d2 = DateTime.new
# dateTime同士の減算結果はRationalになる
p (d2 - d1).class
#=> Rational 

Dateクラスのオブジェクトの計算

require "Date"

d1 = Date.new
p d1.strftime("%m/%d")
#=> "01/01"

d1 = d1 + 1

#1を加算すると1日後の日付になる
p d1.strftime("%m/%d")
#=> "01/02"

#シフトさせると1月後の日付になる
p (d1 >> 1).strftime("%m/%d")
#=> "02/02"

Time

d1 = Time.new
d2 = Time.new
# Time同士の減算はFloatとなる 
p (d2 - d1).class
# => Float

Object#freeze

オブジェクトの凍結(内容変更を禁止)を行う。
変数への参照自体は凍結できない。

hash = {"a" => 1, "b" => 2}.freeze
# ハッシュオブジェクト自体の変更はできなくなる
hash["c"] = 3
#=> RuntimeError: can't modify frozen Hash

# 参照先は変更できる
hash = "a"
#=> "a"

RDocコメントのマークアップ

javajavadocにおけるruby

読み込み対象行

  • 「#」で始まる行
  • =begin〜=endで囲んだ行 (複数行用)

ドキュメントの生成

下記を実行するとdocディレクトリ以下にHTML形式で出力される。

rdoc

マークアップの書き方

  • = word でh1サイズで表示
  • == word でh2サイズで表示
  • *word*で太字
  • _word_でイタリック
  • +word+で等幅フォント
  • *または-で番号なしリスト
  • 数字 + ピリオド「.」で番号付きリスト