リーダブルコード(書籍:勉強メモ :2023/10/22)
◆基本情報
発行:2012年6月22日 初版発行
著者:ダスティン・ボズウェル/トレバー・フォシェ
訳者:角 征典(かど まさのり)
発行所:株式会社オライリー・ジャパン
◆はじめに
これは本物の名著。これを引用・解説したような書籍は何冊か読んでいるけど、そもそも原書を読んでなかったので借りて読んでみました。
文頭に#がある行は所感とか思った事です。
◆メソッド・関数・変数
・「簡潔」と「安心」は違う。
コードが圧縮されていて「簡潔」に短く書かれていても難読なコードと
インデントや改行が入って見やすいコードは「安心」できるコード
どちらを大切にするか(片方だけではなくバランスが必要!!)
カッコよく見えるコードじゃなくて理解しやすいコードが良いコードだと私も思う。
・ループイテレーター(i,j,k...)を複数入れ子にする時、意味があるなら名称と付ける
club_i , members_i , users_i ( ci , mi , ui など略すのもあり)
・スコープが小さければ短い名前でもいい
・複数行を繰り返すようなコードはメソッドにして隠ぺいする事でインデントが揃って見やすいコードになる
◆コメントについて
・コメントするべきでは「ない」ことを知る
・コードからすぐに読み取れることをコメントに書かない
・自分の考えを記録する
#なぜ、このようなコードにしたのか?ということ??
・定数にコメントをつける
・要約コメント、全体像をコメントにするのはいい考え
・読み手のためにコメントを書く
・コードの意図を書く
◆条件式とループ
・ループ条件は 左側が変化する、右側があまり変化しない にする。
・ループ判定は最初に行う(do/whileは後判定のためコードを2回読まないといけなくなる)
・条件分岐は否定形よりも肯定系を使う。 if(!debug) ではなく if(debug) にする。但し、状況により変える事はある。
・条件分岐は「単純な条件」か「関心を引く条件」から書く
・三項演算子は簡潔に読みやすい時だけ使うようにする。
◆制御フロー
・関数の return true/false は早期リターンする。
・ネストを浅くする(早期リターンして条件分岐を並べるのもアリ)
if ( re == SUCCESS ) {
if( be == SUCCESS ){
} else {
}
}
↓↓↓↓↓↓↓
if ( re != SUCCESS ) {
return false;
}
if ( be != SUCCESS ) {
return false;
}
else処理
・ループの中でも条件分岐のネストは浅くする(continueを使う)
◆式の分轄
・説明変数を使って分轄する(IF文の条件を変数に一度受ける)
・要約変数を使って分轄する(true/falseを変数に一度受ける)
◆変数
・コードが読みやすくならない変数は削除する
now = datetime.detatimie.now()
root_message.last_view_time = now
→ 役に立たない一時変数
※複雑な式を分轄していない、より明確になっていない、重複コードの削除になっていない
・変数のスコープは狭めた方がいい
◆コードの再構成
・ループ内のコードは事を同時に扱っている事が多い。
・1度に1つのことをやるようにする。タスクは小さく作る。関数化(メソッド化)していく。
・但し、小さな関数を作り過ぎると処理があっちこっちに飛び過ぎて逆に読みにくくなる
・プロジェクトから切り離されている汎用コードとプロジェクト固有コードを分離する。
・コードは小さく軽量を維持する。
・未使用のコードは削除する。
◆テストコード
・テストは読みやすくする(ベタ書きよりもヘルパー関数を作る)
・テストの目的を最小のコードにまとめる。
・エラーメッセージは読みやすくする
・完璧な入力値を1つ作るのではなく、小さなテストを複数作る。
・テストの機能に名前を付ける(関数名・メソッド名)長くて変な名前になるのは怖がらない。
◆最後に
オライリーって聞くと読みづらいイメージしかなかったけど最近は違うみたいでしょうか。思ったより読みやすかったです。
通説的に知っている事や常識的な事もあるけどコードのスタイルをブラッシュアップするのにかなり参考になる点が多数ありました。
この記事が気に入ったらサポートをしてみませんか?