Java - 列挙型文字列

こんにちは、Javaプログラマー志望の皆さん!今日は、Javaの列挙型文字列の素晴らしい世界に飛び込んでいきましょう。プログラミングが完全に新しいことであっても心配しないでください。私はこれらの年間、無数の学生を教えてきたように、ステップバイステップにガイドしてあげます。では、この素晴らしい旅に一緒に出発しましょう!

Java - Enum Strings

列挙型とは?

列挙型文字列に飛び込む前に、まず基本について学びましょう。列挙型(Enums)は、Javaにおける特殊な型で、固定の一覧の定数を表します。"enumerations"の略で、プログラムの中で変わらない事前定義されたオプションのリストと考えてください。

カフェーショップのプログラムを作成しているとしましょう。小、中、大のカップサイズ:SMALL、MEDIUM、LARGEの固定のセットがあるかもしれません。これは列挙型を使用するのに完璧なシナリオです!

以下のようにこの列挙型を定義することができます:

public enum CupSize {
SMALL,
MEDIUM,
LARGE
}

では、この列挙型をコードでどのように使用するかを見てみましょう:

public class CoffeeShop {
public static void main(String[] args) {
CupSize myOrder = CupSize.MEDIUM;
System.out.println("I'd like a " + myOrder + " coffee, please!");
}
}

このコードを実行すると、"I'd like a MEDIUM coffee, please!"と出力されます。

列挙型文字列:より詳しく

列挙型が何であるか理解したので、列挙型文字列について探求しましょう。デフォルトでは、列挙型の値を出力するとき、Javaはその名前を文字列として使用します。しかし、列挙型の値をどのように文字列として表現するかをカスタマイズしたい場合はどうでしょうか?

これがtoString()メソッドが便利な理由です。私たちのCupSize列挙型を拡張して、より説明的な文字列を提供しましょう:

public enum CupSize {
SMALL("Small (8 oz)"),
MEDIUM("Medium (12 oz)"),
LARGE("Large (16 oz)");

private final String description;

CupSize(String description) {
this.description = description;
}

@Override
public String toString() {
return this.description;
}
}

ここで何が起こっているのかを分解してみましょう:

  1. 列挙型にdescriptionフィールドを追加しました。
  2. この説明をパラメータとして取るコンストラクタを作成しました。
  3. toString()メソッドをオーバーライドして、カスタムの説明を返します。

では、私たちの拡張した列挙型を使用してみましょう:

public class CoffeeShop {
public static void main(String[] args) {
CupSize myOrder = CupSize.MEDIUM;
System.out.println("I'd like a " + myOrder + " coffee, please!");
}
}

今度は、コードを実行すると、"I'd like a Medium (12 oz) coffee, please!"と出力されます。

素晴らしいでしょうか?列挙型の値をどのように文字列として表現するかをカスタマイズしました!

列挙型文字列との連携

カスタムの文字列表現を列挙型に作成する方法を知ったので、列挙型文字列で一般的に行う操作について探求しましょう。

列挙型から文字列への変換

すでにtoString()メソッドを使用して列挙型を文字列に変換する方法を見ました。しかし、列挙型定数の名前を文字列として取得する別の方法もあります:

CupSize size = CupSize.LARGE;
String sizeName = size.name();
System.out.println("The enum name is: " + sizeName);

これは、"The enum name is: LARGE"と出力されます。

文字列から列挙型への変換

文字列を列挙型に戻す方法を知りたい場合は、valueOf()メソッドを使用します:

String sizeString = "SMALL";
CupSize size = CupSize.valueOf(sizeString);
System.out.println("The converted enum is: " + size);

これは、"The converted enum is: Small (8 oz)"と出力されます。

列挙型の値を反復する

場合によっては、列挙型のすべての値を反復する必要があるかもしれません。values()メソッドを使用してこれを行うことができます:

System.out.println("Available cup sizes:");
for (CupSize size : CupSize.values()) {
System.out.println("- " + size);
}

これは以下のように出力されます:

Available cup sizes:
- Small (8 oz)
- Medium (12 oz)
- Large (16 oz)

実践的な例:カフェーショップ注文システム

今まで学んだことをすべてまとめて、より包括的な例を作成しましょう。シンプルなカフェーショップ注文システムを作ります:

import java.util.Scanner;

public enum CoffeeType {
ESPRESSO("A strong coffee brewed by forcing hot water under pressure through finely-ground coffee beans."),
LATTE("Espresso with steamed milk and a small layer of milk foam on top."),
CAPPUCCINO("Equal parts espresso, steamed milk, and milk foam.");

private final String description;

CoffeeType(String description) {
this.description = description;
}

@Override
public String toString() {
return name() + ": " + this.description;
}
}

public class CoffeeShop {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Welcome to our coffee shop!");
System.out.println("Here are our available coffee types:");
for (CoffeeType type : CoffeeType.values()) {
System.out.println("- " + type);
}

System.out.print("What type of coffee would you like? ");
String userChoice = scanner.nextLine().toUpperCase();

try {
CoffeeType chosenCoffee = CoffeeType.valueOf(userChoice);
System.out.println("Great choice! You've ordered a " + chosenCoffee.name().toLowerCase() + ".");
} catch (IllegalArgumentException e) {
System.out.println("Sorry, we don't have that type of coffee.");
}

scanner.close();
}
}

このプログラムは以下のことを行います:

  1. CoffeeType列挙型を定義し、各タイプのコーヒーの説明を付けます。
  2. mainメソッドの中で、ユーザーにすべての利用可能なコーヒータイプを表示します。
  3. ユーザーにコーヒータイプを選ばせます。
  4. ユーザーの入力をCoffeeType列挙型に変換しようとします。
  5. 成功すると、注文を確認します。失敗すると、そのタイプのコーヒーをお持ちでないと知らせます。

結論

おめでとうございます!Javaの列挙型文字列の世界に深く飛び込んだのです。列挙型が何であるか、それをどのように文字列としてカスタマイズするか、そしてそれをさまざまな方法でどのように使用するかについてカバーしました。列挙型は、固定の一覧の定数を扱う際に、コードをより読みやすく、エラーを少なくするための強力なツールだと覚えておいてください。

Javaの旅を続ける中で、列挙型のさらに多くの使用方法を見つけることができます。特に、スイッチ文や状態機械を表現する際に、あるいは固定のオプションのセットを持つ場所で非常に役立ちます。

練習を続け、好奇心を失わずに、幸せなコーディングを!

Credits: Image by storyset