Ruby/基本構文めも

Last-modified: 2013-12-01 (日) 18:49:01
  • Cと違うとことか
    # はろわ
    print "Hello,World\n"
    puts "Hello,World" # 改行付
    p "Hello,World" # オブジェクト型が分かるように表示(""も表示される)
    
    =begin
    コメント
    	こめんと
    		comment
    =end
    
    # 変数 すべてオブジェクト
    val = 5 # 小文字または_で始める
    str = "Hello"
    str2 = "World"
    
    # 定数
    NUM = 2 # 大文字で始める
    
    # 演算
    print("2^5 = ", 2**5, "\n") # 32
    val**=NUM
    print("val**=NUM ,", val, "\n") # 25
    
    # if文
    if val > 100 then # then省略可
    	puts "val > 100"
    elsif val <= 50 then
    	puts "val <=50"
    else
    	puts "50 <= val < 100"
    end
    
    # unless文
    unless val > 100 then
    	puts "val <= 100"
    else
    	puts "val > 100"
    end
    
    # case文
    hoge = "b"
    case hoge
    when "a" then
    	puts "hoge is a"
    when "b","c" then
    	puts "hoge is b or c"
    when "d","e","f" then
    	puts "hoge is d or e or f"
    else
    	puts "hoge is not a-f"
    end
    
    # 三項演算子
    val = val > 50 ? 100 : 15
    print(val,"\n") # 0
    
    # 式修飾子
    puts "val < 50" if val < 50
    puts "NUM is not 5" unless NUM == 5
    
    # while文
    while val > 10 do # do省略可
    	val-=1
    	print("val = ",val,"\n")
    end
    
    # until文
    until val < 5 do # do省略可
    	val-=1
    	print("val = ",val,"\n")
    end
    
    # for文
    for i in 1..5 do
    	print("i = ",i,"\n")
    end
  • オブジェクトとか
    # オブジェクトとメソッド
    x = "hello" # これもオブジェクト
    a = 10.8 # これもオブジェクト
    n = x.length # オブジェクトのメソッド
    p x # "hello"
    puts n # 5
    p "aaaaaa".length # 6
    
    y = Rational(2,n)
    puts y # 2/5
    puts y+Rational(n,2) # 29/10
    
    z = "123"
    p z # "123"
    p z.to_i # 123
    puts z.to_i * 5 # 615
    puts a.round # 11 (四捨五入)
    puts 11.3.ceil # 12 (切り上げ)
    puts 11.3.floor # 11 (切り捨て)
    p rand(100) # 1~100の乱数
    p Math.sqrt(2) # 1.41421356...
    
    puts "hello\nworld\n" # 特殊文字を展開 (\nで改行される)
    puts 'hello\nworld\n' # 特殊文字を展開しない (\nがそのまま表示される)
    
    puts "x is #{x}"  # x is hello
    puts "abcdef".reverse # fedcba
    puts "abcdef".index("d") # 3
    puts "abcdef".include?("e") # true
    puts "abcdef".include?("g") # false
    
    ## 破壊的メソッド
    x1 = x.upcase # 大文字にするメソッド
    p x # "hello"
    p x1 # "HELLO"
    
    x2 = x.upcase! # xの方も変わる(破壊的メソッド)
    p x # "HELLO"
    p x2 # "HELLO"
    
    ## 配列オブジェクト
    array = [1, 2.11, "hello", 1==1]
    p array
    puts array[1] # 2.11
    array[2] = "world"
    puts array[3] # true
    puts array[4] # nil (表示されない)
    puts array[-2] # world
    p array[1..3] # [2.11,"world",true]
    p array[1...3] # [2.11,"world"]
    array[1,2] = ["aaaa",3.14]
    p array # [1, "aaaa", 3.14, true]
    array[1,0] = ["add",100] # [1, "add", 100, "aaaa", 3.14, true]
    p array
    
    arr1 = [1,3,5,7,9]
    arr2 = [2,3,5,7,11]
    
    p arr1 & arr2 # [3, 5, 7]
    p arr1 | arr2 # [1, 3, 5, 7, 9, 2, 11]
    p arr1 + arr2 # [1, 3, 5, 7, 9, 2, 3, 5, 7, 11]
    p arr1 - arr2 # [1, 9]
    p (arr1 + arr2).uniq # 1, 3, 5, 7, 9, 2, 11]
    p (arr1 + arr2).uniq.sort # [1, 2, 3, 5, 7, 9, 11]
    
    arr3 = [4,1,5,8,2]
    p arr3.unshift 3 # [3, 4, 1, 5, 8, 2]
    p arr3.push 0 # [3, 4, 1, 5, 8, 2, 0]
    arr3.shift
    p arr3 # [4, 1, 5, 8, 2, 0]
    arr3.pop
    p arr3 # [4, 1, 5, 8, 2]
    
    # ハッシュオブジェクト(連想配列)
    map = {"a"=>100, "b"=>250, "c"=>500}
    p map["a"] # 100
    p map.size # 3
    p map.empty? # false
    p map.has_key?("c") # true
    p map.has_value?(200) # false
    
    # 日付時間とか
    t = Time.now
    p t # 2013-12-01 14:40:20 +0900
    p t.year # 2013
    p t.month # 12
    t2 = Time.mktime(2040,12,31,23,59,59)
    p t2 #2040-12-31 23:59:59 +0900
    p t2+1 # 2041-01-01 00:00:00 +0900
    p t.strftime("%Y/%m/%d") # 2013/12/01
  • いろいろ
    # 繰り返し
    4.times do |i|
    	#4回繰り返される
    	puts i # 0..3
    end
    
    list = ["a","b","c","d"]
    for e in list do
    	puts e # a b c d
    end
    
    list.each do |e|
    	puts e # a b c d
    end
    
    map = {"a"=>100, "b"=>250, "c"=>500}
    map.each do |key,value|
    	printf("%s is %d\n",key,value)
    end
    
    
    # メソッドを定義
    def poyo
    	puts "poyo"
    end
    
    poyo() # poyo
    
    def poyopoyo(word,num)
    	num.times{
    		puts word + "poyo"
    	}
    	return word + "poyo"
    end
    
    ret = poyopoyo("hoge",3) # hogepoyo ×3
    p ret # "hogepoyo"
    
    
    # クラス作ろう
    class Foo # 大文字スタート
    	def initialize(value)
    		@id = rand(100)
    		@value = value
    		puts "initialize"
    	end
    
    	def print
    		puts "id : " + @id.to_s
    		puts "value : " + @value
    	end
    end
    
    foo = Foo.new("poyo")
    foo.print