2011年4月28日木曜日

Ruby 文字列②

puts "##########6 文字列=バイト列#########"

str =  "あいう"

p str.length   #=> 6

p str[0], str[1], str[2]

p $KCODE # = "SJIS"   #グローバル変数に文字コード指定

regexp = /(.)/s   #オプションでSJISの正規表現 カンマは1文字として認識
str = "\202\240"
regexp =~str
    p $1
   
regexp = /(.)/n   #オプションでNONEの正規表現 カンマは1バイトとして認識
regexp =~str
    p $1


str = "あいうえお"
str.scan(/./s) do |c|    #文字コードSJIS指定で任意の一文字ずつスキャンする
    puts c                 #=>あ い  う え お
end


puts "##########6 メッソド#########"
$ffff
def describe(name)
    puts "This is a #{name}."  #=>This is a Google.
    name = name.dup                         #オブジェクトのコピーの参照値
   
    name[3] = ?p
    $ffff = name                            #オブジェクトの参照
    puts "This is a #{name}."  #=>This is a Goople.
end
CATTLE = "Google"

describe(CATTLE)                        #メソッドに引数渡し
p CATTLE                                        #=>Google
p $ffff

puts "##########6 スコープ ローカル変数#########"

def next_of(origin)        #メッソド定義
    value = origin + 1
    p value
end

def prev_of(origin)        #メッソド定義
    value = origin - 1
    p value
end

next_of(2)   #メソッドの呼び出し
next_of(2)
prev_of(2)

#p value      #value変数は呼び出せない NameError

#p undefined_variable #value変数は呼び出せない NameError


puts "##########6 スコープ クラス#########"
class Duration
    attribute_names = %w[ days hours minutes seconds]#文字列要素を配列
    p attribute_names
    attribute_names.each do |name|
        attr_accessor name
    end
end

#p attribute_names   #=>NameError

puts "##########インクリメント演算子#########"

0.upto(9){|i| puts i}

p ""
$i = 1
str ="Glubbubdrib"
str.each_byte do |byte|
    printf "%x\n" ,byte
    p $i+=1
end

puts "##########多重代入 #########"

a,b = 1,2,3,4,5
p a
p b
p ""
a,b,c = 1,2
p a
p b
p c

puts "#########6 多重代入 配列展開 #########"

a, *b = 1,2,3,4,5
p a,b
p b.length

p ""

array = [1,2,3]
a,b,c = *array
p a,b,c

puts "#######6 論理演算し #####"

if a == 1 and b == 3
        puts "ok"
    else
        puts "NG"
end


if a == 1 || b == 3
        puts "ok"
    else
        puts "NG"
end


p ""

def method_with_side_effect
    puts "副作用が発生しました"
    return 1
end

#メッソドはよばれない
p true || method_with_side_effect
#メソッドがよばれる
p false || method_with_side_effect

#メッソドはよばれない
p true && method_with_side_effect
#メソッドがよばれる
p false && method_with_side_effect


puts "########初期化イディオム############"

def generate_default_value
    p 'default value genarated'
    return 'default value'
end

def som_method(param = nil)   #paramの仮引数がnil・false・無なら
    param ||= generate_default_value  #param = param || generate_default_valueなら
    #.....paramを使って何するか?
end
p "nil"
som_method(nil)
p "false"
som_method(false)
p "true"
som_method(true)
p "0"
som_method(0)
p ""
som_method()

puts "########範囲演算子############"

for i in 0...10
    puts i
end

puts "########三項・条件演算子############"
a = nil
p a,b,c   #=>nil,2,3

var = a ? b : c  #aが真tureの時bに、偽falseならcになります
p var

var = if a then b else c end   #aが真tureの時bに、偽falseならcになります
p var

puts "########制御式############"

color = "ff"
thouht = if color == "green" then
p    "danger"
else
p    "undefined"
end

p thouht

p ""

puts "########奇数偶数############"

0.upto(21){|i|
    t = i % 2
    if t == 0 then
        puts "#{i} は奇数です。余りは #{t}"
    else
        puts "#{i} は偶数です。余りは #{t}"
    end
}

puts "########6~12歳小学生############"

0.upto(133333333333399999){|i|
   
    if i  < 6  then
        puts "#{i}才は幼児です"
    elsif i < 13
        puts "#{i}才は小学生です"
    elsif i < 16
        puts "#{i}才は中学生です"
    elsif i < 19
        puts "#{i}才は高校生です"
    elsif i > 19
        puts "#{i}才は大人です"
    end
}

0 件のコメント:

コメントを投稿