目次

はじめに
リファクタリングって何?
この本のいいところ
お問い合わせ先
実行環境
免責事項
第1章 コードを読みやすくする方法 - 変数とメソッドの名前の付け方
1.1 はじめに
1.2 わかりやすい名前をつける
1.3 名前のつけ方のルール
1.4 略語と頭字語の使い方
1.5 数字だけで意味を表さない
1.6 名前の長さはほどほどに
1.7 「I」は「インターフェイス」の印
1.8 ドリル問題
1.9 この章のまとめ
第2章 コードをわかりやすくする方法:重複をなくす
2.1 はじめに
2.2 DRY原則とは
2.3 メソッドに処理をまとめる
2.4 クラスに情報をまとめる
2.5 if文の抽出とその重要性について
2.6 ループの抽出と効果
2.7 ドリル問題
2.8 まとめ
第3章 コードの再利用 - 継承とポリモーフィズム
3.1 はじめに
3.2 継承の基本: クラス構造の再利用
3.3 スーパークラスとサブクラスの設計のポイント
3.4 ポリモーフィズムと動的バインディングの活用
3.5 コンポジションと継承の適切な使い分け
3.6 Liskovの置換原則の適用
3.7 ドリル問題
第4章 コード効率化 - パフォーマンス向上のための基本
4.1 はじめに
4.2 不要な処理の削減
4.3 ループの効果的な活用
4.4 データ構造の適切な選択と活用
4.5 メモリー管理とリソースの最適化
4.6 アルゴリズムの選び方とその影響
4.7 ドリル問題
4.8 章のまとめ
第5章 コードをクリアに保つ - コメントとフォーマット
5.1 はじめに
5.2 コメントの効果的な使い方と注意点
5.3 コードを整えることの大切さ
5.4 インデントとスペースの使い方
5.5 コードを区切るコツ
5.6 コードレビューの準備のポイント
5.7 ドリル問題
5.8 章のまとめ
第6章 ドリルの正答
6.1 コードを読みやすく: 変数とメソッドの命名の工夫
6.2 コードをわかりやすく: 重複の排除
6.3 コードの再利用 - 継承とポリモーフィズム
6.4 コードの効率化 - パフォーマンス改善の基礎
6.5 コードをクリアに保つ - コメントとフォーマット
第6章 おわりに

はじめに

 「プログラミング初心者のためのリファクタリングドリル 入門編」をお手に取っていただき、ありがとうございます。著者の初野広夢です。この本は、プログラミングを始めたばかりの方が、コードをもっと読みやすく書くための練習ができるように作りました。

リファクタリングって何?

 リファクタリングとは、プログラムの動作は変えずに、コードを整理して読みやすくすることです。たとえば、* 同じコードを何度も書いているところをひとつの機能にまとめる。* 意味がわかりにくい数字をわかりやすい名前の変数に変える。などがリファクタリングです。

 チームで開発するときは、他の人が読んで理解しやすいコードを書くことがとても大切です。この本では、C#というプログラミング言語を使って、具体的なリファクタリングの方法を50問のドリル形式で学べます。

この本のいいところ

 ・具体的なドリル形式で学べる:50のドリル問題を解くことで、リファクタリングの手法を実践的に身につけられます。

 ・C#に特化している:C#というプログラミング言語に絞って解説しているので、C#を使う現場ですぐに役立ちます。

 ・著者の経験が詰まっている:ゲーム開発やAIキャラクター開発の経験がある著者が、初心者の目線に立って丁寧に書いています。

一緒に頑張りましょう

 私もプログラミング初心者だった頃のことを思い出しながら、詳しい解説を心がけて書きました。リファクタリングは難しく感じるかもしれません。しかし、繰り返し練習することでマスターできます。この本で一緒に練習して、ワンランク上のエンジニアを目指しましょう。

(著者 初野広夢@HiromuGamesPOPO)

初野広夢って誰?

 私は、ゲーム開発と生成AIが大好きなUnityエンジニアです。大学1年生のときからベンチャー企業や個人で、Unityでいろいろなゲームを作ってきました。現在はモバイルゲームアプリを制作する会社で、Unityクライアントエンジニアとして活躍中です。1

お問い合わせ先

 この本についての質問は、X(旧:Twitter)のDMで @HiromuGamesPOPO までお気軽にどうぞ。

実行環境

 C#はpaiza.IO様のオンラインコンパイラで実行可能です。2

免責事項

 本書の内容を使った活動は、すべて読者の自己責任でお願いします。本書の内容をもとに何かを作ったり、プログラムを動かしたりするときは、自分でよく確かめてから行ってください。何か問題が起きても、著者や出版社は責任を持ちません。

第1章 コードを読みやすくする方法 - 変数とメソッドの名前の付け方

1.1 はじめに

 この章では、あなたが書くプログラムを他の人にも簡単に理解してもらえるようにする、変数名とメソッド名の付け方を学びます。わかりやすい名前を使うと、プログラムの各部分が何をしているのかが一目でわかります。ここでは、いい名前を考えるコツを紹介します。

