Published on

コーディング規約

Authors
  • avatar
    Name
    Kikusan
    Twitter

Refs

コーディング規約

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以下。
  • リファクタリングをためらわない。
  • 名前空間の汚染を避けること。

コードレビュー

  1. バグがないか
  2. 共通するコードはブロック化できないか
  3. 無駄なコードはないか
  4. 命名は適切か
  5. コメントが適切か、第三者が理解できるか
  6. フォーマット、規約に問題がないか
  7. パフォーマンスに問題はないか
  8. 型のチェック、例外処理等エラーハンドリングがしっかりとできているか
  9. 利用ライブラリが古い、非推奨でないか
  10. もう少し適切、効率的なコードの書き方はないか
  11. セキュリティ上の問題がないか
  12. 単体テストを実施しやすいコードになっているか(関数は長すぎないか)

レビューは相手のモチベを下げやすいので、気持ちを考えつつ、論理的に行う。

SOLIDの原則

オブジェクト指向プログラミングの原則

  1. 単一責任の原則
    • 全てのモジュールとクラスは1つの役割を提供すること
  2. 解放閉鎖の原則
    • すべてのソフトウェア部品は拡張が容易で、修正は行わないようにする
  3. リスコフの置換原則
    • サブクラスはそのスーパークラスの代用ができなければならない
  4. インタフェース分離の原則
    • インタフェース上のメソッドは必要最小限にし、クラスに必要な機能は新しいインタフェースの継承で実装する
  5. 依存性逆転の原則
    • 上位モジュールは下位モジュールに依存してはならず、抽象に依存する
      (インタフェースを利用した実装をすることで、機能追加が容易になる)

KISSの原則 YAGNIの原則

Keep it simple stupid. シンプルにしておけバカ!
You ain't gonna need it. それはきっと必要にならない。

機能を増やしたり余計な拡張性を入れると、大体は意味ないしない方が生産性が高い。

DRYの原則

don't repeat yourself. 同じことは繰り返すな。