読書感想文

Posts filed under 読書感想文

GoF本第四章その1: 概要

Filed in C/C++, prog, , 読書感想文

 GoF本も割と久方ぶりに読んでる訳ですが、今読むと前よりちょっと理解できる感じです。一応腕上がってるんですかね?
 今回からは第4章に入ります。第4章は構造に関するパターンが詳解されています。構造に関するパターンの要点は二つ。オブジェクトやクラスを合成する事、まとめられたクラスやオブジェクト群がむやみに強く結合しない事です。「分割し、統治せよ」をオブジェクト指向の世界で如何に実現するか、その妙技を集めた章と言えます。
 いくつかのオブジェクトやクラスを合成したいと言う要求は良く発生します。また、それを前提として書かれるクラスやオブジェクトも多いでしょう。しかし、オブジェクトを合成するだけでは不満なのです。複数のオブジェクトやクラスを持ちつつも、それぞれの依存度を最小化したいのです。影響を局所化出来てこそ大きな構造には価値があります。
 本章では上記の様な要求に対する解が七つ詳解されています。その七つのパターンを列挙しておきます。

 構造に関するパターンはそれぞれいくらかの関連を持ちます。設計の軸になる部分で良く使用されたりするので、これらのパターンの複合的な物になる事が多いようです。それらの関連については本章の最後で語られます。本blogでも、最後に取り上げる予定の Proxy パターンのエントリかまとめのエントリで書く予定です。
 個人的に本章は割と好きです。いろいろなロジックに触れるのが楽しいのです。その意味で第5章の振る舞いに関するパターンも面白いトリックが満載で好きです。本章のパターンは割とどっしりとした印象で、第5章のパターンは派手な印象ですね。ぱっと見て効果が実感しやすい第5章のパターンも良いですが、最終的な開発コスト等、地味ながらも重要な部分で威力を発揮する本章のパターンも長月の脳の肉欲を大きく満足させます。
 ただ、これらのパターンは選択が重要になりますので、本章は特に精読して各パターンをしっかり把握しておきましょう。

GoF本第三章その6: Singleton

Filed in C/C++, prog, , 読書感想文

 さて、今回は第3章最後のパターン、Singleton です。なんと言うかみんな知ってそうですが……
 Singleton はアプリケーション中にあるクラスのインスタンスが一つしか存在しない事と容易なアクセスを保証するパターンです。複数の選択肢はあれど、同時に一つしか存在してはいけない場合に威力を発揮します。グローバル変数のアクセシビリティにインスタンス数の制限を加えた物と言えます。
 Singleton はその簡単な構造とは裏腹に、インスタンスへのアクセスを制限したりコントロールしやすい、制限を掛ける数が任意に調整でき、状態を持て、C++等の静的メンバ関数の仮想化を許さない言語でも仮想関数を扱える等から、クラスメソッドだけのクラスを使うより柔軟性がある。と言うメリットがあります。
 今までに挙げてきた複合オブジェクトの生成に関わるパターン、Abstract Factory や Builder、Prototype 等はアプリケーション内で複数必要となる事が少なく、高いアクセシビリティを必要とするので、Singleton を用いて実装される事が多いでしょう。それで無くとも Singleton は割と便利なので使用する機会は多いと思います。しかし、Singleton は拡張されたグローバル変数なので、グローバル変数が持つ欠点は多くの場合 Singleton にも当てはまります。
 さて、今回まで何度かに渡って生成に関するパターンを扱いましたが、これらはシステムの構成に柔軟性を与える為の物です。Factory Method に代表されるサブクラス化や、Abstract Factory や Builder、Prototype が威力を発揮するオブジェクトコンポジション、これらは柔軟性を高める為の方法論です。それらを上手く使いこなしたアプリケーションに現れるオブジェクト生成の為の設計パターン、それが第3章で詳解されているデザインパターンなのです。
 デザインパターンは若干の複雑度と引き換えに柔軟性をもたらします。パターンの選択肢が増えれば増えるほど設計は洗練されるでしょう。この機にデザインパターンを勉強してみるのは如何でしょうか?

GoF本第三章その5: Prototype

