ここのサンプルをRubyで書くと(第1回)
ある切っ掛けにより、思想などの余計なことは語らず、図解があって具体的で、Rubyを使った例示があり、簡潔にオブジェクト指向について説明している文献はないものかと探して見たが、見つけることはできなかった。
しかし、「Rubyを使った例示があり」の条件を外すと、例示はC#とVB.NETだが、ここの記事が該当した。
そこで、「ここのサンプルをRubyで書くと」(第1回…で終わるかもしれない)を書いて見ることにした。
当然、元の記事を読み進めながら、以下を参考にしないと訳が分からないので、そのつもりで見て欲しい。
図2 ウィンドウ・オブジェクト
これを実現するRubyのコードは以下のようになる。
ウィンドウはテキストで表現した。
$KCODE = "SJIS" # 日本語はシフトJISを使用 class MyForm # 初期化メソッド、newで呼ばれる def initialize # "@" で始まる変数はこのクラス内のメソッド間で # 共有される(クラス外からは言語上アクセス不可) # これをインスタンス変数と言う # インスタンスはクラスがnewされてできたメモリ上 # の領域のこと @width = 26 @height = 8 @text = "" # bartextの代わり @visible = false end # ウィンドウっぽいのをテキストで表示 def show @visible = true # 表示し直しあり # "+" と "-"を(幅-2)文字 と "+" を表示 puts "+" + "-" * (@width - 2) + "+\n" # これ以下の文字列操作はStringクラスを参照 puts "|" + "%-*.*s" % [@width - 2 , @width - 2, @text] + "|\n" puts "+" + "=" * (@width - 2) + "+\n" (@height - 4).times { puts "|" + " " * (@width - 2) + "|\n" } puts "+" + "=" * (@width - 2) + "+\n" end # ウィンドウタイトルを設定 def setText(str) @text = str # 過去にshowされていたら表示し直し show if @visible end # 形だけのクローズメソッド def close @visible = false # 表示し直しは止め puts "closed\n" end end
ウィンドウの表示〜クローズまで
前述のサンプルでウィンドウの表示、タイトルバー文字列の設定、ウィンドウのクローズ(サンプルではそのふり)を行うには、以下のようにメソッドを呼び出す。
myForm1 = MyForm.new myForm1.show myForm1.setText("OOP超入門") myForm1.close
図6 隠ぺいされている内部データ
これを実現するRubyのコードは以下のようになる。
コメントが記載されている部分が前述のクラスとの差異である。
$KCODE = "SJIS" class MyForm2 # ruby独特のプロパティ取得定義《もどき》 # 実際はwidth、height、textメソッドを定義する # 例) # def width # @width # end # 以下の他にattr_writer、attr_accessorがある attr_reader :width, :height, :text def initialize @width = 26 @height = 8 @text = "" @visible = false end def show @visible = true puts "+" + "-" * (@width - 2) + "+\n" puts "|" + "%-*.*s" % [@width - 2 , @width - 2, @text] + "|\n" puts "+" + "=" * (@width - 2) + "+\n" (@height - 4).times { puts "|" + " " * (@width - 2) + "|\n" } puts "+" + "=" * (@width - 2) + "+\n" end # textプロパティ(ウィンドウタイトル)の設定 def text=(str) @text = str show if @visible end # widthプロパティ(ウィンドウ幅)の設定 def width=(w) @width = w < 10 ? 10 : w show if @visible end # heightプロパティ(ウィンドウ高さ)の設定 def height=(h) @height = h < 6 ? 6 : h show if @visible end def close @visible = false puts "closed\n" end end
今回のまとめの一連のコード
前述の新しいクラスを使用したウィンドウを開くまでの一連のコードは以下のようになる。
myForm2 = MyForm2.new myForm2.width = 400 / 8 myForm2.height = 300 / 16 myForm2.text = "OOP超入門" myForm2.show