Chapter 01.6

プログラミング基礎
データ型とは何か 🎭

変数に入れることができる「データの種類」を理解して、安全なプログラムを書こう

📚 この章で学ぶこと

データ型の基本

  • • データ型とは何か
  • • なぜデータ型が重要なのか
  • • TypeScriptの主要なデータ型
  • • 静的型付けのメリット

実践的なスキル

  • • 型注釈の書き方
  • • 型推論の理解
  • • 型安全なコードの書き方
  • • ゲーム開発での型活用

💡 TypeScriptの力

TypeScriptは、JavaScriptに「型」という概念を追加した言語です。 データ型を理解することで、バグの少ない安全なゲームを作ることができます。

🎭 データ型とは何か?

データ型とは、「変数に入れることができるデータの種類」を決めるルールです。 現実世界では、異なる種類のものを異なる方法で扱いますよね。

🏪 現実世界での例

📦 商品の種類によって扱い方が違う:

生鮮食品: 冷蔵保存、賞味期限管理が必要
衣類: サイズ別に分類、ハンガーで保管
電子機器: 静電気防止、精密な取り扱いが必要
書籍: ジャンル別に分類、湿気対策が必要

💡 プログラムでも同じ考え方:

数値: 計算ができる(足し算、引き算など)
文字列: 連結ができる(文字をつなげるなど)
真偽値: 条件判定に使える(はい/いいえ)
配列: 複数の値をまとめて管理できる

🎮 ゲーム開発での型活用例

プレイヤーのスコア(数値型): 計算でスコアを増減
プレイヤー名(文字列型): 画面に名前を表示
ゲーム開始フラグ(真偽値型): ゲームが始まっているかをチェック
敵キャラクター一覧(配列型): 複数の敵をまとめて管理

🚨 なぜデータ型が重要なのか?

❌ 型がない場合の問題

// JavaScriptでの問題例
let score = "100";  // 文字列として保存
let bonus = 50;    // 数値として保存

// 足し算のつもりが...
let total = score + bonus;
console.log(total); // "10050" (文字連結)

// 期待した結果は 150 だったのに!
問題点:
• 予期しない結果が出る
• バグの発見が困難
• 実行時にエラーが発生
• 計算結果が間違う

✅ 型がある場合の安全性

// TypeScriptでの安全な記述
let score: number = 100;  // 数値型
let bonus: number = 50;   // 数値型

// 安全な計算
let total: number = score + bonus;
console.log(total); // 150 (正しい数値計算)

// 型が違う値を入れようとするとエラー
score = "abc"; // ❌ エラー!
利点:
• 予期される結果が得られる
• エラーを事前に発見
• コードの意図が明確
• バグの減少

🛡️ 型安全性のメリット

🔍 早期エラー発見: 実行前にミスを見つけられる
📖 コードの可読性: 何のデータかが一目で分かる
🔧 開発効率: VSCodeが賢い補完をしてくれる
🛠️ リファクタリング: 安全にコードを変更できる

🎯 TypeScriptの主要なデータ型

🔢 number(数値型)

用途:
数値を扱う場合に使用。整数、小数点数の区別はなく、全て数値として扱います。
// number型の例
let playerScore: number = 1500;      // 整数
let playerSpeed: number = 2.5;       // 小数
let temperature: number = -10;       // 負の数
let infinity: number = Infinity;   // 無限大

// ゲームでの使用例
let maxHealth: number = 100;
let currentHealth: number = 85;
let damage: number = 15;

currentHealth = currentHealth - damage; // 70

📝 string(文字列型)

