switch文でのEnum
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 61/65。
列挙型(enum)の最も強力な活用方法の一つは、それらをswitch文と一緒に使用することです。列挙型とswitch文を組み合わせることで、より安全でメンテナンス性の高いコードを作成できます。
switch文で列挙型(enum)を使用する方法は次のとおりです。
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}switch文でenumを使用する利点は、Dartがすべての可能なenumの値が処理されているかを確認できることです。いずれかのenumの値に対してcaseを含めるのを忘れた場合、Dartは警告を表示し、コード内のバグを防ぐのに役立ちます。
このアプローチは、タイポが予期しない動作を引き起こす可能性がある switch 文で文字列や数値を使用するよりも、はるかに安全です。enum を使用すると、コードがあらゆる可能性のあるシナリオを確実に処理できるようにするコンパイル時のチェックが行われます。
チャレンジ
簡単列挙型(enums)とswitch文を使用して、ゲームキャラクターの状態を管理するプログラムを作成してください。あなたのタスクは以下の通りです:
idle、walking、running、jumping、attackingの値を持つCharacterStateという名前の列挙型を定義します。CharacterState型のcurrentStateという変数を作成し、CharacterState.idleを代入します。CharacterStateパラメータを受け取り、switch文を使用して状態に基づいた文字列メッセージを返すgetStateMessageという関数を作成します:CharacterState.idleの場合:"Character is standing still"を返しますCharacterState.walkingの場合:"Character is moving slowly"を返しますCharacterState.runningの場合:"Character is moving quickly"を返しますCharacterState.jumpingの場合:"Character is in the air"を返しますCharacterState.attackingの場合:"Character is fighting"を返します- 関数を使用して、次の正確な形式で初期状態のメッセージを出力します:
Initial state: Character is standing still currentStateをCharacterState.walkingに変更します。- 次の正確な形式で更新された状態のメッセージを出力します:
Updated state: Character is moving slowly currentStateをCharacterState.attackingに変更します。- 次の正確な形式で最終状態のメッセージを出力します:
Final state: Character is fighting
プログラムでは、列挙型とswitch文を適切に使用し、この組み合わせがどのように型安全な状態管理を提供するかを示してください。switch文はすべての列挙型の値を処理し、各キャラクターの状態に対して適切なメッセージを返す必要があります。Dartの命名規則に従い、上記で指定された正確な文字列メッセージを使用してください。
チートシート
Enumは、型安全なコードを実現するために switch 文と組み合わせてうまく機能します:
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}Dartは、すべてのenum値がswitch文で処理されていることを検証し、バグを防ぐとともにコンパイル時のチェックを提供します。
自分で試してみよう
import 'dart:io';
// TODO: ここでCharacterStateのenumを定義してください
// TODO: ここでgetStateMessage関数を作成してください
void main() {
// TODO: 以下にコードを記述してください
// currentState変数を作成し、CharacterState.idleを代入します
// 初期の状態メッセージを表示します
// currentStateをCharacterState.walkingに変更します
// 更新された状態メッセージを表示します
// currentStateをCharacterState.attackingに変更します
// 最終的な状態メッセージを表示します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー