Rubyで複素数クラスを定義する
4月25日にRuby/Rails勉強会@関西があるので、Rubyの復習をしてる。今回はクラスを使う練習として、複素数クラスを作ってみることにした。
基本的なクラス定義はこんな感じ。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # 複素数クラス class Complex def initialize(re, im) @real = re @image = im end def to_s "%d + %di" % [@real, @image] end def abs Math.sqrt(@real ** 2 + @image ** 2) end end # 複素数クラスを使う z = Complex.new(3, 4) puts "z = " + z.to_s puts "|z| = %f" % z.abs
initialize(コンストラクタ)、クラスメソッドを定義した。実行してみる。
z = 3 + 4i |z| = 5.000000
とりあえずできてる。
もうちょっと凝ったこともやってみよう。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # 複素数クラス class Complex # この辺はいっしょ def initialize(re, im) @real = re @image = im end def to_s "%d + %di" % [@real, @image] end def abs Math.sqrt(@real ** 2 + @image ** 2) end # ここから追加 # クラス定数を定義する I = self.new(0, 1) # 属性メソッドを定義する attr_accessor :real, :image end z = Complex.new(3, 4) puts "z = %d + %di" % [z.real, z.image] puts "|z| = %f" % z.abs # 値を変更する z.real = 5 z.image = 12 puts "z = %d + %di" % [z.real, z.image] puts "|z| = %f" % z.abs # クラス定数を使用する puts "I = " + Complex::I.to_s puts "|I| = %f" % Complex::I.abs
結果はこんな感じ。
z = 3 + 4i |z| = 5.000000 # 値を変更する z = 5 + 12i |z| = 13.000000 # クラス定数を使用する I = 0 + 1i |I| = 1.000000
うむっ。