Ruby 基本まとめ
2013.12.12
この記事は最終更新日から1年以上が経過しています。
ざっとRubyに関する基礎的な部分をまとめてみました。
Ruby基本
ruby実行
1 | ruby ファイル名 |
irb
irb(Interactive Ruby)起動
1 | irb |
irb(Interactive Ruby)終了
1 | exit |
表示メソッド
1 | print |
1 | puts |
数値、文字列変換
to string(文字列へ)
1 | .to_s |
to integer (数値へ)
1 | .to_i |
to flort(浮動小数点へ)
1 | .to_f |
オブジェクト
オブジェクトのクラスを調べる
1 | .class |
オブジェクトのスーパークラスを調べる
1 | .superclass |
インスタンスを調べる
1 | .instance_of?(String) |
1 | .instance_of?(Fixnum) |
空かどうかを調べる
1 | .empty? |
オブジェクトIDを調べる
1 | .object_id |
オブジェクトをコピー
1 | .clone |
オブジェクトIDが同じか
1 | .equal? |
中身を比較
1 |
Rubyの変数
グローバル変数 | $foo |
インスタンス変数 | @foo |
クラス変数 | @@foo |
ローカル変数 | foo |
rubyの予約語
BEGIN | END | alias | and | begin |
break | case | class | def | defined? |
do | else | elseif | end | ensure |
false | for | if | in | module |
next | nil | not | or | redo |
rescue | retry | return | self | super |
then | true | undef | unless | until |
when | while | yield |
定数は全て大文字
1 | ADMIN |
制御構造
if文
1 2 3 | if 条件 then 条件が真の時に実行する処理 end |
1 2 3 4 5 | if 条件 then 条件が真の時に実行する処理 else 条件が偽の時に実行する処理 end |
unless文
1 2 3 4 5 | unless 条件 then 条件が偽の時に実行する処理 else 条件が真の時に実行する処理 end |
if 条件1 && 条件2 then
条件が真の時に実行する処理
end
case文
case 比較するオブジェクト
1 2 3 4 5 6 7 8 9 | when 値1 then 値1と一致した時に実行する処理 when 値2 then 値2と一致した時に実行する処理 when 値3 then 値3と一致した時に実行する処理 else どの値にも一致しないときに実行する処理 end |
繰り返し処理
1 2 3 4 | while文 while 条件 do 条件が”真”の時に繰り返す処理 end |
sleep
指定時間待機
until文
1 2 3 | until 条件 do 条件が”偽”の時に繰り返す処理 end |
for文
1 2 3 | for 変数 in オブジェクト do 繰り返し処理 end |
timesメソッド で指定可数繰り返し
1 2 3 | 整数.times do |変数| 繰り返す処理 end |
timesメソッド他の記述
1 2 3 | 整数.times { |変数| 繰り返す処理 } |
upto,down toメソッド
times | integer |
upto | integer |
downto | integer |
step | Numeric |
uptoメソッド
1 2 3 | 整数.upto(max) do |変数| 繰り返す処理 end |
downtoメソッド
1 2 3 | 整数.downto(min) do |変数| 繰り返す処理 end |
stepメソッド
1 2 3 | 整数.step(limit, step) do |変数| 繰り返す処理 end |
eachメソッド
1 2 3 | オブジェクト.each do |変数| 繰り返す処理 end |
ループ終了
break
example
1 2 3 4 5 6 7 8 9 10 | dollar = 102 i = 1 loop { rate = i * dollar if rate >= 5000 break end print i, “$ ==> “, <span style="font-family: Arial, 'Arial New', 'MS P ゴシック', sans-serif;">rate</span>, “Yen¥n"</p> i = i + 1 } |
rubyファイルからの rubyの呼び出し
win
1 | #!C:/ruby/bin/ruby |
mac
1 | #!/usr/bin/ruby |
コマンドラインで実行
1 | $ ./hoge.rb |
文字コード指定
1 | #!/usr/bin/ruby -Ks |
EUC | -Ke |
Shift-JIS | -Ks |
UTF-8 | -Ku |
制御文字
¥b | バックスペース |
¥e | エスケープ |
¥f | 改ページ |
¥n | 改行 |
¥r | 復帰 |
¥s | 半角スペース |
¥t | タブ |
¥¥ | ¥ |
文字列中で変数、式を使用
1 | #{ 変数 } |
example
1 2 | who = “たかやま" print “こんにちは、”, who, ”さん” |
1 2 | who = “たかやま" print “こんにちは、#{who}さん” |
計算式も可能
1 | print “計算:20 × 20 = #{20*20}です” |
ファイル操作
ファイル操作
1 | File.open(“ファイル名”, “モード") |
読み込みのみ
File.open(“index.txt”, “r”)
r | 読み込み |
r+ | 読み込みと書き込み |
w | 新規に作成して書き込み |
w+ | 新規に作成して読み込みと書き込み |
a | 追加で書き込み |
a+ | 追加で読み込みと書き込み |
1 | f = File.open(“index.txt") |
まとめて読み込み
1 | f.read |
標準出力
1 | print f.read |
読み込み後は閉じる
1 | f.close |
1行ずつ読み込み
1 2 3 4 5 | f = File.open(“index.txt”) f.each{|line| print line } f.close |
配列とハッシュ
配列
1 | foo = [] |
example
1 2 3 4 5 | #!/usr/bin/ruby arr = [“web帳”, “takayama”,”boy"] print “このサイトは”, arr[0], “です¥n” print “作者は”, arr[1], “で¥n” print arr[1], “は”, arr[2], “である¥n” |
1 2 3 | fruit = [“みかん”,”りんご”,”なし”,”ぶどう”,”もも"] puts fruit [0..3] puts fruit [1, 3] |
数を調べる
1 | puts fruit.size |
1 | puts fruit.length |
コマンドライン引数取得
1 | ARGV |
example
1 | sample.rb one two |
1 2 3 4 5 6 | #!/usr/bin/ruby # 1〜3番目の引数を表示 puts ARGV[0] puts ARGV[1] puts ARGV[2] |
全ての引数を表示
1 | puts ARGV |
繰り返し処理での表示
1 2 3 4 | ARGV .each{|arg| puts arg puts “**************" } |
ファイルコピー
example
1 2 3 4 5 6 7 8 | f1 = File.open(ARGV[0]) f2 = File.open(ARGV[1], “w") data = f1.read f2.print data f1.close f2.close |
ハッシュ
連想配列
キー(key)と値(value)
キー => 値
animal = {
“cat” => “たま”,
“dog” => “ぽち”,
“bird” => “とりんどる”
}
key取得
1 | .keys |
value取得
1 | .values |
フェッチで取り出す事も可能
1 | .fetch |
eachでの繰り返しでの取得
1 2 3 | .each_key{|key| puts “#{key}" } |
配列のハッシュ
1 2 3 4 | animal = { “dog” => [“ぽち”,”じろう”,”ごま”], “cat” => [“たま”,”ごろう”,”ひな”] } |
ハッシュの配列
1 2 3 4 | student = [ { “no” => 1, “name” => “たかやま”, “blood” => “O”}, { “no” => 1, “name” => “たなか”, “blood” => “A”} ] |
ハッシュのハッシュ
1 2 3 4 5 | band = { “1” => {“name” => “たかやま”, “part” => “guitar”}, “2” => {“name” => “たなか”, “part” => “vocal”}, “3” => {“name” => “なかた”, “part” => “bass”} } |
正規表現
マッチするかは~(チルダ)を用いて判別
1 | 正規表現オブジェクト =~ 文字列オブジェクト |
1 2 | /^How/ =~ “How are you? " => 0 |
1 2 | /sad/ =~ “I am sad. " => 5 |
主なメタ文字
. | 任意の1文字にマッチ |
* | 0回以上の繰り返しにマッチ |
+ | 1回以上の繰り返しにマッチ |
? | 0回または1回の繰り返しにマッチ |
{} | 指定した範囲の繰り返しにマッチ |
() | グループ |
[] | 文字クラス |
^ | 行頭にマッチ |
$ | 行末にマッチ |
| | いずれかにマッチ |
{m} | m回にマッチ |
{m,} | m回以上にマッチ |
{m,n} | m回以上,n回以下にマッチ |
選択
1 | /apple|orange/ |
グループ化
1 2 | /(sing){2}/ =~ "singapplesongsingsingsong" => 13 |
後方参照
正規表現グループによる後方参照
1 2 | /5(.)7(.)/ =~ "123456788" => 4 |
1 2 | $1 => "6" |
1 2 | $2 => "8" |
文字クラスの主な略記法
¥w | アルファベットと数字 |
¥W | アルファベットと数字以外 |
¥s | 空白文字 |
¥S | 空白文字以外 |
¥d | 数字 |
¥D | 数字以外 |
¥b | 単語の境界 |
¥B | 単語の境界以外 |
¥A | 文字列の最初 |
¥Z | 文字列の最後 |
日本語の正規表現
s | Shift-JIS |
e | EUC-JP |
u | UTF-8 |
n | 文字コードなし |
文字を置換
1 | 文字列.sub(/パターン/,”置換文字列") |
すべて置換
.gsub
1 | puts str.gsub(/ウェブ/s,”Web") |
メソッド
メソッド定義
1 2 3 4 | def メソッド名 処理 ... end |
引数
1 2 3 | def hello who 処理.. end |
または
1 2 3 | def hello(who) 処理.. end |
クラス定義
1 2 3 | class クラス名 クラスの定義... endf |
モジュール
モジュールはインスタンスを作れない includeしての利用となる。( Mix-in)
1 2 3 | module モジュール名 モジュール定義 end |
ライブラリの読み込み
1 | require “hogege" |
以上になりますー。