ストラウストラップのプログラミング入門(13) 第6章つづき
『ストラウストラップのプログラミング入門』を読む。今日は6章の最後まで。ドリルはまだ。
「(師匠)で、C++書けるようになったん?(ニヨニヨ)」
鈍器本を最後まで読んでもC++を書けるようにはなりませんっ。いわば実装の話に特化した『Code Complete』ですよ、アレ。
「で、書けるようになったん?(ニヨニヨ)」
何か作らないと書けるようにはなりませんよ・・・。
「作ればイイジャン(ニヨニヨ)」
ごもっともで。
…という会話をした。いちおう第二部までは読むつもり。まあムダではないと思う。面白いし。
でも、「君に決めた」って言語で何かを作るよりも先に取り組むべき課題かというと、違うというのは認識したので、感謝、感謝。
読書めも
関数名
論理的にはputだけでもよさそうなのに、putbackという「冗長な」名前を使用するのはなぜか。get関数とputback関数の非対称性を強調したかったからだ。
このくだりが面白いなぁと思った。
名前には、長さにも意味があるし(スコープと対応させると分かりやすいとよく聞く)、対称性があることにもないことにも意味がある。
昔、「複雑なものを複雑なまま見せる」意義について聴いたことがある。その話を思い出した。
たしか、「ネストしたfor文はコードの見通しがわるくなるから避けるべきだが、絶対にどんな時も避けるべきかというと違う。あえてネストを残して、複雑な処理を複雑なまま見せることにもそれはそれで意味がある」というコンテキストだった。
クラスの外でのメンバ関数定義をすることの意義
理想的には、プログラム内のすべての論理エンティティがそれぞれ1つの画面上に収まるようにしたい。クラス定義は一般に、メンバ関数定義がどこか他の場所にあると画面上に収まるが、クラス定義の中(クラス内)にあると画面上に収まらなくなる。
これまでずっと、なぜメンバ関数定義をクラスの外に出すのか、疑問に思っていた。
定義があちこちに散らばりかねないし、定義したファイルがウッカリ欠けたらコンパイルできなくなるし。メリットなんてあるのかと。
でも、この文章を読んで、理由の1つが分かった。
たとえば、EclipseでJavaのコードを読むときに、Outlineペインはとてもベンリだ。Outlineペインは、まさに、実装の詳細を隠して「論理エンティティが1つの画面上に収ま」ったビューを提供してくれるからだ。それをコード上で行おうとするのが、「クラスの外側でメンバを定義すること」なのかもしれない。