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 railsWindows で 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/