Open5

Ruby 文法 学習日記

岡田岡田

コメント

# 1行コメント

=begin
複数行の
コメント
=end
岡田岡田

出力

print 'Hello World'

# 末尾改行
puts '末尾改行あり'

# 末尾改行+型情報
p 9999
p 'これは文字列'

# 書式指定
printf("名前 %s 好きな数字 %d \n", 'balaenoptera', 1)

# 書式指定して文字列として返す
p sprintf("名前 %s 好きな数字 %d", 'balaenoptera', 1)

# 見やすくして表示する(pretty printの略らしい)
pp ['pp', 1, 2, 3, 4, 5, 6]

出力

Hello World末尾改行あり
9999
"これは文字列"
名前 balaenoptera 好きな数字 1 
"名前 balaenoptera 好きな数字 1"
["pp", 1, 2, 3, 4, 5, 6]
岡田岡田

変数

value = 2    # ローカル変数(定義したスコープでのみ参照できる)
@value = 2   # インスタンス変数(定義したクラスのインスタンス間でのみ参照できる)
@@value = 2  # クラス変数(定義したクラスでのみ参照できる)
$value = 2   # グローバル変数(定義されていれば Ruby 全体から参照できる)
FOO = 2      # 定数 アルファベット大文字で書くのが流儀
class Hoge
    def initialize
        @value = 2   # インスタンス変数(オブジェクト毎に値が異なる)
        @@value = 2  # クラス変数(すべてのオブジェクトに対して共通)
    end
    
    def increment_instance_variable
        @value += 1
    end
    
    def increment_static_variable
        @@value += 1
    end
    
    def show
        printf "@value:%d, @@value:%d\n", @value, @@value
    end
end

foo1 = Hoge.new
foo2 = Hoge.new

foo1.increment_instance_variable
foo1.increment_static_variable

pp foo1.show
pp foo2.show

出力

@value:3, @@value:3
nil
@value:2, @@value:3
nil
岡田岡田

条件分岐

if文

if num == 0
  puts "num == 0"
elsif num < 0
  puts "num < 0"
else
  puts "num > 0"
end

else if は elsif らしい。 else if でいいだろ。


後置if

puts "num == 0" if num == 0
puts "num < 0" if num < 0
puts "num > 0" if num > 0

ネスト消えて読みずらい。多分使わない。


unless

unless num == 0
  puts "num == 0"
end

複雑な条件の時は使えそう?


case 文

case value
  when 1
    puts "one"
  when 2
    puts "two"
  when 3
    puts "three"
end

sqlに寄せた感じ? パッと見は読みにくい気がする。

岡田岡田

反復処理

while 文

num = 0
while num < 9 do
  print num
  if num == 5
      print "break!"
      break
  end
  num += 1
end

出力

012345break!

do は省略可能。breakはbreak。

num = 0
num += 1 while num < 10
puts num

出力

10

後置でも使えるらしい。while修飾子というらしい。

for文

for i,j,k in [[1,2,3], [4,5,6], [7,8,9]]
  p [i,j,k]
end

出力

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

実際配列に対してはeachメソッドを用いることがほとんどらしい。

# もちろんこうも書ける
# [[1,2,3], [4,5,6], [7,8,9]].each{|num|
#  p num
#}
[[1,2,3], [4,5,6], [7,8,9]].each do |num|
  p num
end