タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

JavaScriptとPythonとmetaprogrammingに関するraimon49のブックマーク (4)

  • 詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog

    おはようございます。「 Dmitry 先生、言いたい放題」のコーナーへようこそ。大形尚弘です。 今回は最長、そして ECMAScript をどっかに忘れた Dmitry 先生が、オブジェクト指向というものを一般より一段抽象化したレベルから語ります。 誰あろう私がそうなのですが、オブジェクト指向や、その他の何であれプログラミングパラダイムを学ぶとき、大抵そのパラダイムを代表する実装や言語をベースに学習します。すると、パラダイム自体への理解が、その実装の制約に縛られることが多々あると思います。 私は主に ActionScript2/3 でオブジェクト指向を学習しましたので、 JavaScript は「オブジェクト指向言語では無い」と思ってしまっていたことがあります。これはこの章をお読みいただければ分かるとおり、全くの間違いです。正確に表現するならば、オブジェクト指向のための「理論的糖衣」が A

    詳細 ECMA-262-3 第7章1節 OOP: 概説 - mixi engineer blog
    raimon49
    raimon49 2012/01/20
    メッセージ応答性がプロトタイプベースモデルの特徴、カプセル化は隠す目的のために隠すのではない、など。長いけど勉強になった。
  • Ruby, JavaScript, Python で既存のクラスを拡張 - オープンクラス(モンキーパッチ) と Scala の暗黙の型変換

    1. 「リストの要素を取得する」関数を例として、クラスの拡張を考える Lisp でリストの先頭要素を得る関数は car 。先頭以外の残りの要素を取得するには cdr 。 (car '(1 2 3 4 5)) => 1 (cdr '(1 2 3 4 5)) => (2 3 4 5) ( cf. CAR and CDR – Wikipedia ) Haskell で上記に相当する関数は、 head tail 類似した対照的な関数に init last がある。 main = do let xs = [1..5] print $ head xs -- 1 print $ tail xs -- [2,3,4,5] print $ init xs -- [1,2,3,4] print $ last xs -- 5 これらの関数名を、他の言語でも使えるように、拡張の方法をそれぞれ見ていく。 2. Ru

    Ruby, JavaScript, Python で既存のクラスを拡張 - オープンクラス(モンキーパッチ) と Scala の暗黙の型変換
  • 雑記(2011-03-24) / return0 blog

    たまにではあるが、ある種のプログラムを書いているとインスタンスタイプベースのオブジェクト指向の方がすっきり書けるんじゃないかと思う事がある。例えばDOMのように元が十分複雑でカスタマイズが容易ではないクラス群に対して、あるインスタンス固有の動作をさせたいと思うと、これはなかなか厄介な問題になる。Pythonのような動的に型付けされたプログラミング言語なら、後からクラス自体に無理やりメソッドを付けるのが楽といえばそうだが、それは影響がデカすぎる。 しょうがないから、こういう時にはtypesモジュールを使ってメソッドを後付けするという手段を取っている。 class Foo(object): def foo(self): pass import types def bar(self): print 'bar' f = Foo() f.bar = types.MethodType(bar, f)

  • Pythonのメタプログラミング (メタクラス) を理解したい人のための短いコード片と禅問答 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー Pythonのメタプログラミング手法の一つ「メタクラス」は,初心者にとっては「なんか強そう/経験値たくさんもらえそう」なアイテムの最右翼だと思う。反面「どうすればいいか/なにができるか」ということがなかなか理解しづらい。 英語のブログを見ていたら,メタクラスの理解に役立ちそうなちょうどよいサンプルを見つけたので,紹介がてら独自の解説を付け加えたいと思います。 メタクラスを簡単に説明すると,「来コードを書かなければ実現できないような処理を黒魔術的な処理でなんとかしちゃう」ためのテクニックです。コード量を(時には劇的に)減らすことができたり,すっきりした見通しの良いクラス設計を実現できま

    raimon49
    raimon49 2010/10/15
    メタクラスでprototype継承を実現する例。
  • 1