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/

Shinji KONO / Sun Jan 22 10:34:21 2012