Filed in C/C++, prog, , 読書感想文

 今回は第3章に於ける複合オブジェクトの生成に柔軟性を持たせる為のパターンについての最後の項です。今回は Prototype パターンについてをお送りします。
 Prototype は生成するオブジェクトを雛型から複製する事で賄うパターンです。ですので、クライアントクラスでは生成過程で各部品の生成を各部品のプロトタイプオブジェクトが持つ複製メソッドに委譲します。詰まり、プロトタイプオブジェクトに生成を依頼するクライアントクラス側で適宜プロトタイプオブジェクトを挿げ替えれば様々な組み合わせの複合オブジェクトを生成する事が出来ます。
 Prototype は、インスタンシエートされるクラスがどの様に構成されるかが静的に決定しない場合、詰まり実行時に決定される場合の動的構成や、何らかのクラスに於てインスタンスの取り得る状態が少ない場合に、あらかじめ雛型を用意しておく事でインスタンシエートの手間を省く等の用途で使用されます。
 Prototype パターンも、Abstract Factory パターンや Builder パターンと同じく生成プロセスから生成の詳細を分離します。しかし他の生成に関するパターンよりも実行時の動作に重点を置いている為、他のパターンよりも柔軟性が高く、生成するオブジェクトの追加や削除が容易です。また、柔軟性が高い為、値や構造の組み換えによってオブジェクトの仕様を変更できます。
 構成の柔軟性に於て高いアドバンテージを持つのに対して、実装の面ではいくらかの不利な点を持ちます。Prototype はオブジェクトの複製によってインスタンスを生成するので、Prototype を適用するクラスには複製関数が必須となります。また、複製に掛かるコストが高い場合にも適さないでしょう。ただし、複製のコストは COW (Copy On Write) な実装をする事で軽減できます。しかしそれもまた複雑度を上げるので一つのトレードオフでしょう。
 Prototype は Abstract Factory の実装としても使えます。Abstract Factory に雛型の集合を持たせ、オブジェクトの生成は雛型の複製で行うのです。また、Composite パターンや Decorator パターンの様に、多くのオブジェクトを集約したり連鎖させるパターンとも相性が良いでしょう。これは複合オブジェクトの生成に関するパターンに共通していますね。
 長月は Prototype の理解度が低い上に、使用した記憶もありませんし、オブジェクトの構成は静的に決まって欲しいので動的な構成は注目度が低く、Prototype にはこれと言って言える事が無いんですが、これも何らかの事情で実行時までオブジェクトの構成が決定できない場面に出くわしたら重宝するんでしょうね。きっと、多分、おそらく。
 で、次回は第3章最後の項、生成に関するパターンの大トリ Singleton です。なんか Singleton だけは今更何を言うまでも無くみんな知ってるんじゃないかという気がしないでもないんですが、順番なので次は Singleton をお送りします。ではまた。

GoF本第三章その4: Factory Method

Filed in C/C++, prog, , 読書感想文

 第三章のパターンも今回で半分以上をクリアですね。今回は Factory Method をお送りします。
 Factory Method はオブジェクト生成の為のインターフェイスだけを規定して、実際の生成はサブクラスに任せます。これは結構頻繁にやりますよね。本によっては仮想コンストラクタと呼んでいます。
 あるクラスの中で別のクラスのインスタンスを利用するが、実際に利用するクラスが事前に解らない状況は割と頻繁にあると思います。特にライブラリ等、後にも多用する予定のクラスなんかはそう言う状況も多いと思います。そう言うときには Factory Method の出番です。多くの場合コンストラクタの中で new すると思いますが、そこを生成関数に書き換えてしまいます。そして生成関数は仮想関数にしてしまうのです。後は違うインスタンスを返したい時には適宜欲しいインスタンスを返す生成関数を実装したサブクラスを用意するだけです。
 Factory Method は特定の実装をコードから分離します。これは Abstract Factory や Builder もそうであったように拡張や入れ替えを容易にします。
 ただし、Factory Method にはサブクラスの定義を強要すると言う欠点もあります。特にサブクラスを必要としていない時には一つの悩み所でしょう。これに対して、C++ではテンプレートを使うと言う選択肢があります。テンプレートパラメータによって返すオブジェクトを返す生成関数を持つクラスを用意するのです。或いは生成関数をファンクタにしてしまうのも良いでしょう。ポリシークラスという選択肢もあります。テンプレート様様ですね。
 Abstract Factory や Template Method は良く Factory Method を利用します。
 Abstract Factory は Factory Method を用いて実装されますし、Template Method は Factory Method を内部で呼び出します。Abstract Factory のエントリで書いた CreateWindow() 関数は Factory Method に当たります。
 Factory Method はそれなりに熟練した方なら言わずとも利用しているであろうパターンです。特にC++等ではコンストラクタを仮想にする事が出来ないので自然とこう言う手法を編み出す人も多いようです。長月は自力で編み出した訳ではありませんが、Effective C++ で仮想コンストラクタの手法を知って以来、GoF本を買うまで Factory Method とは知らずに利用していました。知らない方もこれを機に Factory Method を含めたデザインパターンを勉強してみては如何でしょうか?

