トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

文房具としてのRubyのススメ

パソコンを自分の手足のように使うための道具としてRubyを覚えてみましょう.普段何気なく繰り返していた不毛な処理が一気に解決できるかもしれません.
なんどもいいますが,Rubyプログラムを書いていて何か間違えても,普通はシステムを壊すことはありません.

高機能電卓として

計算するとき,まだ電卓を起動してませんか?

 irb

% irb
irb(main):001:0> 3+4

 変数を定義してみよう

電卓にだってメモリ機能がありますよね.変数を使うと計算の過程に自由に名前をつけられます.まずは,変数名はアルファベットの小文字か_か数字(先頭以外)にしておきましょう.

irb(main):001:0> a = 10
=> 10
irb(main):002:0> a
=> 10
irb(main):003:0> a + 20
=> 30
irb(main):004:0> 

 関数を作ってみよう

計算の過程だけじゃなくて,「どんな計算をするか」にだって名前がつけられます.

irb(main):001:0> def test
irb(main):002:1> return 10
irb(main):003:1> end
=> nil
irb(main):004:0> test
=> 10

irb(main):006:0> def add(a, b)
irb(main):007:1> a + b
irb(main):008:1> end
=> nil
irb(main):009:0> add
ArgumentError: wrong number of arguments (0 for 2)
        from (irb):9:in `add'
        from (irb):9
        from :0
irb(main):010:0> add(10, 20)
=> 30

スクリプトとして

irbで毎回関数や式を入力するのではなく,あらかじめファイルに保存しておいて実行することができます.

 ファイルの拡張子は".rb"にしておこう

% emacs hoge.rb

または,

% vi hoge.rb

でファイルを開いて,適当にスクリプトを書いたら保存.

% ruby hoge.rb

でファイルの内容をRubyが読んで実行してくれる.

 スクリプトで出力するときはputsを使おう (test01.rb)

文字列は"Hello World"のように"(ダブルクォーテーション)で囲む

puts "Hello World"

%"

 困ったらpで出力 (test02.rb)

rubyが,それっぽく表示してくれる

p "Hello World"
p 3

 条件分岐を書いてみよう (test03.rb)

if 100 > 10 then
 puts "It is true that 100 is bigger than 10."
else
 puts "Your computer is broken."
end

 繰り返しの処理を書いてみよう (test04.rb)

文字列の中に#{}という記号で変数を囲むと,変数の値を文字列として展開してくれます

100.times{|n|
  puts "Hello #{n}"
}

ファイルに出力するときはとりあえずリダイレクトが便利

ruby test04.rb > test04.dat

で,test04.datに結果が保存される.

cat test04.dat

として確認してみよう.

 FizzBuzz

1から100までの数で3の倍数のときには"Fizz",5の倍数のときには"Buzz",それ以外のときはその数字を出力するスクリプトを書いてみよう

キーボード入力を受けとってみよう

 一行入力してもらう (test05.rb)

l = gets
puts "Hello #{l}"

 飽きるまで入力してもらうとき (test06.rb)

whileでは,条件式が真の間,ずっとその中身が実行されます

while (l = gets) != nil
 puts "Hello #{l}"
end

この場合の条件式は,(l = gets) != nilだね.
飽きたらC-dを入力しよう.

 〜じゃない間はuntil (test07.rb)

until (l = gets) == nil
 puts "Hello #{l}"
end

 リダイレクトでファイルから入力を受けてみよう

% ruby test07.rb < test04.dat

文字列処理してみよう

 文字も==で比較しよう (test08.rb)

実は最後に改行があることに注意しよう!!

until (l = gets) == nil
 if l == "Hello 94\n" then
   puts "Find \"Hello 94!!\""
 end

end
文字列として"を出力したい場合には\"としようね.
%"

 文字を分割してみよう (test09.rb)

空白で分割する場合

until (l = gets) == nil
 puts l.split(" ")
end

 正規表現 (test10.rb)

正規表現で,好きな文字集合を取り出すことができる

until (l = gets) == nil
 if /(\d+)/ =~ l then
   puts $1
 end
end

 文字と数字の変換 (test11.rb)

文字は数字に変換できるよ

sum = 0
until (l = gets) == nil
 if /(\d+)/ =~ l then
   sum = sum + $1.to_i
 end
end
p sum

 FizzBuzz

ファイルから読み込んだ1から100までの数が3の倍数のときには"Fizz",5の倍数のときには"Buzz"と表示してみよう

Unixコマンドを呼び出してみよう

 systemコマンド (test12.rb)

system("ls")

 たとえば連番のファイルを作りたいとき

100.times{|n|
 system "touch file#{n}"
}

 しつこくFizzBuzz

1から100までの数で3の倍数のときには"Fizz",5の倍数のときには"Buzz",それ以外のときはその数字のファイルを作ってみよう

Rubyでオブジェクト指向してみよう

 オブジェクト指向入門以前

 クラス

便利なコンテナを使いこなそう

 Array

 Hash

Ruby関連リンク

オブジェクト指向スクリプト言語Ruby
逆引きruby