2006-06-01から1ヶ月間の記事一覧

静的 vs 動的

面白いページを見つけた。 RubyについてJavaプログラマが知るべき10の事柄 http://d.hatena.ne.jp/brazil/20050816/1124136877 その中で、次のような記述がある。 長い間私は、頑固な静的な型付け支持者でした。Cを使っていた頃に、身をもって教訓を得ていき…

事前条件

事前条件(契約)とは、契約プログラミングでは、関数が呼び出される前に満たすべき条件ということだが、あるモジュールや処理において、ある条件を既に満たしていることを前提として処理を書くことで汎用性やモジュール性が高めることができる。 例えば、A → …

ふつける

今日、「ふつうのHaskellプログラミング」(「ふつける」)を地元の書店で買ってきた。「Exceptional C++」も買おうと思ったのだが、なぜか売り切れていたので、アマゾンで予約した。「ふつける」は、まだ少ししか読んでないが、「入門Haskell」よりも読みやす…

OOPのメリット

昨日の日記でOOPのメリットを説明している記事を見かけたことないと書いたが、少し考えてみて思い出した。 私が良く見るサイトの掲示板で、OOPのメリットは、以下の2つであると書かれていたのを思い出した。 データの抽象化 マルチプルインスタンス マルチ…

仕事と趣味とOOP

プログラミング言語に何を使用するかの選択は難しい。仕事では当然、過去の資産やアプリの都合など色々な要件によって決定される。ある意味始めから決まっていたり、選択肢がないことも多いと思う。 しかし、趣味でプログラミングするなら、面白い機能がある…

関数呼び出し vs forループ (再検討)

今月の16日の日記の内容を再検討してみた。 実戦のケースで計測してみたり、簡単なサンプルを作成してみたりした結果、forループの方が若干早い傾向にあるような気がする。 関数呼び出しを伴ったリスト内包表記の方が若干速くなるケースもあると思うが、ほと…

抽象化のメリット、デメリット

プログラムの良し悪しを決める構成要素としては、以下のものが考えられる。 パフォーマンス(スピード)、メモリ、可読性、汎用性(再利用性)、修正しやすさ、などである。 他にもあるかもしれないが、とりあえず、以上のもので考えてみる。また、パフォーマン…

依存関係と抽象化

最近の自分の日記と記事をもう少しまとめてみる。 依存関係(A←B)とは以下の2つの条件を持つものである。 1.変更性 ⇒ AはBを知らないが、BはAを知っている。すなわちAを修正するとBも修正する必要が出てくる可能性があるが、Bを修正してもAは修正の必要な…

関数呼び出し vs forループ

Pythonで、関数呼び出しのオーバーヘッドとforループのオーバーヘッドを比較してみた。 import timedef foo(v): # ここで、ある処理(A) return vr = range(10000000) # ここの個数を色々変える(B) t1 = time.time() p1 = [foo(v) for v in r] t2 = time.time…

抽象化に関して

プログラムのコードを抽象化するという意味を考えてみる。まず、プログラムコードの構成要素として、以下の3つが存在する。 表記(interface) 実装(implementation) 機能、意味(semantics) 抽象化するとは、表記が1つで、実装が複数(の可能性のあるよう)に…

自作ライブラリのためのインタフェース

ある機能を持った自作のライブラリを作成しようとする場合、必ずユーザ定義のデータに関連した処理を必要とする。仮に、ユーザ定義のデータに依存した処理を含まない場合は、もっと汎用的なライブラリであり、そういうものはビルトインされている可能性が高…

ダイクストラの構造化プログラミング

構造化プログラミングの構成要素は、順次、反復、分岐の3つである。 処理を汎用化する際に、ユーザ定義のデータに関する部分は汎用化を妨げる部分である。 最近のプログラミング言語では、反復や分岐に関して、データを含む部分に関して抽象化する機能があ…

プログラミングの機能追加

「プログラミングの機能追加」の記事をまとめた。 我ながら文書がヘタであるが、時間があるときに修正したい。 http://morchin.sakura.ne.jp/henkenteki/ocp_and_addition.html サンプルコードはJavaを使用したが、かなり面倒くさい。 しかし、Pythonのよう…

Python最高!

PythonはRubyに比べてコミュニティが断然大きいと思われる。すばらしいリンクページを見つけた。 http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/ このページには、Perl CookbookのPython版や、RubyレシピブックをPythonで、などがある。また、wxPython…

ユーザ定義クラスの既存アルゴリズムへの適用

Pythonで、自分で作成したクラスを、例えばビルトイン関数に与えて、条件を満たすオブジェクトを見つけたい場合、新たに作成しないといけない。 例えば、 class A: def __init__(self, id, val): self.id = id self.val = valというクラスがあり、Aのシーケ…

SPE 0.8.2.a

PythonのIDEとしてSPEを使用しているが、コメント部で日本語を表示したくて、「Edit / Preferences...」メニューから、CommentのFaceをFixedSysに変更して表示できるようにしたら、他の部分の文字より微妙にサイズがでかい。 Sizeを変更しても変更されないし…

Pythonのブール値にはまる

Pythonでは、偽として、None、False、0(数値のゼロ)、空のシーケンス型、空のマッピング型などがある。 これを知らなくて、関数の引数として、数値を入力させて、不要な場合は、Noneを入れる仕様にしていたのだが、数値がたまたま、0となっているのに気づか…

Python開発効率高杉

最近仕事でPythonを使い始めたが、Cと比べて開発効率が良すぎる。 もちろんPerlやRubyでも同様のやり方だと思うが、特にmap()関数が気に入っている。例えば、あるオブジェクトのリスト(objs)から、属性(val)のリストを取り出すには以下のようにする。 vals =…

ポリモルフィズム

よくOCP(Open-Closed Principle)でのOpenは、ポリモルフィズムが例として使用されている。つまり、新たに型を追加することにより、実装を追加するということである。 しかし、私はそれは、機能追加を意味すると思ってない。単に、型に応じて実装を変更してい…

Pythonのスコープ

PythonのスコープはLEGBルールである。L:Local、E:Enclosing function's scope(関数のネスト)、G:Global、B:Builtinの順に見える変数が優先される。 つまり、ビルトイン関数をローカルなどの変数で上書きできる。例えば以下のように。 def foo: open = 'test…

Pythonのクラスに関して

Pythonのクラスは、属性(メンバ)が全てpublicになってしまうので、いわゆるカプセル化はできない。 また、演算子以外の、通常のメソッドのオーバーロードもできない。2回定義すると、2番目の定義で上書きされてしまう。これは、ある意味正しい。つまり、Py…