GoF本第三章その3: Builder

Filed in C/C++, prog, , 読書感想文

 今回は生成に関するパターンその2、Builder パターンです。
 Builder も Abstract Factory に似て、実装を差し替える為のパターンです。 Abstract Factory が利用するオブジェクトの実装を差し替える様に、Builder はオブジェクト生成の実装を差し替えます。詰まり、Abstract Factory がオブジェクトの実際を気にせずオブジェクトを生成出来るようにしたのと似て、Builder はオブジェクトの構成や、それを実現する為の機能を気にせずに生成出来るようにします。Abstract Factory が生成されたオブジェクトのインターフェイスの共通性に主眼を置いているのに対し、Builder は生成されるオブジェクトの生成過程の共通性に主眼を置いています。
 えーと、解りにくいですね。要するに、同じ生成ルーチンで色んなオブジェクトを生成出来るようにすると言う事です。
 これは生成したいオブジェクトがたくさんの部品や組み合わせで構成されている場合等に有効です。また、内部表現の差し替えが用意になります。これは生成の為の実装詳細が局所化されると言う事も意味しますし、詳細が局所化されるという事は、それらを利用する生成過程の細かいコントロールが可能になると言う事でもあります。
 Builder パターンはしばしば Composite パターンと共に使用されます。何らかの複合 (Composite) オブジェクトを生成する為に Builder が利用されるのです。また、Builder が必要とする部品を提供する為に Abstract Factory や Factory Method も利用できるでしょう。
 今回はジェネリックスプログラミングに近い立ち位置にあるパターンである Builder を紹介しました。生成に関する限り、Builder はポリシークラスの様な役割を果たします。個人的にはポリシークラスの方が好みなので余り出番がないんですが、ジェネリックスプログラミングのパラダイムをサポートしてない言語を使うときには便利そうです。
 さて、本エントリで Builder に興味を持たれた方、是非本書や増補改訂版Java言語で学ぶデザインパターン入門等でデザインパターンを勉強してみては如何でしょうか?

GoF本第三章その2: Abstract Factory

