HEXA BLOG

就活アドバイス

HEXA BLOGその他就活アドバイス2019.3.19

命名のムズかしさ

お久しぶりです。
ブログでのニックネームが同期に不評だったため、
おかりんとうに改名させられそうになった大阪PGオカリンです。

早いものでプログラマーとして入社してからもう1年が経とうとしております。
この1年、先輩方と共にお仕事をさせていただき、様々な経験を重ねてきました。

その中で今まで特別気にしてはいなかったが、
とても大事だなと感じたことを本日は共有したいと思います。

共有したいこととはズバリ命名についてです。
命名規則ではなくもっとそれ以前の初歩的な作法にあたる部分になります。

ますはこれを見てください。

 

int   hasSwordPlayerNum;   // 剣を持っているプレイヤーの番号

 

剣を所持しているPlayerの番号を示したint型変数のようですがツッコミどころが散見されます。

まず、そのint型としての意味ですが、”Num”のせいでプレイヤーの数として捉えかねません。
コメントがあるから大丈夫かと思われるかもしれませんが、
この変数を用いてる箇所だとコメントがないため、
その意味を知るためにいちいち定義を見ないといけなくなります。
最悪、違った意味として認識したままにしてしまう可能性もあります。
ですのでキチンと意図したとおりの意味が伝わるよう命名することが大事となります。

コメントの意図に合わせるならば、プレイヤー番号ですので”playerNo”などでしょうか。
“Num”を使いたいにしても省略形はできるだけローカル変数などに留めるようにした方が、
混乱を避けられると思います。

次に変数名の構成ですが、基本的に変数名、クラス名は名詞になるようにするのが鉄則です。
上記例ですと”playerNum”を修飾する意味として”hasSword”が用いられておりますが、
先頭に来ていますので構成がおかしいことが分かります。
正しくは”playerNumHasSword”になるかと思います。

上記修正をすべて踏まえると、最終的にはplayerNoHasSwordとなります。

…と言いたいところですが、よく見ますと”No”がかなり紛らわしいことになりそうです。
番号を意味しているのですが、「剣を持っていない」と否定の意味として捉えられそうです。

となると素直にplayerNumberとするのが事故が少なくて済みそうです。

以上のように、用いる単語と文の構成によってその意味・意図が様変わりします。
ですので用いる単語と文の構成をしっかりと考えないといけません。

が、慣れてないうちは非常に難しく、私自身他者に見せた時に伝わらないこともままありました。
(余談ですが私は英語科目の単位を落としたことのあるので命名が苦手です…)

Google先生に日本語を放り込んで生成する方法もありますが…

如何せん、キチンとした文章なので変数名、関数名にそのまま使うのも難しいです。

 

 

そんな中、先輩プログラマーに教えていただいたきましたこのサイトが非常に便利です!
【codic: プログラマーのためのネーミング辞書】
https://codic.jp/

左側の入力欄に日本語で入力すると…

あら、不思議!いい感じの変数名が右側に出力されます。

単語を選択すると他に類似の単語が選べますし、
PascalCase、CamelCaseなど表記方法も切り替えられます。
codic③

 

さて、本日は命名についてお話させていただきました。
ソースコードはプログラマーにとってそれ以上ない実装物の資料となりえます。
故に読む人に対し一目で何をしているか伝えるよう記述する必要があります。
特にゲーム製作はチームでの作業であるため、多くの人が目にするものになります。

そしてプログラマーとしてゲーム業界を目指す人にとって、ソースコードは履歴書も同然です。
今後プログラマーとしてゲーム業界を目指していく人は、命名について常に意識して取り組むことをオススメします。
(そして、英語の勉強は怠らないようにしましょう…英語のドキュメントを読むのにも役立ちます!)

そして、就職活動真っただ中でもう成果物の質を上げるのも難しいという人は、
一度命名について見直してみるのもよいのではないでしょうか。
少しでも分かりやすいコードにすることで、見る側として非常に助かりますし、
適切に命名できていることはプラスに見られるかもしれません。

では、今回はこのあたりで失礼いたします。
次回ブログでまたお会いしましょう。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE