混乱するタイトルについては残念です。関数の先頭に「早く戻る」のが良いスタイル(またはより効率的)ですか?
私は最近、自分のプロジェクトでこれをやり始めました。それがより効率的かどうか、そしてそれが練習するのはひどいスタイルであるかどうか疑問に思っています。ここで
は、データベースインタフェースからの例です:
def register(self, user, pw):
"""Register user/pw into the database"""
if self.isStarted():
raise Exceptions.Started
hashed = hashlib.sha512(pw).hexdigest()
self._db_cur.execute('''INSERT INTO PLAYERS (name, password)
values (?, ?)''', [user, hashed])
self._db.commit()
私は例外を発生させることで、ここでそれを行うが、私はリターンと他の場所でそれをやりました。
これは、関数を続けて実行する代わりに、偽のケースが上部の関数を終了することを可能にし、実行するコードがもうないかどうかを確認します。
私はこれをコードで見ることはほとんどありません。これは悪い習慣ですか、それとも私が想像しているようなパフォーマンスはありませんか?明確に支援するため
、どのような私はに慣れていることである:
if (somethingTrue):
runThis()
thisToo()
x = andThis()
return x
return None
と私は何をし始め、そして上あやふや午前ました:
if (!somethingTrue):
return None
runThis()
thisToo()
x = andThis()
return x
後者は与えているようですそのように意図されたときに、コードが条件の一部ではない印象(特に4行以上の関数で)。これはまたPEP-8を遵守しているようにも見えるようになりましたので、私は本当にそれについて話しています。
私はこれが恐ろしく神聖なものを壊すと感じています。これは大丈夫ですか、または礼儀正しくありませんか?
「効率性」や「パフォーマンス」を心配する必要はありません。*どちらも得られない*。あなたとあなたのチームが一番好きなように書く。一番のことは、あなたのパターンで一貫していることです*。 –
私は、特に体の内部が長い場合、私は2番目のフォーム(早期のエラーチェックとリターン)を好む傾向があることを認めなければなりません。余分なインデントを追跡することは、心配するもう一つのことであり、コードを読むことは既にそれほど難しいです。 –