Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
趣味的にっき
[go: Go Back, main page]

Hatena::Diarytri はてなブックマーク はてなフォトライフ
    
はてな
 ようこそゲストさん  最新の日記 ユーザー登録 ログイン ヘルプ

趣味的にっき このページをアンテナに追加 RSSフィード

2005-08-04

[] にゃーと鳴いたら猫。わんと鳴いたら犬。 06:59 このエントリーを含むブックマーク

Matzにっき(2004-10-06)にまつもとさんのコーディングスタイルが書いてあります。

この中の

kind_of?やisa?を使わない。DuckTyping推奨。

について。

僕はこれまでオブジェクトタイプチェックにkind_of?を使いまくっていました(たぶん、Javaみたいなstaticなオブジェクト指向言語の影響でしょうね)。反省。これからはDuckTypingです。

なお、DuckTypingの説明は、青木さんのが一番分かりやすいです。青木日記/T(2003-11-20)より引用します。

Duck Typing (名詞)

「猫っぽく見えるなら猫ってことにしとけばいいじゃん」という、現代的・殺那的な考えかた。にゃーと鳴いたら猫。わんと鳴いたら犬。respond_to?(:each) なら Enumerable。

ついでに、Rubyの標準ライブラリでDuckTypingを使っているところを探してみました。

logger.rb
177 class Logger
...
492     def initialize(log = nil, opt = {})
493       @dev = @filename = @shift_age = @shift_size = nil
494       if log.respond_to?(:write) and log.respond_to?(:close)
495         @dev = log
496       else
...
502       end
503     end
...

Loggerクラスオブジェクトを生成するときには、引数logにwriteメソッドとcloseメソッドを持っている(IOぽい)オブジェクトを渡すことができます。「IOぽい」オブジェクトを渡せるというのが重要です。Dynamic Languageばんざい。

[][] 21:59 このエントリーを含むブックマーク

今から帰る。

トラックバック - http://d.hatena.ne.jp/ha-tan/20050804