「プログラミング初心者のためのリファクタリングドリル 入門編」をお手に取っていただき、ありがとうございます。著者の初野広夢です。この本は、プログラミングを始めたばかりの方が、コードをもっと読みやすく書くための練習ができるように作りました。
リファクタリングとは、プログラムの動作は変えずに、コードを整理して読みやすくすることです。たとえば、* 同じコードを何度も書いているところをひとつの機能にまとめる。* 意味がわかりにくい数字をわかりやすい名前の変数に変える。などがリファクタリングです。
チームで開発するときは、他の人が読んで理解しやすいコードを書くことがとても大切です。この本では、C#というプログラミング言語を使って、具体的なリファクタリングの方法を50問のドリル形式で学べます。
・具体的なドリル形式で学べる:50のドリル問題を解くことで、リファクタリングの手法を実践的に身につけられます。
・C#に特化している:C#というプログラミング言語に絞って解説しているので、C#を使う現場ですぐに役立ちます。
・著者の経験が詰まっている:ゲーム開発やAIキャラクター開発の経験がある著者が、初心者の目線に立って丁寧に書いています。
私もプログラミング初心者だった頃のことを思い出しながら、詳しい解説を心がけて書きました。リファクタリングは難しく感じるかもしれません。しかし、繰り返し練習することでマスターできます。この本で一緒に練習して、ワンランク上のエンジニアを目指しましょう。
(著者 初野広夢@HiromuGamesPOPO)
私は、ゲーム開発と生成AIが大好きなUnityエンジニアです。大学1年生のときからベンチャー企業や個人で、Unityでいろいろなゲームを作ってきました。現在はモバイルゲームアプリを制作する会社で、Unityクライアントエンジニアとして活躍中です。1
この本についての質問は、X(旧:Twitter)のDMで @HiromuGamesPOPO までお気軽にどうぞ。
C#はpaiza.IO様のオンラインコンパイラで実行可能です。2
本書の内容を使った活動は、すべて読者の自己責任でお願いします。本書の内容をもとに何かを作ったり、プログラムを動かしたりするときは、自分でよく確かめてから行ってください。何か問題が起きても、著者や出版社は責任を持ちません。
この章では、あなたが書くプログラムを他の人にも簡単に理解してもらえるようにする、変数名とメソッド名の付け方を学びます。わかりやすい名前を使うと、プログラムの各部分が何をしているのかが一目でわかります。ここでは、いい名前を考えるコツを紹介します。
変数やメソッドの名前は、それが何をするのかが一目でわかるようにしましょう。名前が明確だと、コードを書くときに間違えにくくなります。誰が見ても、すぐに「このコードは何をしているんだろう?」と理解できるので、コードを共有したり、一緒に作業するときに役立ちます。逆に、名前がわかりにくいと、他の人があなたのコードを見たときに、「これは何なんだろう?」と困ってしまいます。そのため、シンプルで直感的にわかる名前をつけることは、コードを使いやすくするために重要なポイントです。
int ts; // どういう意味かよくわからない名前(totalScoreの略かもしれないけど、よくわからない)
int totalScore; // 意味のある名前(スコアの合計点数)
プログラミングでは、名前をつけるときのルールがあります。これを 「命名規則」と呼びます。よく使われる命名規則には、次のようなものがあります。
・パスカルケース(PascalCase):単語の最初の文字を大文字にします。
・キャメルケース(camelCase):最初の単語以外の単語の最初の文字を大文字にします。
・スネークケース(snake_case):単語をアンダースコア(_)でつなぎ、全部小文字で書きます。
・アッパースネークケース(UPPER_SNAKE_CASE):単語をアンダースコアでつなぎ、全部大文字で書きます。
C#では、次のような命名規則がよく使われます。
・クラス名やメソッド名:パスカルケース(PascalCase)
─例:public class MyClassName {};
・変数名:キャメルケース(camelCase)
─例:private int myVariable;
C#の命名規則については、Microsoft Learn名前付けのガイドラインがとても参考になるので、ぜひご覧ください。1
プログラムを書くとき、略語や頭字語を使うことがあります。よく知られている略語なら、他の人にも意味が伝わりやすいです。でも、あまり知られていない略語を使うと、コードが読みにくくなってしまうことがあるので気を付けましょう。
・いい例:http - ハイパーテキスト転送プロトコル(Hyper Text Transfer Protocol)の略です。多くの人が知っているので使っても問題ないでしょう。
・悪い例:usrNm - 「ユーザーネーム(UserName)」を省略したものですが、このような略し方は避けた方がいいです。
「マジックナンバー」と呼ばれるものがあります。これは、コードの中で意味がわかりにくい数字をそのまま使うことをいいます。「なんでこの数字なの?」と他の人が疑問に思ってしまうので、なるべく避けましょう。代わりに、その数字が何を意味しているのかが、わかる変数名を使うといいでしょう。そうすれば、コードが何をしているのかがはっきりして、あとで数字を変更するときも楽になります。
たとえば、こんなコードがあったとします。
if (score > 80) {
// 点数が80より高かったときの処理
}
この80が何を表しているのかは、ぱっと見ただけではわかりません。これを改善するには、次のようにします。
const int PassingScore = 80;
if (score > PassingScore) {
// 点数が合格点より高かったときの処理
}
このようにPassingScoreという変数名を使うことで、「80」が「合格点」という意味だとわかるようになり、コードが読みやすくなります。
変数の名前は、長すぎても短すぎてもいけません。ちょうどいい長さを考えることが大切です。長すぎると読みにくいコードになりますし、短すぎると何のことだかわからなくなってしまいます。そのため、名前はなるべく簡潔に、でも意味がはっきり伝わるようにしましょう。
・長すぎてダメな例:numberOfElementsInList - 長すぎると読むのが大変です。
・短すぎてダメな例:n - 短すぎると何の変数かわかりません。
・ちょうどいい例:elementCount - 短くてもしっかりと意味が伝わります。
C#のルールとして、インターフェイスには必ず「I」をつけます。「I」は「インターフェイス(Interface)」の頭文字です。これを見れば、「あ、これはインターフェイスなんだな」とすぐわかるようになっています。
public interface IShape
{
void Draw();
double Area();
}
public interface IResizable
{
void Resize(double size);
}
プログラミングの世界では、「インターフェイス」というものがあります。インターフェイスは、クラスの設計図のようなものです。インターフェイスには、クラスが持つべきメソッドの名前だけが書かれていて、その中身は書かれていません。インターフェイスを使うことで、複数のクラスに共通の機能を持たせることができます。
たとえば、「図形」というインターフェイスがあったとします。このインターフェイスには、「面積を計算する」というメソッドと、「描画する」というメソッドが定義されています。そして、「円」クラスと「四角形」クラスがこの「図形」インターフェイスを実装しているとします。すると、「円」クラスと「四角形」クラスには、必ず「面積を計算する」メソッドと「描画する」メソッドが存在することになります。
このように、インターフェイスを使うことで、共通の機能を持つクラスを作ることができるのです。C#では、インターフェイスの名前は「I」から始めるというルールがあります。
あなたは、学校の生徒の数を管理するプログラムを作っています。次の変数名をわかりやすくして、何を表しているのかはっきりさせてください。
int a = 5; // 生徒の数
生徒は英語で「student」、数は英語で「count」といいます。
101ページを参照してください。
ネットショッピングのサイトで、ユーザーの数と注文の合計金額を表す変数名が次のようになっています。C#の命名規則に合うように直してください。
private int userCount = 5;
private int OrderTotal = 100;
C#では、プライベート変数(private)はキャメルケース(camelCase)を使います。
101ページを参照してください。
会社の社員情報を管理するプログラムです。次の変数名をもっとわかりやすくして、むやみに短くしないように直してください。
string empNm = "Hanako";
社員は英語で「employee」、名前は英語で「name」といいます。
101ページを参照してください。
ゲームでプレイヤーがダメージを受ける処理が、次のようになっています。マジックナンバーを使わないで、変数を使ってわかりやすくしてください。
public void Damage(){ // ダメージを受けるメソッド
hp -= 3; // プレイヤーのHP(体力)を3減らす
}
ダメージは英語で「damage」といいます。
101ページを参照してください。
お店の商品を管理するプログラムです。次の長すぎる変数名を改善して、読みやすくしてください。
int theTotalNumberOfProductsInInventory = 150; // 在庫にある商品の数
「theTotalNumberOf」の部分が長すぎる原因になっています。数を表す別の英単語は何でしょうか。
102ページを参照してください。
ゲームのプログラムで、PlayerクラスとEnemyクラスを作りました。このふたつのクラスは、どちらもHumanインターフェイスを実装しています。しかし、インターフェイスの名前がC#のルールに合っていません。「I」をつけて直してください。
public interface Human
{
void Resize(double size);
}
C#のルールでは、インターフェイスの名前には必ず「I」をつけます。
102ページを参照してください。
この章では、プログラムを読みやすくするために、変数やメソッドの名前の付け方について学びました。最初は名前を考えるのに時間がかかるかもしれません。でも、はっきりした名前をつけることで、プログラムが何をしているのかがわかりやすくなります。とくに、他の人とプログラムを共有するときや、あとで自分が書いたプログラムを見直すときに、わかりやすい名前はとても役立ちます。
ここで紹介したポイントをまとめておきましょう。
・わかりやすい名前をつける:見ただけで意味が伝わる名前を選びましょう。そうすれば、混乱せずにプログラムの内容が理解できます。
・ルールを守る:決まったルールで名前をつけることで、プログラムの中で名前の役割がすぐわかるようになります。
・略語は慎重に:みんなが知っている略語はOKですが、わかりにくい略語は混乱のもとになるので避けましょう。
・マジックナンバーは使わない:数字をそのまま書くのではなく、その数字が何を意味しているのかが、わかる名前をつけましょう。
・名前の長さはほどほどに:長すぎても短すぎても望ましくありません。ちょうどいい長さで、意味がきちんと伝わる名前を考えましょう。
・インターフェイスは「I」で始める: C# では、インターフェイスの名前の最初には必ず「I」をつけます。これを見れば「インターフェイスだな」とすぐわかります。
これらのコツを意識すれば、あなたのプログラムはもっとわかりやすくて、読みやすくなります。つよいプログラマーになるために、基本となる変数とメソッドの名前の付け方でした。次の章も一緒に勉強していきましょう。