Filed in C/C++, prog, , 読書感想文

 前回投稿後すぐに書き始めたのに途中で寝ちゃったおかげで結局この時間ですよ'`,、(´∀`)'`,、
 ついにパターンのカタログまで来ました。今回は Abstract Factory パターンです。
 Abstract Factory は何らかのインスタンスを必要とする時に、その実装に関わる具象クラスを明確にせずに生成する為のマネージャクラスを用意するパターンです。それなりに構造化された設計のプログラムなら、HogeManager とか HogeCreator 見たいなクラスがあったりするでしょう。そう言ったクラスは多くの場合 Abstract Factory を用いて設計されているのではないでしょうか。
 このパターンは、抽象クラスとサブクラスを用いて場合によって実装をスイッチする際等に活躍します。本書に載っている例で言えば、複数の look-and-feel 規格に対応したアプリケーションを書く場合、実際に使用する look-and-feel に拠らないウィジェットクラスを書くために Abstract Factory を利用しています。
 Abstract Factory を簡単にまとめると、何らかのオブジェクトの集合に対して複数の実装系がある時、生成用のアクセスポイントを持つマネージャクラスを用意し、実際の生成はサブクラスに任せる構造です。
 例えば、複数のプラットフォームに対応したアプリケーションを書く場合、各プラットフォーム向けのGUIコンポーネント群を定義するでしょう。その時、実装に拠らず同じオペレーションで同等の機能を呼び出す為に、各コンポーネントは抽象基底クラスから派生して実装するかと思います。しかし、生成する場面で特定の実装に触れたくないのです。Window* w = ComponentFactory::GetInstance()->CreateWindow(); で Win32 も Mac も X-Window もフォローしたいわけです。そこで生成の為のインターフェイスを持つマネージャクラスを用意し、それを派生して各実装のコンポーネントを生成するサブマネージャクラスを定義します。後はプラットフォームにあわせた具象クラスを抽象マネージャクラスに代入して、コンポーネントの生成は抽象マネージャクラスを通せばよいのです。また、Singleton パターンや Factory Method パターンとの併用も良く見られます。
 ただし、パターンもいい事づくめと言う訳ではありません。メリットがあればデメリットもあります。AbstractFactory に関しては、インターフェイスの追加や削除を含む変更に弱いと言うデメリットがあります。インターフェイスの追加や削除が行われるとサブクラスまで手を加えなければなりません。この問題に関しては Andrei Alexandrescu が Modern C++ Design にて一つの解答を示しています。
 生成に関するパターンはC++に於ける不可避の定数性、詰まり new 構文でクラス名が既知でならなければならない問題を最小化します。これは動的に型付けする言語では問題にならないのかもしれませんが、静的な型付けを行う言語ではまず確実に問題になる部分です。長月はC++ぐらいしかまともなOOPLに触れていないので他の言語の事情を知りませんが、生成に関するパターンはC++でそれなりに良い設計と実装を行いたければ必須の構造に思えます。
 今回はそれらの生成に関するパターンの中で、Singleton や Factory Method 等の小さい粒度のパターンを除けば最も頻出するであろう Abstract Factory を紹介しました。本エントリで Abstract Factory に興味を持たれた方、是非本書や増補改訂版Java言語で学ぶデザインパターン入門等でデザインパターンを勉強してみては如何でしょうか?

GoF本第三章その1: 概要

Filed in C/C++, prog, , 読書感想文

 改めて読むとGoF本結構退屈ですね。第2章は面白いのに(´・ω・`)
 今回から第3章に入ります。ここからはパターンのカタログなので、パターンの紹介の様な形になるかと思います。今回は第3章の概要です。続けて次のエントリで Abstract Factory パターンについて書きたいと思います。
 第3章では生成に関するパターンを扱っています。生成に関わるパターンのキモは二つ。生成されるオブジェクトの詳細を如何に隠蔽するか。そして実際の生成の詳細を如何に隠蔽するかです。
 あるオブジェクトのクライアントはオブジェクトに対する必要条件だけを持っていたいのです。言い換えるとインターフェイスの知識のみで必要なオブジェクト群を扱えるのが理想なのです。その為に、生成されるオブジェクトの詳細を如何に隠蔽するかが重要になります。
 また、クライアントではオブジェクトの生成をハードコードしたくないのです。具体的に言うと、new Hoge; 等とはしたくないのです。前述した方法の場合、Hoge の生成方法が new では無くなった場合ソースを書き換える必要があります。それは勘弁願いたいのです。なので、生成に関する知識の隠蔽も重要になってきます。
 本章では上記の様な要件を満たす為のパターンを五つ詳解しています。その五つのパターンを列挙しておきます。

 本章ではこれらの実装例として迷路生成プログラムを使います。迷路の生成エンジンを各種パターンを適用して設計する事でそれぞれの違いを明確にします。ここをそれなりにちゃんと読まないと実装の説明を見ても何の事やら判らないかも知れません。気合を入れなければならないと言う程ではないですが、油断はしないようにしましょう。
 本項は概要の説明なので、特に技術的な事は出てきませんが、生成に関するパターンの思想が解説されています。プログラミングに於て今実装中の物の目的や思想、そして理想がわからないのは無用の混乱を生みますから、生成に関するパターンが何をどの様に目指す物なのかをきちんと把握しておきましょう。

GoF本第二章

Filed in C/C++, prog, , 読書感想文

 と言う訳で、GoF本第二章です。なんか妙にだめだめな気分なのでさくっと行きます。
 第二章では実例を挙げてデザインパターンの使い方を解説しています。本章で実例として上げられているのはワープロソフトです。文章、絵、図を自由に配置でき、ウィンドウシステムや look-and-feel 規格への依存を最小化し、オペレーションを統一的なメカニズムで扱う、と言った設計上悩ましい部分にデザインパターンを適用する事で柔軟性を持たせます。
 本章で使われるパターンは、Composite パターン、Strategy パターン、Decorator パターン、Abstract Factory パターン、Bridge パターン、Command パターン、Iterator パターン、Visitor パターンの計八つ。それぞれのパターンについては今後のエントリに譲りますが、Composite パターンで内部表現を定義し、Iterator パターンで走査し、Strategy パターンで操作とデータ構造を分離し、Abstract Factory パターンでオブジェクトの生成とクラスの詳細を切り離し、Bridge パターンで概念と実装を分離し、Decorator パターンでUIに柔軟性を与え、Command パターンで操作に拡張性を与え、Visitor パターンで操作の実装への依存を最小化する実例を挙げています。
 なんと言うか、用意された綺麗な例である事は承知の上ですが、思わずお見事と誉めたくなる仕事です。読者をデザインパターンの世界に引き込みます。実際できるのであれば自分でもこういった綺麗な設計を行いたい物です。ですから、こういった綺麗な例を見せられると嫌が応にも期待が高まります。
 そんな訳で、第2章は割とへーと思うことが多いです。色々勉強できます。読む人のレベルによってはああ、そうそう、そうだよねと共感出来るでしょう。
 本章は読むのが楽しい場所でもありますから、カタログ部分が重いと感じる方はここから読んでみては如何でしょうか?

