「C++再考」の訳注集6
      第8章 初心者は気楽に

 また、また、更新が遅れてしまいました。もう聞き飽きましたね。(読み飽きた?)引越しの余波があり、新学期もそろそろで、今後も週1の更新は無理かもしれません。今後、しばらくはのんびり更新と思っていてください。ちゃんと読んでくれているみなさんすみません。

 さて、第8章は「オブジェクト指向」ということで、期待に胸をふくらませて読んだ人も多いかもしれません。ただ、中級を目指す初心者には、ちょっときついかもしれません。(内容も地味ですね。^^;)正直に言って、この章は難しいと思います。なので、気楽に読んで、わかったらもうけもの、わからなかったらまた後で読もう、、、という態度でよいと思います。

 初心者になぜ難しいかというと、いくつかの新しい概念がありそうだからです。ちょっと思い付くままに書くと、

1.ツリー(木)
 これは最初の説明と図8を見れば意味はわかると思います。図8は計算式を表現するために使われるいわゆる「構文解析木」ですが、ツリーにはいろいろなものがあります。まじめにプログラムをしているといつか出会うものですので、ツリーというものは覚えておいてください。

2.構文解析木
 重要な概念であるツリーの1種として図8のような構文解析木があります。しかし、初心者が最初に遭遇するツリーの1例としては、ちょっと「厳しい」かもしれません。CやC++のまじめな解説者は「構文解析」というものがとても好きなようで、いろいろな本で初心者を挫折させているような気がします。これは計算式(やプログラム)を解析してコンピュータが理解できる形にすることです。たとえば人間は「(-5)*(3+4)」を見て理解できますが、コンピュータにはそんなに簡単ではありません。えっ?そうなの?プログラムで「(-5)*(3+4)」と書けばそれだけじゃん。そのとおりです。でも、プログラムはコンピュータが直接理解するのではありません。これをバイナリ(機械の理解する言葉)に変換する必要があるのです。この変換を、、、コンパイルというのでした。まあ、今更ですが。しかし、コンパイルしてくれるソフト、コンパイラもソフトなので、誰かプログラマが書いたわけです。そういう人たちには「構文解析」だの「構文解析木」なんかがとても重要なわけです。(たぶん。私はそういう人間ではないので、実は推測です。)
 初心者にはちょっと退屈そうな例ですが、そういう背景を知れば、興味を持てるかもしれませんね。

3.再帰
 ある関数が自分自身を呼び出したりするのを「再帰」と言います。(ある関数が別の関数を呼び出して、その関数がまた別の関数を呼び出して、とやっていって、最後にまたもとの関数を呼び出したりするのも「再帰(的)」です。)この考え方もとても重要で、是非身につけていただきたいものですが、やはり、他の新しいものと一緒だと大変かもしれません。再帰については91ページあたりに書いてあります。なお、91ページ真ん中辺の「count<<e」「e.p->print(count)」は「cout<<e」「e.p->print(cout)」のミスプリですね。校正のときには気がつきませんでした。すみません。(はずかしー^^;)
 ちょっと見てください。87ページのUnary_node定義では「Expr_node* opnd;」とあるのが93ページでは「Expr opnd;」に変更されています。この変更は実は88、89ページあたりからなのですが、ちょっとわかりずらいですね。(そうでもないですか?一応本文の訳注にちょっとだけ書いておきました。)この変更がこの章のひとつのポイントなので注意してください。
 クラスExprのメンバ変数にExpr_node*があり、そのExpr_nodeの派生クラスのUnary_node、Binary_node、Ternary_nodeのメンバ変数にまたExprがあるのです。このようにヘビが自分のしっぽを飲み込んでいるような構造はわかりにくいかもしれませんが、C++の熟練者はときどき使うようです。自分でどんなカンジになっているか図を描いてみるとよいかもしれません。

 以上に注意して気楽に読んでください。この章の内容が理解できれば、かなり難しいことに慣れてきたと言えるでしょう。しかし、そんなに急ぐ必要はありません。それより、第9、10章でがんばってみてください。こちらは名門スタンフォード大学での講義だそうです。楽しみですね。
 

前のページ
後のページ
訳注の目次
総目次