要はこう言うと楽なのではと思いましたよ。
- クラスというのはFortranのモジュールみたいなものです。使い始めに任意のサブルーチンじゃなくてnewを呼ばなければいけな いので、変数の初期化を普通はinitialize内でやります。
- インスタンス変数(@name)というのはFortranのモジュール変数です。
- インスタンスとは何かというのは、今はわからなくてもいいです。1クラスを同時に複数個newできて、その時インスタンスが複数ある という言い方をします。クラスにはコードが所属しますが、インスタンスにはデータが所属します。
- クラス変数(@@name)というのは複数インスタンスがあるときに共有される変数です。私はほとんど使いません。
- グローバル変数($name)というのはFortranのコモンブロックです。覚悟をもって使用してください。
class App
def initialize argv
# 初期値設定
@files = []
for arg in argv
case arg
when /\A-d\z/ then $DEBUG = true
# その他オプション処理
else @files.push arg
end
end
end
def run
for file in @files
File.open(file, 'r') {|fp| fp.each{|line| ... }}
end
end
end
App.new(ARGV).run if $0 == __FILE__
で、Ruby初めてでトップレベルで Hello World から入った人がこれをいきなり見ると「うっ」となるわけですね。悩んだ挙句「インスタンス(変数)ってなんですか」みたいに聞かれて、素直にインスタンスから説明すると時間を無駄にするんですわ。この2014年にもなってOOPを全く知らないなんて、と読者諸兄は思われるかもしれないけど、気象界は世間と隔絶したところなんで、プログラミングセンスがあってもOOPを全く知らないなんてことが平気で起こるのです。何か方便が必要で しょうと。
なんでトップレベルで書かないかというとその心は、複数メソッドが現れるならば、最初からその間で共有されるデータのスコープ管理をしておかない といけないということであって、それってFortranのモジュールでできたことと同じなんですよね。だからモジュールでたとえてしまえばいいの ではないかと。
0 件のコメント:
コメントを投稿