用途:
文字やテキストを扱う場合に使用。ダブルクォート(")やシングルクォート(')で囲みます。
// string型の例
let playerName: string = "勇者";
let gameTitle: string = '大冒険ゲーム';
let message: string = "ゲームオーバー!";

// 文字列の連結
let greeting: string = "こんにちは、" + playerName + "さん!";

// テンプレートリテラル(バッククォート使用)
let scoreMessage: string = `あなたのスコア: ${playerScore}点`;

// ゲームでの使用例
let itemName: string = "回復ポーション";
let description: string = "HPを50回復する";

✅ boolean(真偽値型)

用途:
「はい」か「いいえ」の2つの値のみを持つ型。true(真)またはfalse(偽)のどちらかの値。
// boolean型の例
let gameStarted: boolean = true;    // ゲーム開始中
let isPaused: boolean = false;      // 一時停止していない
let hasKey: boolean = true;        // 鍵を持っている
let isAlive: boolean = true;       // 生きている

// 条件分岐での使用
if (gameStarted) {
    console.log("ゲームプレイ中...");
}

if (hasKey) {
    console.log("扉を開けることができます");
} else {
    console.log("鍵が必要です");
}

📚 配列型(Array)

用途:
同じ型の値を複数まとめて管理する場合に使用。ゲームでは敵キャラクターのリストなどに活用。
// 配列型の例
let highScores: number[] = [1500, 1200, 980, 750];
let playerNames: string[] = ["太郎", "花子", "次郎"];
let levelCompleted: boolean[] = [true, true, false, false];

// 配列の操作
highScores.push(1800);           // 末尾に追加
let topScore = highScores[0];     // 最初の要素を取得
let length = highScores.length;   // 配列の長さ

// ゲームでの使用例
let enemies: string[] = ["スライム", "オーク", "ドラゴン"];
let inventory: string[] = ["剣", "盾", "回復薬"];

🏷️ 型注釈と型推論

📝 型注釈(Type Annotation)

型注釈とは:
変数の後に: 型名を明示的に書いて、その変数がどの型かを指定する方法
// 型注釈の基本形
let 変数名: 型名 = ;

// 具体例
let score: number = 0;
let name: string = "プレイヤー";
let alive: boolean = true;
let items: string[] = ["剣", "薬"];
メリット:
• 意図が明確に伝わる
• コードの可読性向上
• チーム開発で統一性

🤖 型推論(Type Inference)

型推論とは:
TypeScriptが代入される値から自動的に型を推測する機能。型を明示しなくても安全
// 型推論の例
let score = 0;          // number型と推論
let name = "プレイヤー";   // string型と推論
let alive = true;        // boolean型と推論
let items = ["剣", "薬"];  // string[]型と推論

// 型推論でも安全
score = "abc"; // ❌ エラー!number型なのに文字列
メリット:
• 記述が簡潔
• タイプ量の削減
• 同じ安全性を保持

🤔 どちらを使うべき?

型注釈を使う場面:
• 初期値を設定しない場合
• 複雑な型を明示したい場合
• チームでのコーディング規約
• 学習目的で型を明確にしたい場合
型推論を使う場面:
• 型が明らかな場合
• コードを簡潔にしたい場合
• プロトタイピング段階
• 短いコードブロック

✍️ 実際にコードを書いてみよう

TypeScriptでデータ型を体験してみましょう。 VSCodeで新しい TypeScript ファイルを作成し、以下のコードを入力してみてください。

// data-types-practice.ts
// ゲームプレイヤーの情報を型安全に管理

// === プレイヤーの基本情報 ===
let playerName: string = "勇者アキラ";
let playerId: number = 12345;
let isLoggedIn: boolean = true;

// === ゲームの状態管理 ===
let currentLevel: number = 5;
let experience: number = 2750;
let health: number = 85.5;        // 小数も可能
let maxHealth: number = 100;

// === ゲームフラグ ===
let hasKey: boolean = true;
let bossDefeated: boolean = false;
let canFly: boolean = false;

// === インベントリ(所持品) ===
let weapons: string[] = ["鉄の剣", "魔法の杖", "弓矢"];
let potions: string[] = ["回復薬", "魔力回復薬"];
let scores: number[] = [1200, 950, 1800, 1100];

// === 型推論の例(型注釈なし) ===
let autoPlayerName = "自動推論プレイヤー";  // string型と推論
let autoScore = 999;                    // number型と推論
let autoIsActive = true;                // boolean型と推論

// === プレイヤー情報の表示 ===
console.log("=== プレイヤー情報 ===");
console.log(`名前: ${playerName} (ID: ${playerId})`);
console.log(`レベル: ${currentLevel} (経験値: ${experience})`);
console.log(`体力: ${health}/${maxHealth}`);
console.log(`ログイン状態: ${isLoggedIn ? "ログイン中" : "オフライン"}`);

// === アイテム一覧の表示 ===
console.log("\n=== 所持武器 ===");
for (let i = 0; i < weapons.length; i++) {
    console.log(`${i + 1}. ${weapons[i]}`);
}

console.log("\n=== 所持薬品 ===");
for (let potion of potions) {
    console.log(`- ${potion}`);
}

// === 条件分岐での型活用 ===
if (health < 30) {
    console.log("\n⚠️ 警告: 体力が低下しています!");
} else if (health === maxHealth) {
    console.log("\n✅ 体力は満タンです!");
}

if (hasKey) {
    console.log("🔑 宝箱を開けることができます");
}

if (bossDefeated) {
    console.log("👑 ボスを倒しました!");
} else {
    console.log("⚔️ ボス戦に挑戦しましょう");
}

// === 型安全性のテスト(これらはエラーになります) ===
// playerName = 123;           // ❌ string型なのにnumber
// currentLevel = "高レベル";   // ❌ number型なのにstring
// hasKey = "yes";             // ❌ boolean型なのにstring
// weapons.push(999);          // ❌ string[]なのにnumber

🖥️ TypeScriptファイルの実行方法

1. VSCodeで新しいファイルを作成(Ctrl + N)
2. ファイル名を「data-types-practice.ts」として保存(.ts拡張子がポイント)
3. 上記のコードをコピー&ペースト
4. TypeScriptをJavaScriptにコンパイル:
tsc data-types-practice.ts
5. 生成されたJavaScriptファイルを実行:
node data-types-practice.js

🎯 このコードから学べること

型の明示: 各変数がどんなデータを格納するかが明確
型安全性: 間違った型の値を代入するとエラーで防げる
配列の活用: 同じ種類のデータをまとめて管理
実践的応用: ゲーム開発での実際の使用例

🎉 まとめ

この章では、TypeScriptの型システムについて詳しく学習しました。 データ型を理解することで、より安全で保守性の高いゲームを開発できるようになります。

今回学んだ重要ポイント:

  • データ型の概念: 変数に入れるデータの種類を決めるルール
  • 主要な型: number、string、boolean、配列型の特徴と使い方
  • 型注釈と推論: 明示的な指定と自動推論の使い分け
  • 型安全性: エラーの早期発見とバグの減少
  • ゲーム開発での活用: 実際のプロジェクトでの型の重要性

📈 次のステップ:

データ型をマスターしたら、次はnull と undefinedについて学習しましょう! 「存在しない値」を安全に扱う方法を理解することで、 より堅牢なプログラムが書けるようになります。

🎯 次のステップ

データ型の理解ができたら、次の章に進みましょう: