ストラウストラップのプログラミング入門(13) 第6章つづき

ストラウストラップのプログラミング入門』を読む。今日は6章の最後まで。ドリルはまだ。

「(師匠)で、C++書けるようになったん?(ニヨニヨ)」

鈍器本を最後まで読んでもC++を書けるようにはなりませんっ。いわば実装の話に特化した『Code Complete』ですよ、アレ。

「で、書けるようになったん?(ニヨニヨ)」

何か作らないと書けるようにはなりませんよ・・・。

「作ればイイジャン(ニヨニヨ)」

ごもっともで。

…という会話をした。いちおう第二部までは読むつもり。まあムダではないと思う。面白いし。

でも、「君に決めた」って言語で何かを作るよりも先に取り組むべき課題かというと、違うというのは認識したので、感謝、感謝。

読書めも

関数名

論理的にはputだけでもよさそうなのに、putbackという「冗長な」名前を使用するのはなぜか。get関数とputback関数の非対称性を強調したかったからだ。

このくだりが面白いなぁと思った。

名前には、長さにも意味があるし(スコープと対応させると分かりやすいとよく聞く)、対称性があることにもないことにも意味がある。

昔、「複雑なものを複雑なまま見せる」意義について聴いたことがある。その話を思い出した。

たしか、「ネストしたfor文はコードの見通しがわるくなるから避けるべきだが、絶対にどんな時も避けるべきかというと違う。あえてネストを残して、複雑な処理を複雑なまま見せることにもそれはそれで意味がある」というコンテキストだった。

クラスの外でのメンバ関数定義をすることの意義

理想的には、プログラム内のすべての論理エンティティがそれぞれ1つの画面上に収まるようにしたい。クラス定義は一般に、メンバ関数定義がどこか他の場所にあると画面上に収まるが、クラス定義の中(クラス内)にあると画面上に収まらなくなる。

これまでずっと、なぜメンバ関数定義をクラスの外に出すのか、疑問に思っていた。

定義があちこちに散らばりかねないし、定義したファイルがウッカリ欠けたらコンパイルできなくなるし。メリットなんてあるのかと。

でも、この文章を読んで、理由の1つが分かった。

たとえば、EclipseJavaのコードを読むときに、Outlineペインはとてもベンリだ。Outlineペインは、まさに、実装の詳細を隠して「論理エンティティが1つの画面上に収ま」ったビューを提供してくれるからだ。それをコード上で行おうとするのが、「クラスの外側でメンバを定義すること」なのかもしれない。