More Related Content
KEY
PDF
PDF
名著『リーダブルコード』を解説者と一緒に読み解こう - 7章 制御フローを読みやすくする PPTX
PDF
PDF
PDF
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう PDF
What's hot
PPTX
PPTX
PDF
PPT
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」 PDF
PDF
PPTX
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答 PPT
PPTX
PDF
Mobile programming seigyokoubun PPTX
PDF
PPTX
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック PDF
PPTX
PDF
PDF
PDF
Viewers also liked
PPTX
PPTX
Fluentd勉強会 (導入編 TreasureData活用) PPTX
PPTX
仮想マシンとVagrant + Vagrant 1.5 PPTX
Ipros techmeetup 20131218_scala_handson PDF
Fluentd introduction at ipros PDF
戦国時代を生きた「黒田官兵衛」とWeb時代を生きる「エンジニア」 PPTX
インフラエンジニアLv1がWordPressまわりに色々してみた話 PDF
PDF
PPTX
PPTX
PPTX
PPTX
Fluentd+elasticsearch+kibana(fluentd編) PDF
PDF
PDF
PDF
Presto As A Service - Treasure DataでのPresto運用事例 PPTX
PDF
Re:dash Use Cases at iPROS Similar to リーダブルコード 1.0'
PDF
PDF
わかるコードを書くために For writing clean code PPTX
PDF
PDF
PDF
2018年度 若手技術者向け講座 リファクタリング PDF
リーンなコードを書こう:実践的なオブジェクト指向設計 PDF
KEY
Clojure programming-chapter-2 PDF
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング KEY
PDF
PDF
PPTX
PDF
ソースコードの品質向上のための効果的で効率的なコードレビュー PPTX
可読性について リーダブルコード Part2(ループとロジックの単純化) PDF
PPTX
可読性について リーダブルコード Part3(コードの再構築) PDF
リーダブルコード 1.0'
- 1.
- 2.
出典
リーダブルコード– より良いコードを書く
ためのシンプルで実践的なテクニック
Amazonでは★4.5の好評価!
★★★★★ 初級者にも上級者にもおすすめ
★★★★★ スラスラ読める実践的なコーディング指針
★★★★★ 優れたコードを書く切欠を与えてくれる本
- 3.
- 4.
- 5.
- 6.
- 7.
スパゲティコードじゃないけど
• どちらの方が読みやすいですか?
if ((bucket = findBucket(key) ) || !backet.isOccupied()) {
}
bucket = findBucket(key);
if (bucket != null) {
assert(!bucket.isOccupied);
}
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
• 変数名、関数名は機能が一目瞭然でわかるものにす
る
– StartPage()
• Startは便利な単語だが、汎用的すぎて具体的ではない。作るの
か?始めるのか?開くのか?わかりにくい
• 代替案
– CreatePage, beginPage, openPage
• 他にもないか考えてみよう
– Send, find, make, get, set …
命名1
- 16.
命名2
• tmpやretvalなどの汎用的な名前は避ける
– 何をやっているか一目瞭然ではない
• 抽象的な名前より具体的な名前を使う
– 「サーバー開始」より、サーバーのどの機能を開始するかを明示した方が
良い
• 名前に情報を追加する
– 時間でミリ秒を返すなら、begin_msのようにミリ秒を表す言葉を追加す
るとベター
- 17.
命名3
• 誤解されない明確な名前
– 他の意味と間違えられることはないだろうか?
• 限界値を求める場合、MAX, MINなどを頭につける
– MAX_VERTICAL_LENGTH、MIN_HORIZON_LENGTH
• 範囲を指定する場合first, lastなど使う
• 限定的な範囲だとbegin, endあたりも良い
• get*()はメンバの値を返すだけの軽量な関数である。あまり色々な処理をす
る関数の名前にふさわしくない。
最善の名前とは、誤解されない名前である。つまり、あなたのコードを読んで
いる人が、君の意図を正しく理解できるということだ
- 18.
カラフルな単語を探してみよう
• send→ deliver, dispatch(発送する), announce,
distribute(分配する), route
• find → search, extract, locate, recover
• start → launch, create, begin, open
• make → create, setup, build, generate(~を生む),
compose, add, new…
- 19.
- 20.
- 21.
• booleanの変数やメソッド名
•if (user.auth()) {
• // 著者は・・何してる?
• }
• if (user.hasAuthority()) {
• // is, has, canを頭につけると途端にわかりやすくなる
• }
- 22.
- 23.
コメント1
• コードを見てすぐわかることをコメントに書かない。
– setProfit(int profit) // profitに新しい値を設定する
• 価値の無いコメントを書かない
// 与えられたsubtreeに含まれるnameとdepthに合致したNodeを見つける
findNodeInSubtree(Node subtree, String name, int depth);
- 24.
コメント2
• 読み手を意識して伝える
– 嵌りそうな罠、ここは紛らわしいので注意!とか
– 質問されそうなことを書いておく
– コードの欠陥にコメントをつける
• // TODO: あとで手をつける
• // FIXME: 既知の不具合があるコード
• // HACK: あまり綺麗じゃない解決策
• // XXX 危険!大きな問題がある
- 25.
コメント3
• 曖昧な代名詞を避ける。
– 「これを」、「それを」等の表現は避ける
「データを」、「キャッシュを」・・・具体的に
• 歯切れの悪い文章を磨く
// 広告の使用に応じて優先度を変える
⇓
// 広告の使用頻度によって優先度を上げる
- 26.
// このシステムは日本国内に限られているので
//電話番号で国番号を入力する必要はない
または、実例で補足する
/**
** 平成和暦日付文字列を解析してDateとして返却する
** 例:
** 平成24年10月31日はOK
** H24.10.31はOK
** H24.1月2日はNG
*/
- 27.
- 28.
少しおさらい
• 高レベル言語とは?
• 高級言語とは、プログラミング言語のうち、より自然語に近く、人間にとって理解しやす
い構文や概念を持った言語の総称である。
• 高級言語は、主に英単語や記号などを組み合わせて命令を記述し、コンパイラやイン
タープリタなどで機械語に変換され、実行される。より機械語に近い言語で記述を行
う低級言語(低水準言語)と比べて、言語の理解がしやすく、また汎用性が高いと
いう利点がある。
- IT用語辞典BINARYより抜粋
- 29.
- 30.
制御フロー1
• 条件式の並び順
– 変化する方を左、固定値を右に配置する
if (10 < length) // こちらより
if (length > 10) // こちらの方が読みやすい
- 31.
制御フロー2
• if/elseブロックの並び順
– 条件は否定形より、肯定形を使う
• if (!debug)ではなく、if (debug)を(なるべく)使う
– 関心を引く条件や目立つ条件を先に書く
• 条件に応じて、否定を先に書くこともある
- 32.
制御フロー3
• ネストを浅くする
if (条件1) {
// 処理1
if (条件4){
// 処理4
} else {
// 処理5
if (条件5) {
// 処理6
if (条件6){
// 処理7
if(条件7) {
// 処理9
} else {
// 処理10
if(条件8) {
// 処理11
} else {
// 処理12
}
}
}
} else {
// 処理8
}
}
}
} else if (条件2) {
//処理2
if(条件2) {
// 処理3
}
}
・・・これは以前の現場で私が出会ったコードです。
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
「「A かつB である」なん
てことはない」
とは、
「AでないかB でない」
と同じ意味になる、という
法則。
• if (!(A && B) == !A || !B) {
}
• if (!(A || B) == !A && !B) {
}
「ド・モルガンの法則」とは、AND演算とOR演
算を相互に変換するものです。以上のように、
左辺のAND演算を右辺のOR演算に変換し
たり、左辺のOR演算を右辺のAND演算に変
換します。ド・モルガンの法則に相当するものは、
四則演算にはありません。論理演算ならではの
法則なのです。
ド・モルガンの法則
- 40.
処理の分割と構成3
• 巨大になってしまった処理
– 条件式で条件内に処理を詰め込みたい場合は、説明変数
やマクロに代入し、それを比較するほうが読みやすくなる。
• コピペミス・タイプミスを減らせる
• 横幅が狭くなるので、コードが読みやすくなる
※ しかしマクロの多用は読みにくくなる恐れもある!
ケースバイケースで使うべき
- 41.
- 42.
- 43.
- 44.
- 45.
出典
リーダブルコード– より良いコードを書く
ためのシンプルで実践的なテクニック
Amazonでは★4.5の好評価!
★★★★★ 初級者にも上級者にもおすすめ
★★★★★ スラスラ読める実践的なコーディング指針
★★★★★ 優れたコードを書く切欠を与えてくれる本
- 46.
Editor's Notes
- #16 Resultは汎用的な名前で便利であるが、
全く情報がない、もう少し踏み込んで意味があるものにしていきましょう
- #17 startSever()より、openPort()
sec, min