modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

初心者プログラマーが意識するだけで格段に成長するたった1つのコト

最終更新日:2023/11/23

私は仕事柄、色々な人が書いたプログラムを読む機会が多くあります。その中でベテランが書いたプログラムと初心者が書いたプログラムで大きく異なる点があると常々感じています。 多種多様なプログラムが存在しますが、皆さんは命名規則を気にしていますか?
ベテランプログラマーと初心者プログラマーのコードを比べると顕著に違いが見受けられます。 「何だよ、命名規則かよ」と思った人、「何それ美味しいの」と思った人。伸びしろがまだまだあるので、是非1分程度でさらっと読んでいってください。思っている以上に効果は絶大です。

命名規則の必要性

命名規則が大事」というのが分かるけれど、「どう書けばいいのか分からない!」というプログラマーさんが多いと思います。
まず始めに述べると、命名規則に正解はないです。 おいおい、ちょっと待てよと。大事と言っておきながら正解はないとか、どうすればいいんですか?となりますよね。分かります。 もちろん一定のルールは存在します。企業が定めているコーディングルールであったり、言語ごとにお作法となっているルールであったり。

少し乱暴かもしれませんが、ベテランでも命名規則は悩みます。というか悩まなければいけないのです。 「えっ?でもベテランさんはサクサクっと名前を付けているように見えるけど??」という意見も多いと思います。それは、単にベテランさんには命名規則のパターンが染みついているからです。全く新しい概念のクラスとか出てきたとき、どういう名前がいいのかベテランさんも考えます。

さて本題です。何故、命名規則が必要なのか。
それは人がプログラムを作るからです。コンパイラアセンブリ命名規則なんて関係ありません。人がコードを読むために命名規則が必要なのです。
そして、可読性を良くする為に「こういう風に書きましょう」という規則を設けているに過ぎないのです。
ですので命名規則なく適当な名前でもプログラムは動きます。ですが、それは独りよがりの汚いコードです。それは数ヶ月、数年後に自分でも読めないコードに陥る可能性が非常に高いです。

未来の自分でもキチンと読めて、他の人にも読みやすいコードを、美しいコードと呼びます。
そんな美しいコードを意識する最初の一歩が、命名規則です。

よくある命名規則の例

良くない例(初心者が避けるべきもの)

意味のない略語や単語の省略

   # 悪い例
   def calc(a, b):
       return a + b

意味のある変数名や関数名を使用することが重要です。

単一文字の変数

   # 悪い例
   x = 5

変数名が何を表しているのかわからないため、避けるべきです。

意味が重複する変数名

   # 悪い例
   user_name_str = "John Doe"
   user_name = "Jane Doe"

変数名には一貫性が重要です。冗長な情報を含めないように注意してください。

良い命名規則の例

意味が明確で簡潔な変数名

   # 良い例
   total_score = calculate_sum(scores)

変数や関数の名前には意味が明確で、かつ簡潔なものを選びましょう。

キャメルケースやスネークケースの統一

   # 良い例 (キャメルケース)
   calculateTotalScore()

   # 良い例 (スネークケース)
   calculate_total_score()

プロジェクト内で一貫性を保つために、キャメルケースやスネークケースなどの規則を統一しましょう。

関数やメソッドの目的を示す名前

   # 良い例
   def calculate_average(scores):
       # 各科目の得点を合計して返す
       return sum(scores)

関数やメソッドの名前は、その目的を明確に示すようにしましょう。

定数の大文字と単語の区切り

   # 良い例
   MAX_RETRY_COUNT = 3

定数は通常大文字で表記し、単語の区切りにはアンダースコアを使用します。

コメントを活用

   # 良い例
   def calculate_total_score(scores):
       # 各科目の得点を合計して返す
       return sum(scores)

上記例は簡単なのでコメントは要らないと判断できます(あくまでも例なので)。コードの理解が難しい場合や、意図が明確でない場合にはコメントを追加して説明しましょう。

悩みすぎは厳禁

命名規則が大事!という事により、何十分も悩み続ける人をたまに見かけます。はっきり言ってそれは無駄です。
クラスやメソッドの名前を付けるときに、数分かかっても悩む場合はそのクラスまたはメソッドの動きを把握できていないか、用途を理解出来ていないと判断できます。
そういう場合は、仮の名前を定めてTODOを残し、動きや用途を理解出来た段階でリファクタリングしましょう。

意外に、自分が書いたコードを説明できないという駆け出しプログラマーさんは多いです。
命名もしかりで、「何故この名前にしたの?」と尋ねてもはっきりした答えがない場合が多いです。
適切な名前を付けるには、対象となるコードを理解する。または、関連する動きの中での役割を理解する事が大事です。

大体3分悩んでもぴったりくる名前がつけられなかった場合は、後回しにするべきでしょう。

終わりに

たかが命名規則、されど命名規則。 転ばぬ先の命名規則
他人に言われなくても自然と命名規則を気にしたコーディングスタイルを身につけることができれば、開発者として一段高みに登ったといえるでしょう。