まとめるとPHPの良い点というのはHTMLに埋め込めるDBアクセスライブラリが標準Apacheモジュールのできが良いドキュメントのできが良いというあたりだろうか。標準というところが大きいのだろうか。Rubyも1.8.1あたりではDBI/Rubyを標準添付にしようか。理解できないだけで否定するわけではないが。私自身はその方が良いと思ったことは一度もない(まあ、Rubyの作者としては当たり前なんだけど)。それがなぜなのかはまだ知らない。ところで、世の中のプログラミング言語には悪口や愚痴しか聞かないけど、よく使われるものほめる人とけなす人の両方がいるものもっぱらほめる人が多いものがある。Perl、PHPやC++は最初のもののような気がする。「よく使われる」ってところが重要で、これがないと「消え行く言語」になってしまう。2番目の典型例はLispかな。RubyやPythonは3番目かなあ。言語のどのような特徴がこれらを引き起こしているかも今後ぜひ考察していきたい。Pythonはちょっと2番目入ってるかも。Rossumが登場して、Rubyコミュニティの連中はPythonについて誤解を広めていると文句したそうだ。心当たりはないんだけど。その場に居合わせたかったなあ。考えても、見ものだったはず。いうのはもっともで、その辺を意識して「よく使われる」ってところが重要って書いたわけです。私は「悪口しか聞かない割によく使われる」とは思ってません。悪く言われる言語の欠点は無くすことができるか悪口を言いたくならないようなよく使われる言語が存在できるかなどには興味があります。[OOP]オブジェクト指向は難しい昨日、オブジェクト指向の部分でつまづいていますというツッコミをいただきました。誰にでも分かるという説明は実は困難なのですが、最初のきっかけになる解説を試みようと思います。これより先は書籍なりを参照してください。Rubyで最小限覚えないといけないオブジェクト指向の基本概念は以下の通りだと思います。「値」はすべて「オブジェクト」と呼ぶ「オブジェクト」の「メソッド」を呼べる。「オブジェクト」は「メソッド」が呼ばれると自分に合わせた処理を行う。「オブジェクト」は「クラス」に所属する。「オブジェクト」が持つ「メソッド」は(原則的に)その所属する「クラス」で決まる。そんなに難しくないでしょ。あと、ドキュメントを読むために「継承」を理解した方が良いかもしれません。「クラス」は親となるクラスである「スーパークラス」を持つ。ある「クラス」に所属する「オブジェクト」が持つ「メソッド」は、そのクラスで定義されたものと、スーパークラスで定義されたものを(先祖までさかのぼって)合わせたものだ。それからRubyにはMix-inがありますから、これも押さえておきましょう。スーパークラスであるObjectクラスから引き継いだobject_idメソッドなども持ちます。オブジェクト指向のメリットはなにか、ということですが、大きく分けるとオブジェクトが自分に合わせた処理を選ぶので、プログラマが選択する必要がない。#=>4という「オブジェクト指向」の嬉しさの違いです。機能がクラス単位で整理されるので理解しやすい。整理されていると感じられます。継承によって機能の拡張が行いやすい(時がある)。新しいクラスを作れるというもの。これを「差分プログラミング」と呼ぶ。オブジェクト指向を解説した書籍では必要以上に強調される傾向があります。最初の一歩としてはこんなもんでしょうか。ツッコミ、リンク、Trackbackなどいろいろな反応をいただく。たださんishinaoさんMimoriさんで、考えたのが、「オブジェクト指向が難しいと思われる原因は、難しいというイメージそのもの」ではないかと。「オブジェクト指向」のもっとも重要な概念は通常のプログラミングにも登場している。"r");という呼び出しは「pathにあるファイルをオープンして、ファイルオブジェクトを得る」という処理そのものだ。別にオブジェクト指向は必要ない。CのFILE*にはfprintf()やfclose()などのいくつかの「メソッド」がある。「オブジェクト」という概念は存在していて、無意識のうちに使っているはずなのだ。このことは別に目新しいことでもなんでもない。K&Rにも「オブジェクト」という用語が使われている。多くの言語には「オブジェクト」でない「値」もある。Cの例を出すと、構造体はオブジェクトではない。代入によってコピーが発生するからだ。BASICの文字列もオブジェクトではない。すべての値がオブジェクトであるRubyのようなオブジェクト指向言語の方が覚えることは少ないはずだ。ほら、やっぱり「オブジェクト指向は難しくない」。「単なる値」という考え方の方になじんでおり、リファレンスの方は十分に理解されていないらしいのだ。世の中に「ポインタ解説本」が登場する理由でもある。ふたつの考えのうち、ひとつが消えて単純になったはずなのに、残ったのは苦手な方だったと。早いうちにLispやRubyやPythonなど、「すべての値がオブジェクト」型の言語を身に付けておくべきではないかと。逆よりも幸福になれそうだ。オブジェクト指向で2番目に重要な概念も通常のプログラミングに登場している。2番目に重要な概念とは「動的結合」あるいは「多態(ポリモルフィズム)」である。非オブジェクト指向言語にも引数のデータ型に応じて適宜処理を行ってくれる関数があるものもある。私が知っているのはLispだが、BASICなどもにあったような気がする。オブジェクト指向言語と呼ばれるものは、そのような手続きを自分で定義できるようになっただけだ。ほら、やっぱり「オブジェクト指向は難しくない」。「多態」を理解していれば「継承」も難しくないはずだ。現実世界にも結構ある関係だし。実際のプログラミングにどう使ったらよいのかわからないという点はあるかもしれない。「差分プログラミング」同様、オブジェクト指向解説書の罪と呼べるかもしれない。『オブジェクト指向スクリプト言語Ruby』では、私も同じ罪を犯しているけど。ドキュメントを探すのが面倒という点だ。あるオブジェクトのメソッドについて知りたい時、そのオブジェクトのクラスを調べそのクラスのドキュメントを読みなければスーパークラスを調べ見つかるまでObjectクラスまでさかのぼりまだなければincludeされているモジュールを順に探すという手順を踏まなければならない。なんらかの支援が必要だ*1。Eiffelにはshortとかflatとかいうツールがあり、前者はクラスの仕様だけを抽出し、後者はクラスの継承関係を展開してくれる。これでドキュメントを探し回る苦痛が軽減される。人間が自分で探すことを比べれば、はるかに楽だ。行ずつ読み込んで繰り返すイテレータ。指定した文字列になります。指定すると行区切りなしとみなします。(パラグラフモード)。