5分で終る Ruby 入門
Menu Menu
Install 方法
今から勉強するなら ruby 1.9 を使う。/usr/bin/ruby にあるはず。
Windows だと入ってないかも。
http://www.ruby-lang.org/en/
ターミナルから使うのだが… Command Prompt よりは、他のものが良いかも。zsh とか。
Rubyの使い方
デバッガ
% ruby -rdebug -e 0
Debug.rb
Emacs support available.
-e:1:0
(rdb:1) 100+100
200
簡単な計算
(rdb:1) p 1+1
2
(rdb:1) printf("%x",100000)
186a0nil
変数への代入
(rdb:1) x = 3
3
(rdb:1) p x
3
(rdb:1) x = "shinji"
"shinji"
(rdb:1) x
"shinji"
値が一つの変数をスカラと呼びます。文字でも数字でも良い。
変数を使った計算
(rdb:1) p "#{x} is a man."
"shinji is a man."
(rdb:1) y = 100
100
文字列に変数を埋め込む。
(rdb:1) p "#{y} yen"
"100 yen"
明示的に文字列結合したければ . を使う。
(rdb:1) p x+" "+y.to_s
"shinji 100"
文字列から数字への変換。
(rdb:1) z = "1234"
"1234"
(rdb:1) p z/3
/usr/local/lib/ruby/1.9/debug.rb:130:in `eval':undefined method `/' for "1234":String
from -e:1:in `<main>'
(rdb:1) p z.to_i/3
411
配列
(rdb:1) a = [0,1,2]
[0, 1, 2]
(rdb:1) p a[0]
0
(rdb:1) p a[1]
1
連想配列
文字列で検索できる配列
(rdb:1) c = {}
{}
(rdb:1) p c["test"]
nil
(rdb:1) c["test"] = "test1"
"test1"
(rdb:1) p c["test"]
"test1"
(rdb:1)
何が入っているかを調べる
(rdb:1) c["test1"] = "test2"
"test2"
(rdb:1) c["test2"] = "test3"
"test3"
(rdb:1) p c.keys
["test", "test1", "test2"]
(rdb:1) c.each{|key,value| print(key,value) }
testtest1test1test2test2test3{"test"=>"test1", "test1"=>"test2", "test2"=>"test3"}
(rdb:1) c.each{|key,value| println(key,value) }
定数
大文字で始める変数は定数になる。
(rdb:1) A = 3
3
(rdb:1) A = 5
-e:1: warning: already initialized constant A
5
(rdb:1) a = 3
3
(rdb:1) a = 5
5
関数
(rdb:1) def f1(a,b,c) print a,b,c,"\n" end
nil
(rdb:1) f1(1,2,3)
123
nil
(rdb:1) f1("a",2,"b")
a2b
nil
変数のスコープ
(rdb:1) x
"shinji"
(rdb:1) def f2(a,b,c) print x,a,b,c,"\n" end
nil
(rdb:1) f2("a",2,"b")
/usr/local/lib/ruby/1.9/debug.rb:130:in `eval':undefined local variable or method `x' for main:Object
from -e:1:in `<main>'
x は関数の中からはアクセスできない
(rdb:1) $x = "kono"
"kono"
(rdb:1) def f3(a,b,c) print $x,a,b,c,"\n" end
nil
(rdb:1) f3("a",2,"b")
konoa2b
nil
$x とすると大域変数になるのでアクセスできる。大域変数は、なるべく使わないのが礼儀。
(rdb:1) def f4(a,b,c) x="hi "; print x,a,b,c,"\n" end
nil
(rdb:1) f4("a",2,"b")
hi a2b
nil
(rdb:1) x
"shinji"
f4 の中のxと、f4の外のxは違う変数。
正規表現
/kono/
/[a-zA-Z]*/
/[a-z]*/
/^[^a-z]/
x.match(/aaa/);
/^[^a-z]/ =~ x
置換は、
(rdb:1) x = "aaa aaa aaa"
"aaa aaa aaa"
(rdb:1) x.sub(/aaa/, 'bbb');
"bbb aaa aaa"
(rdb:1) x.gsub(/aaa/, 'bbb'); # 全部置き換える
"bbb bbb bbb"
(rdb:1)
if 文
if (x.match(/pattern/)) then
print "match";
end
next if (/pattern/); # 次のループへ
break if (/pattern/); # ループを抜ける
i+=1 if (x.match(/pattern/));
便利な関数
山程ある。必ず、Perl debugger で試してみること。
split
入力を配列に分解する。
(rdb:1) x = "test1 test2 test3"
"test1 test2 test3"
(rdb:1) col = x.split(" ")
["test1", "test2", "test3"]
(rdb:1) p col[2]
"test3"
パターンを使った分解
(rdb:1) col = "test1\ttest2\ttset3".split(/\t/)
DB<7> @cols = split(/\t/,"test1\ttest2\ttset3")
DB<8> p $cols[2]
tset3
ファイルの入出力
Iterator を使う。
(rdb:1) File.open('aho', 'r') {|f| print(f.read) }
|f| がFileからの入力を受け取る新しい変数。
(rdb:1) out = File.open('outout','w')
#<File:outout>
(rdb:1) out.write("test\n")
5
Class の使い方
require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| p v }
argv = opt.parse(ARGV)
require で呼び出して、new でオブジェクトを作る。
class Node
def value
return @value
end
def setValue(value)
@value = value
end
def initialize
@value = -1
end
end
node = Node.new
puts node.value()
@を付けるとオブジェクトのインスタンス変数になる。
% ruby -rdebug Node.rb
Debug.rb
Emacs support available.
Node.rb:1:class Node
(rdb:1) n
Node.rb:13:node = Node.new
(rdb:1) node1 = Node.new
#<Node:0x007f8a08921ff0 @value=-1>
(rdb:1) node2 = Node.new
#<Node:0x007f8a08913d60 @value=-1>
(rdb:1) node1.setValue("a")
"a"
(rdb:1) node2.setValue("b")
"b"
(rdb:1) node1.value
"a"
(rdb:1) node2.value
"b"
gem の使い方
gem -h
gem install rails
Windows で Proxy が必要な時には、
set HTTP_PROXY=http://proxyname:port
Document
http://www.ruby-doc.org/core-1.9.3/
コマンドラインから、
ri Fileを試してみよう。だめだったら、
sudo gem install yard-doc-core yri Fileその他、
http://rurema.clear-code.com/
http://www.ruby-lang.org/ja/documentation/