web-dev-qa-db-ja.com

pythonで長い名前に適切な変数名を選択する方法

実際の名前が長い変数の適切な名前を選択するための支援が必要です。私はpep8ドキュメントを読みましたが、そのような問題に対処することができませんでした。

very_long_variable_nameの名前をvry_lng_var_nmのような名前に変更しますか、それともそのままにしますか?ライブラリに組み込まれているpythonは非常に短い名前であることに気づきました。このケースで存在する場合は、その慣習に従いたいと思います。

あまり説明的ではない名前を付けて、その意味を説明する説明を追加できることはわかっていますが、変数の名前はどうあるべきだと思いますか。

10
Sargsyan Grigor

PEP8は短い変数名を推奨しますが、これを実現するには、適切なプログラミングの衛生状態が必要です。変数名を短くするためのアドバイスをいくつか紹介します。

変数名は完全な記述子ではありません

まず、変数名をコンテンツの完全な記述子と考えないでください。名前は、主にどこから来たのかを追跡できるように明確にする必要があり、そうして初めてコンテンツについて少し説明できます。

# This is very descriptive, but we can infer that by looking at the expression
students_with_grades_above_90 = filter(lambda s: s.grade > 90, students)

# This is short and still allows the reader to infer what the value was
good_students = filter(lambda s: s.grade > 90, students)

コメントとドキュメント文字列に詳細を入力する

変数名ではなく、何が起こっているのかを説明するには、コメントとドキュメント文字列を使用します。

# We feel we need a long variable description because the function is not documented
def get_good_students(students):
    return filter(lambda s: s.grade > 90, students)

students_with_grades_above_90 = get_good_students(students)


# If the reader is not sure about what get_good_students returns,
# their reflex should be to look at the function docstring
def get_good_students(students):
    """Return students with grade above 90"""
    return filter(lambda s: s.grade > 90, students)

# You can optionally comment here that good_students are the ones with grade > 90
good_students = get_good_students(students)

名前が具体的すぎると、コードが具体的すぎる可能性があります

関数に非常に具体的な名前が必要だと感じる場合は、関数自体が具体的すぎる可能性があります。

# Very long name because very specific behaviour
def get_students_with_grade_above_90(students):
    return filter(lambda s: s.grade > 90, students)

# Adding a level of abstraction shortens our method name here
def get_students_above(grade, students):
    return filter(lambda s: s.grade > grade, students)

# What we mean here is very clear and the code is reusable
good_students = get_students_above(90, students)

前の例で、関数の引数としてgradeを使用すると、明確さを失わずに関数名から削除できることに注意してください。

クイックルックアップのために短いスコープを保持

より短いスコープでロジックをカプセル化します。この方法では、上の数行ですばやく検索できるため、変数名にそれほど多くの詳細を指定する必要はありません。目安としては、スクロールせずに関数をIDEに収め、それを超える場合は新しい関数にロジックをカプセル化します。

# line 6
names = ['John', 'Jane']

... # Hundreds of lines of code

# line 371
# Wait what was names again?
if 'Kath' in names:
    ...

ここで、namesが何であるかを追跡できなくなりました。上にスクロールすると、さらに追跡できなくなります。これの方が良い:

# line 6
names = ['John', 'Jane']

# I encapsulate part of the logic in another function to keep scope short
x = some_function()
y = maybe_a_second_function(x)

# line 13
# Sure I can lookup names, it is right above
if 'Kath' in names:
    ...

読みやすさについて考える時間を費やす

最後に重要なことは、コードを読みやすくする方法について考える時間を費やすことです。これは、ロジックとコードの最適化について考える時間と同じくらい重要です。最良のコードは、誰もが読み取ることができるコードであり、したがって誰もが改善できます。

25