irb(main):001:0> 3.times do puts "ya" end
ya
ya
ya
=> 3
irb(main):002:0> 3.times { puts "ya" }
ya
ya
ya
=> 3
irb(main):003:0> s=gets
hello
=> "hello\n" # 最後に改行文字を含む
irb(main):004:0> s=gets.chop
hello
=> "hello" # 改行文字を取り去ったもの
irb(main):005:0> 3.times {print s}
hellohellohello=> 3 # 出力の直後に矢印
irb(main):008:0> Array.new
=> []
irb(main):009:0> Array.new()
=> []
irb(main):010:0> Array.new(0)
=> [] # ここまではすべて空配列を作る
irb(main):011:0> Array.new(3)
=> [nil, nil, nil] # 寸法指定
irb(main):012:0> Array.new(3,0)
=> [0, 0, 0] # 寸法と初期値を指定
irb(main):013:0> Array.new
=> []
irb(main):014:0> [ ]
=> []
irb(main):015:0> a=[]
=> [] # 空配列から出発して、伸びて行く場面
irb(main):016:0> a[10]
=> nil # 該当する要素が存在しないときに返す値
irb(main):017:0> a[10]=55
=> 55 # 代入した値が式の値になる
irb(main):018:0> a
=> [nil, nil, nil, nil, nil, nil, nnil, nil, 55] # 添字 0~9 には nilが仮に入っている
irb(main):019:0> a[1000]=55
=> 55 # いきなり配列の長さが1001になる場面
irb(main):020:0> a
=> [nil, nil, nil, ...(千要素分の出力 中略)...
nil, nil, nil, nil, nil, nil, nil, nil, nil, 55] # 千番目の要素は値が入っている
irb(main):021:0> Array.new(8,"hello")
=> ["hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello"]
irb(main):022:0> ["hello"]*8
=> ["hello", "hello", "hello", "hello", "hello", "hello", "hello", "hello"]
irb(main):023:0> [1,2,3]*8
=> [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
irb(main):024:0> [1,2,3]*8*' ' # Array#join と同じ
=> "1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3"
irb(main):026:0> rand # 0以上1未満の実数
=> 0.725859297905215
irb(main):027:0> rand
=> 0.032460127359646096 # 呼ぶ毎に違う値を返す
irb(main):028:0> rand
=> 0.591220745868706
irb(main):029:0> rand(10) # 0~9 の整数
=> 8
irb(main):030:0> rand(10)
=> 0
irb(main):031:0> rand(10)
=> 1
irb(main):032:0> rand(6)+1 # サイコロと同じ
=> 5
irb(main):033:0> rand(6)+1
=> 1
irb(main):034:0> rand(6)+1
=> 6
irb(main):042:0> [rand(6)+1]*10
=> [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
irb(main):043:0> [rand(6)+1]*10
=> [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
irb(main):044:0> [rand(6)+1]*10
=> [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
irb(main):046:0> Array.new(10,rand(6)+1)
=> [4, 4, 4, 4, 4, 4, 4, 4, 4, 4] # 下の解説を参照
irb(main):047:0> Array.new(10){rand(6)+1)
=> [3, 5, 2, 5, 5, 4, 2, 1, 1, 1] # 乱数列
irb(main):048:0> Array.new(10){rand(6)+1)
=> [2, 2, 1, 1, 3, 4, 1, 3, 4, 4]
解説:
メソッド Array.new が呼び出される前に
引数(括弧の中)が先に呼び出され(① ②)
それぞれの値(結果)がメソッドに渡される
rand は一回だけ呼ばれることを確認されたし。
Array#* (Array#joinと同じ)の例
irb(main):049:0> ["hello"]*3*' '
=> "hello hello hello"
irb(main):050:0> puts ["hello"]*3*' '
hello hello hello
=> nil
irb(main):051:0> puts ["hello"]*3*'-'
hello-hello-hello
=> nil
irb(main):052:0> "abcdefg"
=> "abcdefg"
irb(main):053:0> a="abcdefg" # a は String
=> "abcdefg"
irb(main):054:0> b=a.split(//) # b は Array
=> ["a", "b", "c", "d", "e", "f", "g"]
irb(main):055:0> b[3] # 要素を取り出す
=> "d"
irb(main):056:0> a[3] # 部分文字列(長さ1)を取り出す
=> "d"
irb(main):057:0> b[3]='x' # 要素を代入
=> "x"
irb(main):058:0> # 結果
=> ["a", "b", "c", "x", "e", "f", "g"]
irb(main):059:0> a[3]='x' # 部分文字列を代入(書き換え)
=> "x"
irb(main):060:0> # 結果
=> "abcxefg"
irb(main):061:0> a=3
=> 3
irb(main):062:0> b=7
=> 7
irb(main):063:0> a=b ; b=a # うまくいかない例(下図左)
=> 7
irb(main):064:0> a
=> 7
irb(main):065:0> b
=> 7 # 両変数が同じ値になっている
irb(main):066:0> a=3 # 最初の値に戻して 仕切り直し
=> 3
irb(main):067:0> c=a ; a=b ; b=a # 正しい(とされる)方法(下図中)
=> 3 # これは最後の代入式の値
irb(main):068:0> a
=> 7
irb(main):069:0> b
=> 3 # 値が入れ替わっている
irb(main):070:0> a,b=b,a
=> [3, 7] # 分割代入による書き方(上図右)
irb(main):071:0> a
=> 3
irb(main):072:0> b
=> 7 # これでも値が入れ替わっている
*
)の使用例irb(main):073:0> 10 * 10
=> 100
irb(main):074:0> 'hello' * 8
=> "hellohellohellohellohellohellohhellohello"
irb(main):075:0> [1] * 8
=> [1, 1, 1, 1, 1, 1, 1, 1]
irb(main):076:0> [1] * 8 * '---'
=> "1---1---1---1---1---1---1---1'
irb(main):077:0> -1.abs
# Integer クラスにある self が書かれていないメソッドの使用例
=> 1 # この場合、レシーバに対する 絶対値
irb(main):078:0> 10.*(10) # 普通のメソッドと同様の呼び方
=> 100 # この書き方もあり(わかりにくいが)
irb(main):079:0> 10 * 10
=> 100 # これでも 同じ意味
irb(main):080:0> a="this is a pen" => "this is a pen"
irb(main):081:0> a.reverse
=> "nep a si siht" # 文字単位の逆転
irb(main):082:0> a.split
=> ["this", "is", "a", "pen"]
irb(main):083:0> a.split.reverse
=> ["pen", "a", "is", "this"]
irb(main):084:0> a.split.reverse*' '
=> "pen a is this"
irb(main):085:0> a.split.reverse.join
=> "pen a is this"
irb(main):086:0> a.class # 途中段階で生成されるオブジェクト(のクラス名)
=> String
irb(main):087:0> a.split.class
=> Array
irb(main):088:0> a.split.reverse.class
=> Array
irb(main):089:0> a.split.reverse.join.class
=> String
irb(main):091:0> 'h'*3+'e'*3+'l'*6+'o'*3
=> "hhheeellllllooo"
irb(main):092:0> s="hello"
=> "hello"
irb(main):093:0> s[4]*3+s[3]*3+s[2]*3+s[1]*3+s[0]*3 # 逆転させて3文字ずつ(の面倒なバージョン)
=> "ooolllllleeehhh"
irb(main):094:0> s="hiraoka"
=> "hiraoka" # 同じ式(プログラム)を、別の文字列に適用してみると
irb(main):094:0> s[4]*3+s[3]*3+s[2]*3+s[1]*3+s[0]*3
=> "oooaaarrriiihhh" # (予想通り)最初の6文字しか扱わない
irb(main):096:0> s='abc' # この例では
=> "abc"
irb(main):097:0> s[4]*3+s[3]*3+s[2]*3+s[1]*3+s[0]*3 # エラーを起こす
NoMethodError: undefined method `*'NilClass
from (irb):97
from C:/ProgramData/chocola3/bin/irb.cmd:19:in `<main>'
irb(main):098:0> a
=> "this is a pen"
irb(main):099:0> a.split(//)
=> ["t", "h", "i", "s", " ", "i", "s", " ", "a", " ", "p", "e", "n"]
irb(main):100:0> a.split(//)*3
=> ["t", "h", "i", "s", " ", "i", "s", " ", "a", " ", "p", "e", "n", "t", "h", "i", "s", " ", "i", "s", " ", "a", " ", "p", "e", "n", "t", "h", "i", "s", " ", "i", "s", " ", "a", " ", "p", "e", "n"]
irb(main):101:0> a.split(//).map{|e|e*3}
=> ["ttt", "hhh", "iii", "sss", " ", "iii", "sss", " ", "aaa", " ", "ppp",
"eee", "nnn"] # あと一歩のところまで来た
irb(main):102:0> ^D
>