Rubyメモ

: Rubyでプログラムを書く時に良く調べている内容などをまとめています
== Rubyとは ==
* 手軽なオブジェクト指向プログラミングを実現するための種々の機能を持つオブジェクト指向スクリプト言語
* テキスト処理関係の能力に優れている

== 特殊なことについて ==
=== shebang line ===
* プログラムの1行目に記述する
* "#!"以降に続くパスで、スクリプトを実行するプログラムを指定する
 <u>使用例:</u>
 #!/usr/bin/ruby

=== プログラム中で使用する文字の文字コードを指定する方法(マジックコメント) ===
* プログラムの1行目か、または1行目が shebang line の場合は2行目に記述する
* 記述するとプログラム中で扱う文字の文字コードを設定することができる
 <u>文字コードをUTF-8に設定したい場合</u>
 # -*- coding: utf-8 -*-

=== 破壊的メソッドについて ===
* 破壊的メソッドとは、Rubyのインスタンスメソッドの中で、オブジェクト自身の内容を変更するメソッドのこと
* メソッド名の最後に「!」を付与すれば、だいたいのメソッドは破壊的メソッドとして定義される

=== library optparse について ===
* コマンドラインのオプションを取り扱うためのライブラリ
* require 'optparse'で使用できる
==== オプションの定義と実行 ====
* OptionParser#onメソッドの引数でオプションを定義する
* 引数が指定された時の処理をブロックに記述
* ブロックの引数にはオプションが指定されたことを示す true が渡される
* OptionParser#onメソッドが呼ばれた時点では、ブロック内の処理は実行されない(引数が指定された時の処理内容の登録のみを行う)
* OptionParser#parseメソッドが呼ばれた時に、コマンドライン引数にオプションが指定されていれば実行される
 <u>使用例:</u>
 require 'optparse'
 opt = OptionParser.new
 
 opt.on('-a') {|v| p v }
 opt.on('-b') {|v| p v }
 
 opt.parse!(ARGV)
 p ARGV

== ファイル関連の処理について ==
=== 呼び出したい外部ファイルがあるディレクトリ先を指定する方法 ===
: require は $LOAD_PATH($:) から外部ファイルを読み込むので、以下のように定義すれば良い
 $:.unshift(File.dirname(__FILE__))
 require '呼び出したい外部ファイル'

=== 出力ファイルの設定 ===
: 出力ファイルをコマンドライン引数の第一引数で指定した場合
 output_file = open(ARGV[0], "w")  # 出力ファイルを上書きモードで設定("w": 上書きモード)
 output_file = open(ARGV[0], "a")  # 出力ファイルを追加書き込みモードで設定("a": 追加書き込みモード)

=== 入力ファイルの内容を一行ずつ読み込む処理 ===
: 入力ファイルをコマンドライン引数の第一引数で指定した場合
 open(ARGV[0]) do |file|
   file.each do |line|
     ##### line に入力ファイルの内容が一行ずつ入ってくる #####
   end
 end

== 文字列関連の処理について ==
=== 文字列を数値に変換したい場合 ===
 String.to_i  # String#to_iメソッドを使って文字列を整数に変換
 String.to_f  # String#to_fメソッドを使って文字列を不動小数点に変換

=== 文字列の文字コードに関する処理 ===
 String.encoding  # String#encodingメソッドを使って文字列の文字コードを取得
 String.force_encoding("文字コードの指定")  # String#force_encodingメソッドを使って指定した文字コードに変換
 <指定できる文字コード:EUC-JP、UTF-8、Shift_JISなど>

=== 文字列の置換処理を行う方法 ===
* String#subメソッド:最初にマッチしたパターンだけを置換
* String#gsubメソッド:マッチした全パターンを置換
* 破壊的メソッドとして、sub!メソッドとgsub!メソッドが用意されている
 String.sub("置換前の文字列を指定","置換後の文字列を指定")  # string#subメソッドで置換処理
 String.sub(/正規表現で置換するパターンを指定/,"置換後の文字列を指定")  # 正規表現を使って文字列の置換処理を行う場合

== 数値関連の処理について ==
=== 整数を文字列に変換したい場合 ===
 Integer.to_s  # Integer#to_sメソッドを使って整数を文字列に変換

=== NilClassかどうかの判定を行い、nilだった場合に値(文字列)を代入する処理 ===
 変数名 ||= 値(文字列)  # 変数名がnilの場合のみ、値(文字列)を代入する

== 制御構造について ==
=== 「if文の条件が真の時にある処理をさせる」という処理を一文で書きたい場合 ===
: if修飾子を使用する
 <u>使い方:</u>
 式 if 式
 1. 右辺の条件が成立する時に、左辺の式を評価してその結果を返す
 2. 条件が成立しなければ nil を返す

=== 指定した値までの間、指定ステップ毎の繰り返し処理を行いたい場合 ===
: Numericクラスのstepメソッドを使用する
 <u>使い方:</u>
 数値.step(limit, step) do |n|
   ##### 処理内容を記述 #####
 end

== 配列関係について ==
=== 配列に要素を追加したい場合 ===
* Array#unshiftメソッド:配列の先頭に要素を追加したい場合に使用
* Array#<<メソッドとArray#pushメソッド:配列の末尾に要素を追加したい場合に使用
 <u>使用例:</u>
 a = [1,2,3,4,5] #=> [1,2,3,4,5]
 a << 10 #=> [1,2,3,4,5,10]
 a.unshift(20) #=> [20,1,2,3,4,5,10]
 a.push(30) #=> [20,1,2,3,4,5,10,30]

=== 配列の先頭または末尾から要素を取りだしたい場合 ===
* Array#shiftメソッド:配列の先頭から要素を取り出したい場合に使用
* Array#popメソッド:配列の最後から要素を取り出したい場合に使用
* Array#shiftメソッド、Array#popメソッドで値を取りだすと、取りだされた要素は配列中から取り除かれる

 <u>使用例:</u>
 a = [1,2,3,4,5]
 a.push(10) #=> [1, 2, 3, 4, 5, 10]
 p a.pop #=> 10
 p a.pop #=> 5
 p a #=> [1, 2, 3, 4]

=== 配列の要素を順列で獲得したい場合 ===
: Array#permutationメソッドを使用する
 <u>使い方:</u>
 array.permutation(n) do |arr|
   ##### 処理内容を記述 #####
 end
# array配列から引数n個の要素を選んだときの順列(順序あり、重複を許さない組合せ)を作る
# 組み合わせを配列でブロック引数arrに格納
# 組合せの数だけブロック内の処理を実行

=== 配列の要素を組み合わせで獲得したい場合 ===
: Array#combinationメソッドを使用する
 <u>使い方:</u>
 array.combination(n) do |arr|
   ##### 処理内容を記述 #####
 end
# 配列arrayから引数n個の要素を選んだときの組合せ(順序なし、重複を許さない組合せ)を作る
# 組み合わせを配列でブロック引数arrに格納
# 組み合わせの数だけブロック内の処理を実行

== 参考サイト ==
* [http://www.ruby-lang.org/ja/ オブジェクト指向スクリプト言語 Ruby]
* [http://www.namaraii.com/rubytips/ 逆引きRuby]

[[Category:三ノ宮|るびーめも]]

Comments