非常に読みやすい本で、ほとんど理解できた思います(多分)が、今すぐ書かれていること全てを実践に活かすほど自分の知識として定着していないと思います。時間をおいて何回か読み直し、少しずつでも本書で紹介されているようなコードが書けるようになることを目標としたいと思います。
読みながら疑問に思ったのは、p107の「8.7 式を簡潔にするもう1つの創造的な方法」で紹介されているマクロを使うところです。今まで##を使ったことがなくて、以下のように書かれていた部分がどうもしっくりこなかったので実際に試してみました。
p107.cpp
void AddStats(const Stats& add_from, Stats* add_to) { #define ADD_FIELD(field) add_to->set_##field(add_from.field() + add_to->field()) ADD_FIELD(total_memory); ADD_FIELD(free_memory); ADD_FIELD(swap_memory); ADD_FIELD(status_string); ADD_FIELD(num_processes); // ... #undef ADD_FIELD }
上記は以下のように正しく置き換えられています。試しにadd_from.##field()、add_to->##field()と書き換えるとエラーが出力されます。なぜadd_to->set_##fieldのところだけ##が必要なんでしょうか。
$ gcc -E p107.cpp # 1 "p107.cpp" # 1 "<built-in>" # 1 "<command-line>" # 1 "p107.cpp" void AddStats(const Stats& add_from, Stats* add_to) { add_to->set_total_memory(add_from.total_memory() + add_to->total_memory()); add_to->set_free_memory(add_from.free_memory() + add_to->free_memory()); add_to->set_swap_memory(add_from.swap_memory() + add_to->swap_memory()); add_to->set_status_string(add_from.status_string() + add_to->status_string()); add_to->set_num_processes(add_from.num_processes() + add_to->num_processes()); }
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (119件) を見る