GoF本第一章

Filed in C/C++, prog, , 読書感想文

 なんていうか最近チョイスする本がC++ユーザに媚びてる感のある長月です。と言う事で今回は特定のプログラミング言語に拠らない物をとGoF本をチョイスしてみました。ていうかOS【第二版】はどうしたって? 避けてるんですよ、重いから。正直しょっぱなからあれは後悔しまくりです。とりあえずは今月中に何とか……orz
 そんな訳でGoF本です。Erich Gamma/ Richard Helm/ Ralph Johnson/ John Vlissides著、本位田 真一/ 吉田 和樹 監訳、オブジェクト指向における再利用のためのデザインパターン改訂版です。
 デザインパターンを簡単に説明すると、良い設計に現れる定石を一般化した物です。本書はそのデザインパターンと言う考え方 (定石を一般化、カタログ化して共通認識を作ると言う考え方) を提唱したガンマ先生以下四名、所謂 Gang of Four が世に送り出した論文や、パターンコミュニティで提案された、良い設計に頻出する厳選された23のデザインパターンの解説書です。今回から数回に分けて本書について書いていきます。
 なお、本書については、パターンの紹介に近い形になるかと思います。なんと言うか他に書き様が無いとも……げふんげふん。
 そんな訳で今回は第1章について書きます。
 第1章はデザインパターンとは何かから始まり、本書で用いられている、デザインパターンのカタログの一項目としての整理の仕方、小見出しとそれに対するトピックの意味等の説明、本書で扱うデザインパターンの列挙と軽い説明、デザインパターンを設計に適用する際の指針と注意等が書かれています。
 プログラミングを嗜んでる方ならデザインパターンと言う単語を見た/聞いた事がある方多いんじゃないかなと思います。でも単語は知っててもそれ何? と言う方も居られるんじゃないでしょうか? 本書で語られるデザインパターンとは、プログラミングの主に設計によく現れる定石の事、またはそれらの設計を一般化・カタログ化して共通認識を作ろうと言う考え方を言います。よく見る用法は前者ですかね。デザインパターンは粒度が様々なので、実装レベルに関わる事も多いのですが、デザインパターンは設計レベル、実装レベルの定石に関してはイディオムと呼ぶ事が多いようです。
 本章では定石をカタログ化する事の意味や Gang of Four の推奨するパターンのまとめ方等が解説されています。余り知られていないけどこれは割と応用が広くて良いんじゃないかと思うパターンをお持ちの方は、ここで提示されているフォーマットに従って文書化し、デザインパターンのコミュニティに投稿すると良いでしょう。
 また、本章ではデザインパターンを設計に適用する為のあれこれも解説しています。これはデザインパターンの適用と言う観点で書かれてはいる物の。デザインパターン自体が既に広く使われている設計の定石である事から、設計に関する一般的な考え方のトピックでもあります。個人的にパターンそのものよりもここで触れられている事をしっかり押さえる方が重要なんじゃないかと思います。デザインパターンを使いながら覚えるのが実践的ですかね。
 と言う訳で、もはやバイブルと化した感のある本書ですが、何気にデザパタ自体を知らない様な方もまだいます。そんな方には是非読んで欲しい本です。本書では重いと言う方は、結城浩氏の増補改訂版Java言語で学ぶデザインパターン入門辺りが割と易しくてオススメだそうです。長月は読んでないのでなんとも言えません。
 長月としてはデザパタはとにかく広まって欲しい物なので是非ご一読を。

Exceptional C++ 5~8章