1.2 わかりやすい名前をつける

 変数やメソッドの名前は、それが何をするのかが一目でわかるようにしましょう。名前が明確だと、コードを書くときに間違えにくくなります。誰が見ても、すぐに「このコードは何をしているんだろう?」と理解できるので、コードを共有したり、一緒に作業するときに役立ちます。逆に、名前がわかりにくいと、他の人があなたのコードを見たときに、「これは何なんだろう?」と困ってしまいます。そのため、シンプルで直感的にわかる名前をつけることは、コードを使いやすくするために重要なポイントです。

リスト1.1: 変数名tsは、変数名totalScoreよりも意味がわかりにくい

int ts; // どういう意味かよくわからない名前(totalScoreの略かもしれないけど、よくわからない)
  int totalScore; // 意味のある名前(スコアの合計点数)

1.3 名前のつけ方のルール

 プログラミングでは、名前をつけるときのルールがあります。これを 「命名規則」と呼びます。よく使われる命名規則には、次のようなものがあります。

 ・パスカルケース(PascalCase):単語の最初の文字を大文字にします。

 ・キャメルケース(camelCase):最初の単語以外の単語の最初の文字を大文字にします。

 ・スネークケース(snake_case):単語をアンダースコア(_)でつなぎ、全部小文字で書きます。

 ・アッパースネークケース(UPPER_SNAKE_CASE):単語をアンダースコアでつなぎ、全部大文字で書きます。

 C#では、次のような命名規則がよく使われます。

 ・クラス名やメソッド名:パスカルケース(PascalCase)

  ─例:public class MyClassName {};

 ・変数名:キャメルケース(camelCase)

  ─例:private int myVariable;

 C#の命名規則については、Microsoft Learn名前付けのガイドラインがとても参考になるので、ぜひご覧ください。1

1.4 略語と頭字語の使い方

 プログラムを書くとき、略語や頭字語を使うことがあります。よく知られている略語なら、他の人にも意味が伝わりやすいです。でも、あまり知られていない略語を使うと、コードが読みにくくなってしまうことがあるので気を付けましょう。

 ・いい例:http - ハイパーテキスト転送プロトコル(Hyper Text Transfer Protocol)の略です。多くの人が知っているので使っても問題ないでしょう。

 ・悪い例:usrNm - 「ユーザーネーム(UserName)」を省略したものですが、このような略し方は避けた方がいいです。

1.5 数字だけで意味を表さない

 「マジックナンバー」と呼ばれるものがあります。これは、コードの中で意味がわかりにくい数字をそのまま使うことをいいます。「なんでこの数字なの?」と他の人が疑問に思ってしまうので、なるべく避けましょう。代わりに、その数字が何を意味しているのかが、わかる変数名を使うといいでしょう。そうすれば、コードが何をしているのかがはっきりして、あとで数字を変更するときも楽になります。

 たとえば、こんなコードがあったとします。

リスト1.2: マジックナンバーを使った例

if (score > 80) {
      // 点数が80より高かったときの処理
  }

 この80が何を表しているのかは、ぱっと見ただけではわかりません。これを改善するには、次のようにします。

リスト1.3: 数字の意味がわかる変数名を使った例

const int PassingScore = 80;
  if (score > PassingScore) {
      // 点数が合格点より高かったときの処理
  }

 このようにPassingScoreという変数名を使うことで、「80」が「合格点」という意味だとわかるようになり、コードが読みやすくなります。

1.6 名前の長さはほどほどに

 変数の名前は、長すぎても短すぎてもいけません。ちょうどいい長さを考えることが大切です。長すぎると読みにくいコードになりますし、短すぎると何のことだかわからなくなってしまいます。そのため、名前はなるべく簡潔に、でも意味がはっきり伝わるようにしましょう。

 ・長すぎてダメな例:numberOfElementsInList - 長すぎると読むのが大変です。

 ・短すぎてダメな例:n - 短すぎると何の変数かわかりません。

 ・ちょうどいい例:elementCount - 短くてもしっかりと意味が伝わります。

1.7 「I」は「インターフェイス」の印

 C#のルールとして、インターフェイスには必ず「I」をつけます。「I」は「インターフェイス(Interface)」の頭文字です。これを見れば、「あ、これはインターフェイスなんだな」とすぐわかるようになっています。

リスト1.4: インターフェイスの書き方

public interface IShape
  {
      void Draw();
      double Area();
  }

  public interface IResizable
  {
      void Resize(double size);
  }

