TIL - EAFP, LBYL
事件の発展
最初は、長期的なValidatorをスムーズに作成するときです.いろいろ条件文を表装してJsonResponseに返しましたが、try-これなら書く必要はないと思い、Googleで
django if or try
という検索キーワードを検索しました.後にスタックオーバーフローでEAFP、LBYLについての話を見ました.Looks Good To Meと知り合ったばかりの頃と同じような不思議を感じ、簡単に整理したいと思います.
EAFP
EAFPは「歯で歯を返す」の略で、「許しを請うのは許すより簡単だ」という意味です.
なぜか、バイク/UFOを買いたい韓国の有婦の夫の表現(いらない…?)
しかし、これは符号化スタイルであり、Pythonが推奨する(PEP 463)方式である.
EAFPは、いずれの操作を実行する前に、すべての操作の条件が正常であると仮定し、エラーが発生した場合に処理する.
try:
min_value = data['min']
except KeyError:
return "No Key 'min'"
try-exception文と同様に、コードは簡潔で直感的です.このスタイルは、C、Javaなど他の言語でよく使われるLBYLとは逆です.
LBYL
LBYLは「Look BeforeYouLeap」の略で、「石橋も叩いて渡る」という俗語と一脈相通じる意味がある.つまり、いかなる行動をとる前に、すべての条件を確認して実行しなければならない.
このスタイルは主に複数の言語で使用されます.コードを表示すると、よく知っているかもしれません.
if 'min' in data:
min_value = data['min']
else:
return "No Key 'min'"
に示すように、if-elif(elseif)-else文を特徴とし、呼び出し、クエリーなどの操作の前に様々な条件をチェックして実行します.EAFP vs LBYL
LBYLの場合、事前にすべての状況をコントロールすることができ、これは安全そうに見えますが、そうではありませんので、PythonはEAFPを使用することをお勧めします.
例えば、LBYLの使用はリスクをもたらす可能性があります.
if key in mapping:
return mapping[key]
同じハーモニーがあると考えてみてください.条件文は、キーがオブジェクト上にあるかどうかをチェックし、ラベル記号を使用してキーの値にアクセスしています.マルチスレッド環境で非同期の場合、条件文を通過した後、キーの値が削除される可能性があるため、コードは失敗する可能性のあるコードです.このような事態を防ぐために、Pythonはまず行動し、例外のEAFPを処理することを提案した.
Reference
この問題について(TIL - EAFP, LBYL), 我々は、より多くの情報をここで見つけました https://velog.io/@eslerkang/TIL-EAFP-LBYLテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol