-- / --
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

03 / 13
Thu

PHP もやってみたいと思い始めた Ziphil です。

Ruby で開発をするとき、 私は基本的に 1 つのファイルに 1 つのクラスを書くようにしています。 あるクラスだけで使用される補助的なクラスだけは、 例外として、 用いられるクラスが書かれているファイルと同じファイルに書きます。 これは Java からの遺産です。

このとき、 MainCanvas.rb のようにファイル名をクラス名そのままにしてたんですが、 全部小文字が主流のようですね。 そういえば、 ライブラリ名は全部小文字だった。 別に何かこだわりがあってキャメルケースのファイル名にしてるわけではないので、 ここは慣習に乗ろうと思っています。 でも修正面倒だなぁ・・・。

ここからはまた違う話ですが、 Ruby の for 文って each メソッドのシンタックスシュガーじゃないですか。 私はこの for 文を結構使うんですが、 なんだか each だけ特別扱いってのもどうかと思うんですよね。 ということで、 for 文使うのをやめようかと。

# for 文
for x in 1..100
  for y in 1..(x * 2)
    x.do_something
    y.do_something
  end
end
# each
(1..100).each do |x|
  (1..(x * 2)).each do |y|
    x.do_something
    y.do_something
  end
end

これも、 正直どっちでも良いんですよね。 私が for 文をよく使うのは、 HSP とか Java とかの遺産だと思います。 これらの言語には each なんてないので。

それと、 1..100 っていうのは良いんですが、 1..(x * 2) って少し気持ち悪いんですよね。 あ、 別にカッコは不要で 1..x * 2 でも問題ないんですけど、 これはこれで * 2 が離れちゃって微妙。 じゃ、 Range.new(1, x * 2) で! いや、 いっそのこと、 each なんてやめて Numeric#step を使うとか。 この辺は、 個人の印象によりますね。

次行きましょう。 私のコードにこんな部分があります。

def load_short_weapon_file
  regexp = /(\d+);\s*(.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+)/
  open("../data/data/database/item-1.txt") do |file|
    while line = file.gets
      if line =~ regexp
        # 省略
        data_string.split(/\s*,\s*/).each_with_index do |data, i|
          case keys[i][1]
            # 省略
          end
        end
      end
    end
  end
end   

最後に end が連なってますね。 Ruby の構文からして連なるのは仕方ないんですが、 一部の Rubyist には 「END HELL」 とまで言われて嫌われているそうです。 私は別に気にしませんけどね。

で、 ある人は言いました。 こうすれば良いではないか、 と。

def load_short_weapon_file
  regexp = /(\d+);\s*(.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+,\s*.+)/
  open("../data/data/database/item-1.txt") do |file|
    while line = file.gets
      if line =~ regexp
        # 省略
        data_string.split(/\s*,\s*/).each_with_index do |data, i|
          case keys[i][1]
            # 省略
          ennnnnnd    # ←これ

変態的です。 嫌いじゃないですけど。 しかも、 これ parse.y とか書き換えれば実装できるんですよ。 いや、 でもこれインデントどうなるんだよ。

そうそう、 Python はインデントでブロックを明示するので、 そもそも end を書かないんですよね。 そのアイデアは良いと思うんですが、 閉じがないのでアンバランスな気がしないでもないです。

また話が変わります。 私、 RPG 開発などは JRuby でやってますが、 ちょっとした小物を作るときは生の Ruby を使ってます。 バージョンは 1.9.1 とすでに一昔前のものを使ってますが、 これはもうすぐパソコンを買い換えるので、 最新版をインストールするのが面倒なだけです。 CGI なんかは 1.8.7 で作ってます。 サポートはとっくに終わってることは知ってるんですが、 借りているサーバーが 1.8.7 なので仕方ない。

で、 最近というわけではもうなくなってますが、 Ruby 2.0 って何ができるの? いや、 最近は Ruby 2.1 が出てるみたいで、 それでは何ができるの? ・・・ということです。

一番の変化は、 やっぱりキーワード引数でしょうね。 1.9 でも最後の引数がハッシュの場合は、 ハッシュの波カッコを省略できるようになっていて、 これによってキーワード引数っぽいことができました。 2.0 は、 キーワード引数が正式な構文になったようです。 私はあまり使わないと思います。

2.1 からの新機能ですが、 どれを取り上げれば良いのか分かりませんが、 数値リテラルが増えました。 r をつけると Rational 型に、 i をつけると Complex 型に。 まあ、 これは良いんですが、 私は f がほしいです。 2.0 なんて書くより 2f の方がきれいだと思います。

後は、 def の返り値ですかね。 メソッド名の Symbol インスタンスを返します。 これによって、 private def ~ という書き方が可能になりました。 便利だと思います。 でも、 Ruby を使うときは、 私はあまり private とか public とか気にしたことがありません。

とまあ、 Ruby の雑多な話題でした。

スポンサーサイト

comment ×0
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。