インターフェイスってなに?

 プログラミングの世界では、「インターフェイス」というものがあります。インターフェイスは、クラスの設計図のようなものです。インターフェイスには、クラスが持つべきメソッドの名前だけが書かれていて、その中身は書かれていません。インターフェイスを使うことで、複数のクラスに共通の機能を持たせることができます。

 たとえば、「図形」というインターフェイスがあったとします。このインターフェイスには、「面積を計算する」というメソッドと、「描画する」というメソッドが定義されています。そして、「円」クラスと「四角形」クラスがこの「図形」インターフェイスを実装しているとします。すると、「円」クラスと「四角形」クラスには、必ず「面積を計算する」メソッドと「描画する」メソッドが存在することになります。

 このように、インターフェイスを使うことで、共通の機能を持つクラスを作ることができるのです。C#では、インターフェイスの名前は「I」から始めるというルールがあります。

1.8 ドリル問題

ドリル1:わかりやすい名前をつける

問題

 あなたは、学校の生徒の数を管理するプログラムを作っています。次の変数名をわかりやすくして、何を表しているのかはっきりさせてください。

リスト1.5: ドリル1:わかりやすい名前をつける

int a = 5; // 生徒の数

ヒント

 生徒は英語で「student」、数は英語で「count」といいます。

答え

 101ページを参照してください。

ドリル2:命名規則を守る

問題

 ネットショッピングのサイトで、ユーザーの数と注文の合計金額を表す変数名が次のようになっています。C#の命名規則に合うように直してください。

リスト1.6: ドリル2:命名規則を守る

private int userCount = 5;
  private int OrderTotal = 100;

ヒント

 C#では、プライベート変数(private)はキャメルケース(camelCase)を使います。

答え

 101ページを参照してください。

ドリル3:略語に気を付ける

問題

 会社の社員情報を管理するプログラムです。次の変数名をもっとわかりやすくして、むやみに短くしないように直してください。

リスト1.7: ドリル3:略語に気を付ける

string empNm = "Hanako";

ヒント

 社員は英語で「employee」、名前は英語で「name」といいます。

答え

 101ページを参照してください。

ドリル4:マジックナンバーを使わない

問題

 ゲームでプレイヤーがダメージを受ける処理が、次のようになっています。マジックナンバーを使わないで、変数を使ってわかりやすくしてください。

リスト1.8: ドリル4:マジックナンバーを使わない

public void Damage(){  // ダメージを受けるメソッド
      hp -= 3;  // プレイヤーのHP(体力)を3減らす
  }

ヒント

 ダメージは英語で「damage」といいます。

答え

 101ページを参照してください。

ドリル5:名前の長さに気を付ける

問題

 お店の商品を管理するプログラムです。次の長すぎる変数名を改善して、読みやすくしてください。

リスト1.9: ドリル5:名前の長さに気を付ける

int theTotalNumberOfProductsInInventory = 150; // 在庫にある商品の数

ヒント

 「theTotalNumberOf」の部分が長すぎる原因になっています。数を表す別の英単語は何でしょうか。

答え

 102ページを参照してください。

ドリル6:インターフェイスに「I」をつける

問題

 ゲームのプログラムで、PlayerクラスとEnemyクラスを作りました。このふたつのクラスは、どちらもHumanインターフェイスを実装しています。しかし、インターフェイスの名前がC#のルールに合っていません。「I」をつけて直してください。

リスト1.10: ドリル6:インターフェイスに「I」をつける

public interface Human
  {
      void Resize(double size);
  }

ヒント

 C#のルールでは、インターフェイスの名前には必ず「I」をつけます。

答え

 102ページを参照してください。

1.9 この章のまとめ

 この章では、プログラムを読みやすくするために、変数やメソッドの名前の付け方について学びました。最初は名前を考えるのに時間がかかるかもしれません。でも、はっきりした名前をつけることで、プログラムが何をしているのかがわかりやすくなります。とくに、他の人とプログラムを共有するときや、あとで自分が書いたプログラムを見直すときに、わかりやすい名前はとても役立ちます。

 ここで紹介したポイントをまとめておきましょう。

 ・わかりやすい名前をつける:見ただけで意味が伝わる名前を選びましょう。そうすれば、混乱せずにプログラムの内容が理解できます。

 ・ルールを守る:決まったルールで名前をつけることで、プログラムの中で名前の役割がすぐわかるようになります。

 ・略語は慎重に:みんなが知っている略語はOKですが、わかりにくい略語は混乱のもとになるので避けましょう。

 ・マジックナンバーは使わない:数字をそのまま書くのではなく、その数字が何を意味しているのかが、わかる名前をつけましょう。

 ・名前の長さはほどほどに:長すぎても短すぎても望ましくありません。ちょうどいい長さで、意味がきちんと伝わる名前を考えましょう。

 ・インターフェイスは「I」で始める: C# では、インターフェイスの名前の最初には必ず「I」をつけます。これを見れば「インターフェイスだな」とすぐわかります。

 これらのコツを意識すれば、あなたのプログラムはもっとわかりやすくて、読みやすくなります。つよいプログラマーになるために、基本となる変数とメソッドの名前の付け方でした。次の章も一緒に勉強していきましょう。

試し読みはここまでです。
この続きは、製品版でお楽しみください。