てきとうなメモ

本の感想とか技術メモとか

Rubyの勉強 (2) - 文法

変数

Perlみたいに変数に接頭辞はつけない.というかつけると特殊な意味を持つ

n = 42
foo = "bar"

数値

数値は整数と浮動小数点数がある.

irb> 42
=> 42
irb> -42
=> -42
irb> 3.14   
=> 3.14
irb> 6.62e-34
=> 6.62e-34

読みやすいようにアンダースコアを付けることができる

irb> 100_000_000
=> 100000000

クラスはFixNumとBigNumで,自動的に変換されるらしい.classメソッドを用いると
クラスを調べることができる

irb> 42.class
=> FixNum
irb> (2**32).class
=> BigNum

文字列

''か""で囲む.""だとエスケープ文字が有効.

irb> 'abcde\n'
=> 'abcde\\n'
irb> "abcde\n"
=> "abcde\n"

""の中では#{}で変数展開を行うことができる

irb> lang = 'Ruby'
=> "Ruby"
irb> "Hello, #{lang}"
=> "Hello, Ruby"

というか,任意の式を展開できる

irb> "1 + 1 = #{1+1}"
=> "1 + 1 = 2"

``はコマンドを実行した結果が入る

irb> `echo hoge`
"hoge\n"

配列

配列は[]で囲む

irb> ary = [1, 2, 4, 8, 16]
=> [1, 2, 4, 8, 16]
irb> ary[3]
=> 8

ハッシュ

ハッシュは{}で囲む

irb> hash = {"foo" => "bar", "spam" => "egg"}
=> {"foo"=>"bar", "spam"=>"egg"}
irb> hash["foo"]
=> "bar"

制御構造

if文
if n % 2 == 0
then
  puts "even"
else
  puts "odd"
end
unless文

unlessにしたら逆になる

unless n % 2 == 0
then
  puts "odd"
else
  puts "even"
end
case文

Cのswitch文みたいなもの

month = 7
case month
when 12,1,2 then
  puts "winter"
when 3,4,5 then
  puts "spring"
when 6,7,8 then
  puts "summer"
when 9,10,11 then
  puts "autumn"
end

if,unless,caseのthenは省略できる

while文
sum = 0
i = 0
while i <= 10 do
  sum += i
  i += 1
end
# sum = 55
until文
sum = 0
i = 0
until i > 10 do
  sum += i
  i += 1
end
# sum = 55

whileやuntilのdoは省略できる

for文
sum = 0
for i in 1..10
  sum += i
end
# sum = 55
後置修飾

if,unless,while,untilは式を修飾することができる

puts "even" if n % 2 == 0
break,next,redo,retry
break ループの外へgoto
next 内側の次の繰り返しにgoto
redo 内側の現在の繰り返しにgoto
retry ループの最初にgoto

break

for i in 0..9
  puts i
  if i == 5
    break
  end
end

これを実行すると

0
1
2
3
4
5

next

for i in 0..9
  puts i
  if i == 5
    next
  end
end

これを実行すると

0
1
2
3
4
5
6
7
8
9

redo

for i in  0..9
  puts i
  if i == 5
    redo
  end
end

これを実行すると

0
1
2
3
4
5
5
.
.
.

retry

for i in  0..9
  puts i
  if i == 5
    retry
  end
end

これを実行すると

0
1
2
3
4
5
0
1
2
3
4
5
.
.