Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Rubyプログラミング練習 〜tcl/tk編〜

スポンサードリンク


とりあえず、見よう見まねで書いてみました。
言語仕様はなんとなく抑えました。だけど、Rubyらしい書き方や
どう書くべきかというのはわかっていません。
returnも書くべきか書かないべきかよくわからないのですが、
Ruby 1.9以降はreturn書いても遅くならないとか
書いてたので書くスタイルにしています。
他力本願ですが、異論反論等あればとてもありがたいです。
習い始めの言語なんでとてもひどい書き方していると思われます。
周りにRubyistが残念なことにいないです……。
あと、関数に引数がない場合、()をつけるべきかつけないべきかも悩ましいです。
.NET以前のVBだと()有り無しで書き方が変わるというのをなんとなく思い出しました。

しょぼいプログラム(クラス使わない編)

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'tk'

$random = Random.new

def create_message
    arr = ["\それある!/","\それいける!/","\そーれーあるある!/"]
    n = $random.rand(0..2)
    return arr[n]
end

message = TkLabel.new.pack
message.text = create_message
TkButton.new(nil, :text => "クリック",
    :command => proc{message.text(create_message)}).pack

Tk.mainloop

しょぼいプログラム(クラス使う編)

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'tk'

class MyApp
    def get_message
        return @message
    end

    def create_message
        arr = [
            "\それある!/",
            "\それいける!/",
            "\そーれーあるある!/"
        ]
        n = @@random.rand(0..2)
        return arr[n]
    end

    def initialize
        @@random = Random.new
        @message = TkLabel.new {
            pack
        }
        @message.text = create_message
    end

    # これはどうもダメらしい……
    #@button = TkButton.new(nil,
    #    :text  => "クリック",
    #    :command => proc {
    #        get_message.text(create_message)
    #    }
    #).pack

end

app = MyApp.new
TkButton.new(nil,
    :text  => "クリック",
    :command => proc {
        app.get_message.text(app.create_message)
    }
).pack

Tk.mainloop

ぼくの未熟な知識でざっと調べたところ
procはクラスの中で使えないっぽいです……。
うーん微妙……
rubyではpublic, private指定するのが一般的なのかどうなのかすらもわからない……
書き方に幅がある言語だと学習コストは高い気がしています。
でも、書いてて楽しくなりそうな言語なのでがんばります(´;Д;`)!
Pythonは綺麗な言語だけど2系の呪いとガチガチに固まっているあたりがね…
それでもどちらもいい言語だと思いますが。
メモ:定数は大文字でできる。あとで直そう!