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

--/--|スポンサー広告||TOP↑

会社のマシンにruby(ver.1.9.1 mswin32)を突っ込んで、アプリの設定ファイルからの情報収集とかに使っている。
便利さについて語った文書は多いので、ここでは他言語を使ってきた私が感じた、違和感について語る。

文法への違和感
メソッド呼び出しの括弧の省略とか文末セミコロンの省略自体は特に違和感はなかったのだが、それに伴う記号の文法上の微妙な意味の違いに違和感を持つ。
簡単に言うと、メソッド呼び出しの括弧との間に空白を入れられなかったりとか(入れるような書き方は元からしてないが)、行末が次のトークンを必須にする記号かどうかで次の行に継続するか否かを判定したり、2項演算子と単項演算子の区別に空白の有無を利用する、といったような部分。
改行がただの空白ではなく、トークンとしては「改行」として存在するということ、そして括弧の意味の違いをとる為に「空白」もトークンとして存在する。
つまり、フリーフォーマットのように見えてフリーフォーマットじゃない文法に違和感が・・・。

ブロック付きメソッド呼び出し
メソッド呼び出しにブロックをつけられる。これ自体は特にイテレータなどの制御構造のように見える物の定義に便利だし、やはり対して違和感は持たなかった。
しかし、ちょっと引っかかったのが、ブロック付きで呼び出されたメソッドがそのブロックをすぐに呼び出さず、インスタンス変数に保存しておいて、別メソッドの呼び出しで使うような場合だ。

つまり、やや作為的な例だが、


class A
  def meth(&b)
    @b = b
  end
  def call
    @b.call
  end
end

a = A.new
a.meth do
  puts "さようなら"
end
puts "こんにちは"
a.call

というようなコードを実行すると、
こんにちは
さようなら
と出力される。

これは実際に書いたコードに対して、メソッド呼び出しにつけたブロックだけ前方から戻ってきて実行されていることがわかる。こういう後方へ戻るようなコードの流れは一般的にはわかりづらいとされるようだ。

もっとも、ブロック付きメソッドの呼び出しが無名関数を引数に渡す省略形のような物と考えれば納得できるが、そうすると今度はブロック付きメソッド呼び出しが、本当に制御構造のような物の時と無名関数を渡している時とで同じ見た目になると言うのがどうにも不自然に思える。
また、Rubyとしてはどちらの場合でもブロック付きメソッド呼び出しにするのが普通なので余計ややこしいところだ。メソッド自体はどういう挙動なのかわかって使っているので、書くときはいいが、見るときにもメソッドの挙動を把握する必要がある。

感じた違和感は上の二つくらいか。いずれの場合も慣れてしまう程度の物で、実際にもう慣れたが。


スポンサーサイト
08/25|プログラムコメント(0)トラックバック(0)TOP↑
プロフィール

G.U.Nex

Author:G.U.Nex
職業:プログラマ
趣味:ゲーム(PC、コンシューマ)、ネットサーフィン、ニコニコ動画視聴、プログラミング、鉄道全般
PHP, C, C++, VB(系), Java, JavaScriptを使える。
最近はRubyにはまってる。

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム
ブログ内検索
RSSフィード
リンク
フリーエリア
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。