アイスランドクローネ日記帳

音楽のこと、旅行のこと、ふと思ったこと、全く思っていないこと等を書きます。

リーダブルコード [D.Boswell, T.Foucher(著), 角征典(訳)] (オライリージャパン)

読みやすいコードを書きましょうという本です。楽譜の表紙がいいです。


割と有名なタイトルな気がしたので期待して読んだのですが、ちょっとイマイチでした。
最初から最後まで「まぁそうだよな」という感じで終わってしまいました。感度が低すぎるのかもしれない。
教科書的かつ基本的な気をつけるべきことが丁寧に書いてあります。
まぁそういう基本的なことも実際には全然できていないのでとてもいい反省の機会になりました。
「分かってるけどできてない」ことばかりです。それは本当は分かってないということなのかもしれない。

引数やローカル変数の名前に単位やフォーマットを付けるかどうかは今までも迷うことがありましたが、
この本は「付ける派」でした。あんまりつけすぎるとゴチャゴチャするので迷います。

単なるゲッターじゃない取得関数にGetを付けない方がいいのは実感としてありますが、じゃあどうするかが難しいですよね。
Calculateとかよく使っていたけど、そうすると戻り値が本当に取得したい値なのかがはっきりしないんですよね。
あと、Get以外だと何かメンバ変数とかに副作用がありそうにも見えます。
まぁコメントとかで書けばいいわけですが。
あと、リファクタリングやチューニングで専用のメンバ変数をあとから追加して
結局ただのゲッターになったりするので、最初からGetにしておいた方が融通が効くというのもあります。

タブとスペースで縦の線を揃えるのは個人的には好きなのでやりますが、結構人それぞれですよね。
この本は「やる派」なので勇気づけられました。

「関数名をそのままコメントにしても意味ない」という指摘がありますが、
これは英語圏の人の発想かもしれないですね。
関数名をただ訳しただけでも日本語コメントあると読みやすいです。個人的には。

「~かもしれない」とか「~の方が本当はいいだろう」とか「TODO:」とか、
そういうコメントは言い訳っぽくなるので悪だと思ってましたが、この本は推進派でした。
あんまり好きではないです。

コメントで代名詞を避けるのは同感です。
日本語の場合は主語や目的語を省略するのも自分で読み返したときにイライラします。

名前付き引数コメントはよさそうですね。
C++でboolを渡すときにどう呼び出してるのか分かりづらいとは常々思っていたので。
でもパラメータ名が変わってもコンパイラが引っ掛けてくれないのがちょっと気になります。
呼び出す前の行に日本語で意味を1行書くというベタな方法が結局いい気もする。
まぁ引数の意味がドラスティックに変わってしまったらそもそも大変なことになるので、
引数名がちょっと変わったくらいでコメントをメンテしなおす必要もないのかもしれないけど。

ヨーダ記法という名前は知りませんでしたが、左辺に定数を置くこの書き方は好きではないので本と同じ意見でよかったです。

returnを上の方で使うのは確かにネストも浅くなっていいんですが、
共通フローを追う時に関数の最後を見ると見過ごしやすいのでちょっと迷います。
最後の共通処理を行う機構としてC++のデストラクタを挙げるのはやや無理があるように思います。

制御フロー変数は分かりやすいと思うんですがダメ出しされていました。
for文の中に重い処理を書くよりは制御フロー変数でfor文を抜けた後にやった方が読みやすい気がするんだけどな。

メンバ変数はクラスの中でミニグローバルだという指摘は全くその通りで増えすぎると碌なことがないので、
private関数の引数でうまくやれるようにしたいです。

イミュータブルにすると見通しがよくなるのも実感としてはすごくありますが、
なかなかうまく使えないのでもう一押しヒントがほしかったです。

関数の抽出、分離についてはそのまんまなのであまり悩むところはなかったです。

テストは新しいテストケースを作りたくなるようにインターフェースを整えるのも大事ですが、
あんまり早い段階でやると実装が変わったときにテストの変更が大変なので悩みます。
テストケースはある程度コピペも仕方ない気がしてしまいます。
でもぐちゃぐちゃなテストケースの集まりも悲惨なので迷います。

なんだか批判的な話やもやもやした話ばかりになってしまいました。
「まぁそうだよな」ということばかりだったと最初に書いておいてこのありさまです。
一見いかにも教科書的で普通の内容に見えても、やっぱり答えのない世界なので
引っかかるところはそれなりにあるんだということが分かりました(笑)。

  1. 2017/03/20(月) 22:38:49|
  2. | トラックバック:0
  3. | コメント:0
<<華氏451度 [レイ・ブラッドベリ(著)、宇野利泰(訳)] (早川書房) | ホーム | グラフ理論入門 基本とアルゴリズム[宮崎修一(著)] (森北出版)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://myumbrella.blog42.fc2.com/tb.php/359-694f0729
この記事にトラックバックする(FC2ブログユーザー)