ariyasacca

カテゴリ一覧

Biz | SF | Software | tDiary | Web | ゲーム | サバティカル | スポーツ | ミステリ | メタル | 健康 | 投資 | 携帯 | 時事ネタ | 死生観 | 資格 | 雑記
2004|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

2012-07-29 (日) [長年日記]

[雑記]『リーダブルコード――より良いコードを書くためのシンプルで実践的なテクニック』読んだ

運の良かったことに、読もうと決めた時にたまたまAmazonで在庫があったため、ポチってすぐに入手出来た。届いたのは初版第2刷。今はもっと増刷かかっているのでは。

所感

  • 分量としては程よくまとまっている。200ページちょっとで、集中して読めば3~4時間で読み切れるのが嬉しい。
  • 取り扱われている言語はC++/Java/Python/JavaScriptといったところ。
  • 他人だけでなく「6ヶ月後の自分」が読み返してもコードの意図を汲み取り易くするための工夫がまとめられた本である。
    • コードを書く現場に居る人なら読んだ方が良い。
    • コードを書かない現場に居るSE屋さんのような人は買っても無駄だから、他にもっと適した本を探した方が良い。提案とか見積もりのテクニック的な。
    • 本書巻末の書評がそのままオンラインで読めるので、これを読んで買うかどうか決めるのも良いと思う。
  • 経験のあるプログラマなら「こんなこと俺はとっくにやってるよ!」という内容もあるかも知れないが、「やっているだけ」と、「やっていることを簡潔に言語化して他人に伝えられる」ことの間には大変な差がある。デザパタでも一緒だよね。本書の凄味はここにある。
    • 定数定義の近くにコメントを入れておく、関数の早い段階でreturnしてネストを浅くする、これくらいの工夫は皆やってるけど、工夫の意図を他人に伝えようとすると長文になりがちで案外難しいよね?(少なくとも僕は難しい)
  • 本文とは関係無いのだけど挿絵がいちいち面白くて、中でも次に挙げる2つの扉絵には思わず笑ってしまった。
    • 「3章:誤解されない名前」
    • 「7章:制御フローを読みやすくする」

読者対象の広い本だと感じました。面白かったです。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)(Dustin Boswell/Trevor Foucher/角 征典)

早速取り入れようと思ったこと

著名なライブラリで時々見かけるテクニックで、本書では"「名前付き引数」コメント"というカタログ名が付けられている。本文中ではC++での利用例が載っているのだけど、自分の理解を深めるために別の言語で噛み砕いて考えてみる。

例えばJavaScriptで関数設計に失敗して、呼び出す時の引数順序を他人が読んでもサッパリ伝わらない、というシチュエーション。

function connect(timeout, use_encryption, callback) {
}

// 呼び出し部分だけ読んでもサッパリ分からない
connect(10, true, function() {});

ベストは失敗した設計の引数も受け付けつつ、辞書やオブジェクトといったキーと値のペアで呼べるようにすることなんだろうけど、この手のリファクタリングは引数チェックに防御的なコードが増えたり、テストケースを書き足さなきゃいけないことが多い。

function connect(timeout, use_encryption, callback) {
    // 次のような呼び出し方法もサポートさせる
    // connect({timeout: 10, use_encryption: true, callback: function() {});
    if (arguments.length === 1 && typeof arguments[0] === "object") {
        // 従来の実装を通るよう、さらに多くのチェック
    }

    // 従来の実装
}

そこでPythonの「名前付き引数」風のコメントで、手っ取り早い改善をして最低限の読みやすさを確保しようというのが、このテクニック。

// Pythonの connect(timeout=10, use_encryption=True, callback=lamda: pass) を模倣
connect(/* timeout_ms = */10, /* use_encryption = */true, /* callback = */function() {});

「仮引数timeoutの命名に失敗している部分は、先にコメント側で単位付きのtimeout_msって名前に直してしまおうぜ!」という指摘にも目から鱗で、この工夫は早速パクりたいと思った。

コメントの改善っていうのは、修正の影響でコンパイルがコケるリスクも無いし、真っ先に手を付けたいなぁ。


最近のツッコミ

  1. ウルトラマン (2019-04-18(木)19:22)「声優代節約の為やぞ」
  2. ああああ (2019-03-28(木)15:19)「バージョンは好きにしていいのか。 」
  3. 雷悶 (2019-01-06(日)09:46)「時代はProっしょ~」

参号館  の中の  日記(ariyasacca)

トップ «前の日記(2012-07-18 (水)) 最新 次の日記(2012-08-09 (木))» 編集