# コーディング規約 Python編 :::warning これは私が最善だと思っているもので、万人受けはしないのでそこらへんはご了承しろください ::: 基本的には[PEP8](https://pep8-ja.readthedocs.io/ja/latest/)に従う ## 適切な型定義 :::danger よくない ```python array = []; # この時点では`array`はany型となる array.append(getHogeData(fuga, piyo)) ``` ::: :::success よい ```python array: list[int] = [] array.append(getHogeData(fuga, piyo)) ``` ::: このように書くと`array`にはint型の値が配列として入ることがわかりますね 個人的にはunknown型があると便利だと思うのですが、Pythonにはないようです 困ります ## try-exceptは最小限に まず、例外(Exception)はexceptで握りつぶすべきではないです 例外はプログラムが継続して実行できなくなったときに投げるものです でも、外部のライブラリ等では何食わぬ顔で例外を投げてくるのでその場合は以下のようにしましょう :::danger よくない ```python def some_function(): try: data = some_api_request() # ここで例外が発生するかも result = some_unwrap_fn(data) # なんかめっちゃ処理 return piyo_piyo_data except: return some_error_handler() ``` ::: :::success よい ```python def some_function(): data = None try: data = some_api_request() # ここで例外が発生するかも except: data = some_error_handler() result = some_unwrap_fn(data) # なんかめっちゃ処理 return piyo_piyo_data ``` ::: try-exceptの中に入るコードは最小限にとどめましょう ## インデント インデントはスペース2つ インデントにタブを使用するとエディタや環境によって幅が変わってしまうのでスペースがよい 個人的にはスペース4つは幅がでかすぎるのでスペース2つ ## インポート 1. Python標準モジュール 2. 外部モジュール 3. 他のPythonファイル すべてモジュール名をアルファベット順に並べる 使っていないモジュールはインポートしない ## 命名規則 ### ファイル名・変数・関数 lower_snake_case - 全部小文字 - 単語間を_で区切る ### クラス UpperCamelCase - 単語の頭を大文字にする - 単語間の区切り文字はなし ### 定数 (厳密にはPythonでは定数定義はできない) UPPER_SNAKE_CASE - 全部大文字 - 単語間を_で区切る ## 改行 - インポートとそれ以外の間は2行開ける - if・for等のあとは1行開ける - class内ではメソッドのあとは1行ずつ開ける :::danger よくない ```python import os class Hoge(): def hoge(self, a: str) -> bool: if a == "a": return true else return false def fuga(): return "fuga" ``` ::: :::success よい ```python import os class Hoge(): def hoge(self, a: str) -> bool: if a == "a": return true else return false def fuga(): return "fuga" ``` :::