2007-05-01から1ヶ月間の記事一覧

FizzBuzz in Python

遅まきながらPythonで参加。世間ではショートコードで、OOで、色々な言語で、バカなコードで、短時間でなど色々な発想で解かれていると思うが、私の場合、以下の記事を基にPythonらしく、分かりやすい保守性の良い(改良しやすい)方法で解いてみる。探せば既…

継承の意味

OOの継承という機能の目的は、以下の2つあると思う。 Mix-in グループ化 それ以外にもあるかもしれないが今のところ思いつかない。2番目のグループ化の意味は、例えば静的言語であればポリモルフィズムがそうであるし、動的言語でも例えば例外処理をオブジ…

inspectモジュール

昨日メモした記事を見てinspectモジュールの存在を初めて知った。下記は抽象クラスを実現する例。inspectの使用方法は、後で勉強してみるつもり。 def abstract(): import inspect caller = inspect.getouterframes(inspect.currentframe())[1][3] raise Not…

データキャッシュの場所

5月10日の日記のSingletonを再考してみる。Singleton実装のポイントをまとめると以下の2点である。 Singletonオブジェクトをキャッシュするタイミング Singletonオブジェクトをキャッシュする場所 2番目のキャッシュする場所をまとめてみた。以下の3通り存…

色々な言語を学ぶ意味

最近、RubyとPythonを比較することで、言語の機能を比較することが非常に言語の勉強になると感じている。RubyとPythonの比較が終わったら、ぜひともPythonと関数型言語の比較をしてみたい。関数型言語は、Y Combinatorや末尾再帰やカリー化やメモ化や状態の…

Peter Norvig記事のメモ

The Python IAQ: Infrequently Answered Questions http://newworld.ddo.jp/doc/python-iaq-ja/index_html スペル修正プログラムはどう書くか http://www.aoky.net/articles/peter_norvig/spell-correct.htm Lisp プログラマのための Python 入門 http://www…

メタプログラミング

Rubyでプログラム内で関数を定義するには、Module#define_methodを使用する(Mudule#module_evalやModule#instance_evalを使用した方法もあるが省略)。 irb(main):001:0> class GeneratedFetcher irb(main):002:1> def fetch(how_many) irb(main):003:2> puts…

Codeシリーズ

Codeシリーズはまだ1冊も持っていないのだが、保守性や開発効率を重視する自分としては『Code Quality』をアマゾンで予約した。Code Completeは欲しいが価格が高い。以下はCodeシリーズのまとめ。 Write Greate Code (毎コミ) Write Greate Code (毎コミ) C…

Lunascape

先輩からLunascapeというタブブラウザを教えてもらった。検索して調べたら何やら良さそうで時間(というか興味)を見つけて試してみるつもり。

デコレータ

RubyのModuleクラスのattr_accessor、attr_reader、attr_writer、private、protected、publicメソッドはデコレータメソッドである。 class Foo1 def test print "hello\n" end private :test end class Foo2 private def test print "hello\n" end end Pytho…

色々知らなかった事や気になった事

k.inabaさんのd.y.d経由で以下のサイトを読んで色々知らなかったことをメモ。http://alohakun.blog7.fc2.com/blog-entry-731.html Haskellなどの純粋関数型言語は、オブジェクトの値を変更できないので、別の状態を表すにはオブジェクトを新たに作るしかない…

Singletonデザインパターン

ネットで適当に調べたところ以下の2パターン見つかった。 objectクラスの__new__スタティックメソッドをオーバーライド メタクラスの__call__メソッドをオーバーライド まずはobjectの__new__をオーバーライドする方法。下記の例は、Singletonの"サブクラス…

Enumerableモジュール

RubyのEnumerableで重要なメソッドとPythonのメソッドとの対応表は以下のもの。 Ruby Python collect map find_all, select filter inject reduce sort_by sorted また、Rubyのは、Pythonのcmpと同等なもの。Pythonではmap、filterはもちろん関数でなくリス…

並列処理

twitterブームの陰で注目を集める“Erlang” http://www.atmarkit.co.jp/news/200704/27/erlang.html 今後は並列処理が重要となりマルチスレッドプログラミングの複雑さによる保守性の低下が懸念されているらしい。独立したプロセス同士が通信を行うモデルに移…

Rubyの嫌なところ

『Rubyクックブック』を読んで、早速、嫌なところをいくつか書いてみる。 関数にカッコが不要なので優先順位に注意しないといけない 1.upto 3 do |x| puts x end # 1 # 2 # 3 1.upto 3 { |x| puts x } # ブロックが3にバインドしてしまう # SyntaxError: com…