Filed in C/C++, prog, , 読書感想文

 あ~もう眠い、だるい、やるせない、なんかお疲れ。だから今日の感想文なし。
 ……嘘です。書きます。読んだのに書かないのなんか勿体無いですから。貧乏性です。
 今日も今日とてC++、昨日に引き続いてハーブ・サッター著Exceptional C++ 47のクイズ形式によるプログラム問題と解法 5~8章です。
 え~、まず第5章はシグニチャの自動照合、ネームスペースに関しての規則に関するあれやこれやについての問題が収録されています。
 長月はネームスペース内で宣言・定義された関数の呼び出し順序とか規則とかを知っていても理解しきれてなかった様で、初めて本章を読んだ時「おぉ!?」と思った記憶があります。言ってしまえば重箱の隅をつついたトピックなんですが、今時のC++ユーザならネームスペースは極普通に使っているでしょう。そして普通に気を使っていれば大抵の場合問題は無いはずですが、レアなケースで厄介なロジックエラーを起こす場合があります。そう言った場合、殆どのケースでは本章で書かれている様な事が起きているんじゃないかと思います。そんな事例滅多に無いよと読み飛ばさずに、一通り頭に入れておきましょう。
 第6章ではメモリ管理にまつわる問題を取り上げています。
 言ってしまえばよく見かけるトピックです。配列とポリモルフィズムは相容れないとか、メモリ管理はポインタのラッパでやろうぜとかそう言ったトピックです。ただ、取り上げているポインタのラッパクラスが auto_ptr なのが特徴的と言えば特徴的です。この手の話題では大抵の場合 auto_ptr は使えない例として少しだけ書かれて本題は参照カウントとかリンクリストとかでスマートポインタを実装する事であったりするのですが、本書ではSTLに拘っているのか auto_ptr を上手く使おうぜと言った事が書かれています。
 また、本章では operator new や operator delete の自作に関しても触れていますが、これも多くの場合に見られるちょっ速なアロケータとか空間効率の良いアロケータと言ったトピックではなく、エラーを起こさない、例外安全で例外中立なアロケータを実装すると言う安全性を重視した内容になっています。
 第7章では、よく陥る罠、落とし穴、反イディオムと言った所謂アンチパターンについての問題を扱います。
 オブジェクトの生存期間に関するトピックは割とああなるほどと思えました。でも、他のトピックはああこれどこかで読んだなと言った感じでした。流石にもう自己代入チェックとか暗黙の型変換はだめぽとか飽きてきました、だって大抵の本に書いてあるんだもん(´Д`;)
 ああ、「例外安全で例外中立な代入演算子 (或いはコピーコンストラクタ) ならば自己代入チェックは要らない、自己代入チェックのメリットは本当に自己代入が起きた時にのみ効率的なだけ」と言う主張にはへーと思いました。が、長月は何故そう言えるのかをちゃんと理解出来てない気もします。
 そして最終章の第8章です。第8章は分類しにくいトピックをいくつか扱います。なんと言うか個人的には読み物的な章でした。他の章に比べて難易度設定も低いようです。
 長月は第8章最初の問題からしてやられました。T t(); と言う記述、これだけで冷静に見れば T 型の値を返す引数をとらない関数の宣言です。しかしこれが変数の宣言・初期化のすぐ下にあったら? 長月は思わず変数の宣言 (定義) に見えました。ばっちり引っかかって誤読です。
 本章では const についても扱っています。この const、エラーとかが沢山出るとめんどくさくなって思考停止に陥るんですよね、結果 const 外すとか安易な道に走るか、良く考えずに思いついた事やってみてより大きなエラーを作りこむか、なんにしても悲惨です。そんな const の使うべき時使わざるべき時を割と丁寧に解説しています。特に「例え内部状態を変更しても外部から見た状態が変わらなければその関数は const である」は目から鱗でした。mutable の存在理由がやっと理解できました。
 そして最後のトピックである制御フローも興味深いトピックでした。自分が意図した以上に多くのパスが存在する事もあると自覚させられました。もうちょっと注意深く読んだり書いたりしなければと思わせます。
 いつもの如く駆け足なのか鈍足なのか、参考になるのかならないのか良くわからない文章ですみません。参考意見が欲しくて立ち寄って下さった方の為に書いておきます。
 本書は初心者の方にはオススメしません (内心却って初心者の内に読ませた方が良いかもとも思いますが)。しかし、貴方が少しはC++を使えると言う自覚があるのならば一見の価値ありでしょう。また、効率の良いコーディングの本は読み飽きた、安全で頑強なコードの書き方が知りたいと言う方も読んでみるべきだと思います。
 解りやすい文章が書けないのが申し訳ないと思いつつ本書についてはここまでで筆を置きます。
 ――――誰かの参考になる事を祈りつつ。


Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Oenology Post Formats
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Posts Calendar
Click to view/hide
2017年6月
« 12月    
 123
45678910
11121314151617
18192021222324
252627282930  

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
アーカイブ
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
最近の投稿
Click to view/hide