合言葉「Rubyはオブジェクト指向言語」
class Item # 大文字からはじめること
def initialize(n,a,b,s)
@name = n
@address = a
@birth_date = b
@sex = s
@age = Time.now.year - b
end
attr_accessor :name, :address, :birth_date, :sex, :age
def show(sep=", ")
return "Name: "+@name+sep+"Sex: "+@sex+sep+"Age: "+@age.to_s
end
end
# インスタンス生成
mydata = Item.new("Yoshida Yasutaka", "Toyota", 1989, "male")
# インスタンス変数への参照
p mydata.age
# インスタンスメソッドの適用
print mydata.show("t")
# 比較
print mydata.show
# インスタンス変数の書き換え
mydata.age = 30
# インスタンス変数への参照
p mydata.birth_date
p mydata.age
class Complex
def initialize(x,y)
@re = x
@im = y
end # initialize
attr_accessor :re, :im
#
def show # 複素数オブジェクトの表示
if (@im > 0)
return sprintf("(%f + %fi)", @re, @im)
else
return sprintf("(%f - %fi)", @re, @im.abs)
end
end # def
#
def tasu(z) # 複素数同士の足し算
return Complex.new(@re + z.re, @im + z.im)
end
#
def hiku(z)
return Complex.new(@re - z.re, @im - z.im)
end
#
def kakeru(z) # 複素数同士の掛け算
return Complex.new(@re * z.re - @im * z.im, @re * z.im + @im * z.re)
end
#
def waru(z)
return Complex.new(@re / z.re - @im / z.im, @re / z.im + @im / z.re)
end
#
def abs # 絶対値
return (@re * @re + @im * @im)**0.5
end
end # class
a = Complex.new(1,-1)
b = Complex.new(3,2)
print a.show, " - ", b.show, " = "
print (a.hiku(b)).show,"n"
print a.show, " / ", b.show, " = "
print (a.waru(b)).show,"n"
結果:
(1.000000 - 1.000000i) - (3.000000 + 2.000000i) = (-2.000000 - 3.000000i)
(1.000000 - 1.000000i) / (3.000000 + 2.000000i) = (1.000000 - 1.000000i)