タグ

ブックマーク / morchin.hatenadiary.org (5)

  • プログラミングテクニックのまとめ - プログラミング日記

    とりあえず思いついたもののまとめ。 まずは、ベーシックなものから。 変数のスコープをなるべく狭くしろ 他はグローバル変数を使うなとか、モジュール化と界面を意識せよなど。とにかくスコープは重要かつ意外と奥が深い。スコープに関係する機能は、モジュール(パッケージ)、クロージャ、ローカル関数、ローカルクラス、変数の種類、アクセス制御など。 同じロジックのコードを2度以上書くな 他はDRY原則、コピペをするななど。自分の場合、2度書く方がシンプルになる場合、2度書くこともある。特に、ifやswitchなどのロジックの中で同じコードが2度現れる場合、ちょっとしたコードでわざわざ別のところで関数やブロックにまとめて、それを参照するのは面倒。但し3度以上現れる場合は関数などにまとめるケースが多いかも。 汎用コード内で条件分岐コードを減らせ 他はifをポリモーフィズムによりなくせなど。条件分岐は汎用性を損

    プログラミングテクニックのまとめ - プログラミング日記
  • 2007-08-02

    昨日のCAIAFは機能面での意味から名前を付けたが、少々長いし覚えづらい。 結局、 関数内のネストした関数の中で関数の外の変数(intなど)が再結合できない 関数の呼び出し側の階層で関数の中の変数が参照できない のを、 ダミーの関数の中に変数や関数などの属性を詰め込んで、それを介してアクセスする というのがCAIAFのアプローチである。 アプローチの面から命名すると、(ダミーの)関数を名前空間として利用して、インスタンスの概念も有するということなので、namespace function object(名前空間関数オブジェクト)と命名することにした。これなら覚えやすい。 関数内のネストした名前空間で、外側の関数の変数の参照は可能だが、再結合は不可能。可変オブジェクトなら内容を書き換えるのに参照のみで再結合の必要ないので、内容を変更可能。しかし、intみたいに不変オブジェクトは参照は可能だが

    2007-08-02
  • 抽象化に関して - プログラミング日記

    プログラムのコードを抽象化するという意味を考えてみる。まず、プログラムコードの構成要素として、以下の3つが存在する。 表記(interface) 実装(implementation) 機能、意味(semantics) 抽象化するとは、表記が1つで、実装が複数(の可能性のあるよう)にするということである。別の言い方をすれば、表記を決めて、実装は何でもよくて、しかし、意味は「あるもの」を想定しているということである。 抽象化には、データの抽象化と処理の抽象化があるが、パターンが色々あり奥が深い。例えば、以下のものは、抽象化の例である。 ・実体オブジェクトとポインタで指されたオブジェクトを同一扱い ⇒ 扱い方を実装で隠す ・カプセル化 ⇒ 実装詳細を隠す ・物理モデルと仮想モデル ⇒ 物理モデルを複数想定し、扱いは仮想的に ・ラッパー ⇒ インタフェースを交換する(アダプタ) また、例えば、Py

    抽象化に関して - プログラミング日記
    hamasta
    hamasta 2007/05/21
    副作用と対処 python
  • Effective Python - プログラミング日記

    オブジェクトの比較とソートの記事を追加した。結構大変だったが勉強になった。やはりPython Cookbookはすばらしい! オブジェクトの比較 http://morchin.sakura.ne.jp/effective_python/compare.html オブジェクトのソート http://morchin.sakura.ne.jp/effective_python/sort.html

    Effective Python - プログラミング日記
  • ジェネレータ - プログラミング日記

    Pythonでジェネレータを作成するには次の2通りがある。 >>> (i for i in xrange(3)) <generator object at 0x00B34F08> >>> def gen(): ... yield 0 ... yield 1 ... yield 2 ... >>> gen() <generator object at 0x00BE2EB8>つまり、リスト内包表記風(呼び方が分からない)の書き方と、関数の定義風の書き方の2通りあり、前者は、そのままでインスタンスになり、後者は関数呼び出しをするとインスタンスが生成される。 概念としては、自分の中ではジェネレータはリストと同じようなものと考えている。但し、違いはリストは全要素があらかじめ作成されるが、ジェネレータは要素を取り出すタイミングで要素が作成されるということだと思う。 何のメリットがあるのかは、難しいが、

    ジェネレータ - プログラミング日記
    hamasta
    hamasta 2006/10/08
    遅延評価リスト ジェネレーター
  • 1