Ruby Tips!

RubyのTipsを紹介します

2014-03-27から1日間の記事一覧

オブジェクトに定義されているメソッドを調べる

オブジェクトからメソッド一覧を得る オブジェクトからメソッドの一覧を得るにはObject#methods等のメソッドが利用できる。以下にメソッド一覧を取得するメソッドと、取得できるメソッドの種類を示す。 メソッド名可視性 メソッド特異メソッド publicprotect…

配列やハッシュの要素を走査する

配列やハッシュの全要素を走査するにはArray#eachとHash#eachが利用できる。このメソッドは、要素を1つずつ取り出して、ブロックに渡す。配列の場合、ブロックパラメータは要素の1つだけだが、ハッシュの場合はキーと要素の2つがブロックパラメータとなる。…

文字列のエンコーディングを確認する

Ruby 1.9では文字列がエンコーディングを持つようになった。ある文字列のエンコーディングを確認するにはString#encodingメソッドを使用する。返却値はEncodingオブジェクトである。 p "123abc".encoding #=> #<Encoding:UTF-8> Encodingオブジェクトがどのようなエンコーデ</encoding:utf-8>…

パスを絶対パスに展開する

相対パスや短縮されたパスを絶対パスに展開するにはFile.expand_pathを使う。第1引数には変換したいパスを、第2引数にはパスを展開する基準となるディレクトリを指定する。第2引数を省略した場合は、カレントディレクトリを基準としてパスを展開する。以下は…

有理数(Rational)を使った計算をする

Rubyには有理数をあらわすRationalクラスが用意されている。このクラスを使うにはRuby 1.8ではrationalライブラリをrequireする。Ruby 1.9ではrationalライブラリのrequireは必要ない。有理数の生成はKernel.#Rationalを使う。Rationa.newでないことに注意。…

文字列を繰り返した文字列を作る

文字列を繰り返した文字列を作るにはString#*が利用できる。以下はfooという文字列を5回繰り返した新しい文字列を作る例である。 p "foo" * 5 #=> "foofoofoofoofoo"

2つの日時の差を求める

RubyのTimeやDateには-演算子が定義されており、2つの日時の差を簡単に求めることができる。Timeの差は秒単位で、Dateの差は日単位で得られる。ただしDate#-の返り値は有理数を現すRationalオブジェクトである。 require 'date' p Time.at(10010) - Time.at(…

日付から年度を求める

日本では3月末日までを前年度、4月初日からを翌年度とする年度が広く使われている。これは実際の年月日の3ヶ月後まで同じ年度が続くということなので、ある日付から3ヶ月を減算して年を求めれば、その日付の年度を求めることができる。Rubyで日付から月単位…

生年月日から年齢を求める

Rubyには生年月日から年齢を求めるメソッドは存在しない。このため生年月日から年齢を求めるには、Dateクラスを使って自分で計算をする必要がある。 require 'date' birthday = Date.new(1986, 12, 1) today = Date.today # 2014/3/27 age = today.year - bi…

ファイルに追記された内容を読み込む

ログファイルは末尾に新しい内容が追記されていくのが一般的である。そのようなファイルに対しては、File#readがEOFを返しても、繰り返し読み込み続けることで、ファイルに追記された内容を読み込むことができる。以下はコマンドライン引数で渡されたファイ…

2つの配列の論理積を取る

2つの配列の論理積を取るにはArray#&を使う。Array#&は配列に共通した要素をまとめて新しい配列として返す。もし重複した要素が存在する場合は2個目以降は無視される。 p [1, 2, 3] & [1, 3, 4] #=> [1, 3] p [1, 1, 2, 3] & [1, 3, 3, 4] #=> [1, 3]

文字列末尾の改行や空白文字を除去する

文字列末尾の改行を除去するには、String#chompメソッドを使う。String#chompは、引数に\nを与えると、\rも取り除く。また引数を省略した場合は組み込み変数$/が指定されたものとして動作する。$/のデフォルトは\nである。 p "foo\n".chomp #=> "foo" p "foo…