- Published on
コーディング規約
- Authors
- Name
- Kikusan
Refs
- Python デザインパターンマスター講座
- リーダブルコード
コーディング規約
pythonでimport thisをするとpythonの禅を見ることができる。
pythonに限ったことではなく、すべてのコードで言えることが書いてある。
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
# 醜いより美しいほうがいい。
Explicit is better than implicit.
# 暗示するより明示するほうがいい。
Simple is better than complex.
# 複雑であるよりは平易であるほうがいい。
Complex is better than complicated.
# それでも、込み入っているよりは複雑であるほうがまし。
Flat is better than nested.
# ネストは浅いほうがいい。
Sparse is better than dense.
# 密集しているよりは隙間があるほうがいい。
Readability counts.
# 読みやすいことは善である。
Special cases aren't special enough to break the rules.
# 特殊であることはルールを破る理由にならない。
Although practicality beats purity.
# しかし、実用性を求めると純粋さが失われることがある。
Errors should never pass silently.
# エラーは隠すな、無視するな。
Unless explicitly silenced.
# ただし、わざと隠されているのなら見逃せ。
In the face of ambiguity, refuse the temptation to guess.
# 曖昧なものに出逢ったら、その意味を適当に推測してはいけない。
There should be one-- and preferably only one --obvious way to do it.
# 何かいいやり方があるはずだ。誰が見ても明らかな、たったひとつのやり方が。
Although that way may not be obvious at first unless you're Dutch.
# そのやり方は一目見ただけではわかりにくいかもしれない。オランダ人にだけわかりやすいなんてこともあるかもしれない。
Now is better than never.
# ずっとやらないでいるよりは、今やれ。
Although never is often better than *right* now.
# でも、今"すぐ"にやるよりはやらないほうがマシなことが多い。
If the implementation is hard to explain, it's a bad idea.
# コードの内容を説明するのが難しいのなら、それは悪い実装である。
If the implementation is easy to explain, it may be a good idea.
# コードの内容を容易に説明できるのなら、おそらくそれはよい実装である。
Namespaces are one honking great idea -- let's do more of those!
# 名前空間は優れたアイデアであるため、積極的に利用すべきである。
具体的にいうと、
- レイアウトに一貫性を持たせる。
- 似ているコードはまとめてブロックにする。
- 命名は意味が明確になるように、意味を持つように。規約は言語に従う。
- コードはシンプルに。 同じ実装でも可読性が高いコードを追及する。
- ネストは3以下。
- リファクタリングをためらわない。
- 名前空間の汚染を避けること。
コードレビュー
- バグがないか
- 共通するコードはブロック化できないか
- 無駄なコードはないか
- 命名は適切か
- コメントが適切か、第三者が理解できるか
- フォーマット、規約に問題がないか
- パフォーマンスに問題はないか
- 型のチェック、例外処理等エラーハンドリングがしっかりとできているか
- 利用ライブラリが古い、非推奨でないか
- もう少し適切、効率的なコードの書き方はないか
- セキュリティ上の問題がないか
- 単体テストを実施しやすいコードになっているか(関数は長すぎないか)
レビューは相手のモチベを下げやすいので、気持ちを考えつつ、論理的に行う。
SOLIDの原則
オブジェクト指向プログラミングの原則
- 単一責任の原則
- 全てのモジュールとクラスは1つの役割を提供すること
- 解放閉鎖の原則
- すべてのソフトウェア部品は拡張が容易で、修正は行わないようにする
- リスコフの置換原則
- サブクラスはそのスーパークラスの代用ができなければならない
- インタフェース分離の原則
- インタフェース上のメソッドは必要最小限にし、クラスに必要な機能は新しいインタフェースの継承で実装する
- 依存性逆転の原則
- 上位モジュールは下位モジュールに依存してはならず、抽象に依存する
(インタフェースを利用した実装をすることで、機能追加が容易になる)
- 上位モジュールは下位モジュールに依存してはならず、抽象に依存する
KISSの原則 YAGNIの原則
Keep it simple stupid. シンプルにしておけバカ!
You ain't gonna need it. それはきっと必要にならない。
機能を増やしたり余計な拡張性を入れると、大体は意味ないしない方が生産性が高い。
DRYの原則
don't repeat yourself. 同じことは繰り返すな。