Java - Enums: Hướng Dẫn Cho Người Mới Bắt Đầu

Xin chào các bạn nhà lập trình Java mới! Hôm nay, chúng ta sẽ đi mạo hiểm vào thế giới kỳ diệu của Java Enums. Đừng lo lắng nếu bạn chưa từng nghe về chúng trước đây – đến cuối bài hướng dẫn này, bạn sẽ trở thành một chuyên gia Enum! Vậy hãy lấy ly cà phê yêu thích của bạn và bắt đầu nào!

Java - Enums

Giới Thiệu Về Enums

Bạn có bao giờ phải đối mặt với tình huống cần biểu diễn một tập hợp hằng số cố định trong mã của mình không? Có lẽ bạn đang tạo ra một chương trình cho quán cà phê và cần biểu diễn các kích cỡ khác nhau của ly cà phê. Hoặc có thể bạn đang xây dựng một trò chơi và cần biểu diễn các hướng đi khác nhau mà nhân vật có thể di chuyển. Đây là nơi Enums xuất hiện để cứu rỗi!

Một Enum, viết tắt của "enumeration," là một loại lớp đặc biệt trong Java mà biểu diễn một nhóm các hằng số (biến không thể thay đổi, như biến cuối cùng). Hãy nghĩ về nó như một cách tinh tế để tạo ra một tập hợp các giá trị được xác định trước không thể thay đổi.

Khai Báo Lớp

Hãy bắt đầu bằng cách xem cách chúng ta khai báo một Enum. Cú pháp rất đơn giản:

enum CoffeeSize {
NHỎ,
VỪA,
LỚN
}

Trong ví dụ này, chúng ta đã tạo ra một Enum có tên là CoffeeSize với ba hằng số: NHỎ, VỪA và LỚN. Nhận ra rằng chúng ta sử dụng từ khóa enum thay vì class, và mỗi hằng số được phân cách bằng dấu phẩy.

Các Khởi Tạo Lớp

Enums có thể có các khởi tạo, tương tự như các lớp thông thường. Điều này cho phép chúng ta liên kết dữ liệu bổ sung với mỗi hằng số enum. Hãy mở rộng ví dụ CoffeeSize của chúng ta:

enum CoffeeSize {
NHỎ(8),
VỪA(12),
LỚN(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}
}

Trong phiên bản cập nhật này, chúng ta đã thêm một khởi tạo chấp nhận một tham số int biểu diễn số lượng ounce cho mỗi kích cỡ. Chúng ta cũng đã thêm một trường ounces và phương thức getter getOunces().

Các Phương Thức Lớp

Enums có thể có các phương thức như các lớp thông thường. Hãy thêm một phương thức vào enum CoffeeSize của chúng ta:

enum CoffeeSize {
NHỎ(8),
VỪA(12),
LỚN(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " cà phê (" + this.ounces + " oz)";
}
}

Chúng ta đã thêm một phương thức getDescription() trả về một chuỗi mô tả kích cỡ cà phê. Phương thức name() được kế thừa từ lớp Enum và trả về tên của hằng số dưới dạng chuỗi.

Các Phương Thức Kế Thừa

Tất cả các enums mặc định kế thừa từ java.lang.Enum. Điều này có nghĩa là chúng có một số phương thức xây sẳng trong. Dưới đây là một số phương thức thường được sử dụng:

Phương Thức Mô Tả
name() Trả về tên của hằng số enum
ordinal() Trả về vị trí của hằng số enum (theo thứ tự từ 0)
valueOf(String name) Trả về hằng số enum có tên cụ thể
values() Trả về một mảng chứa tất cả các hằng số enum

Ví Dụ

Bây giờ, hãy đặt tất cả các thứ vào một ví dụ hoàn chỉnh:

public class CoffeeShop {
public static void main(String[] args) {
CoffeeSize mySize = CoffeeSize.VỪA;

System.out.println("Tôi đã đặt một " + mySize.getDescription());
System.out.println("Kích cỡ này có giá trị thứ tự là: " + mySize.ordinal());

System.out.println("\nTất cả các kích cỡ có sẵn:");
for (CoffeeSize size : CoffeeSize.values()) {
System.out.println(size.getDescription());
}

// Sử dụng valueOf
CoffeeSize anotherSize = CoffeeSize.valueOf("LỚN");
System.out.println("\nSử dụng valueOf: " + anotherSize.getDescription());
}
}

enum CoffeeSize {
NHỎ(8),
VỪA(12),
LỚN(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " cà phê (" + this.ounces + " oz)";
}
}

Đầu Ra

Khi bạn chạy chương trình này, bạn sẽ thấy đầu ra sau:

Tôi đã đặt một VỪA cà phê (12 oz)
Kích cỡ này có giá trị thứ tự là: 1

Tất cả các kích cỡ có sẵn:
NHỎ cà phê (8 oz)
VỪA cà phê (12 oz)
LỚN cà phê (16 oz)

Sử dụng valueOf: LỚN cà phê (16 oz)

Hãy phân tích những gì đang diễn ra trong ví dụ này:

  1. Chúng ta tạo một biến CoffeeSize mySize và đặt nó là VỪA.
  2. Chúng ta in mô tả của mySize bằng cách sử dụng phương thức getDescription().
  3. Chúng ta in giá trị thứ tự của VỪA, là 1 (nhớ rằng các giá trị thứ tự bắt đầu từ 0).
  4. Chúng ta sử dụng vòng lặp for-each để duyệt qua tất cả các giá trị CoffeeSize và in mô tả của chúng.
  5. Cuối cùng, chúng ta minh họa sử dụng valueOf() để có được hằng số enum LỚN bằng tên của nó.

Và thế là đã! Bạn đã bước đầu tiên vào thế giới của Java Enums. Chúng là một công cụ mạnh mẽ để biểu diễn các tập hợp hằng số cố định một cách an toàn về kiểu.

Nhớ rằng, Enums không chỉ là các hằng số tuyệt đẹp. Chúng có thể có các khởi tạo, trường và phương thức, làm cho chúng rất linh hoạt. Chúng là hoàn hảo để biểu diễn nhưng ngày trong tuần, bộ bài, kích cỡ pizza, hoặc bất kỳ tập hợp các giá trị cố định nào trong các chương trình của bạn.

Khi bạn tiếp tục hành trình Java của mình, bạn sẽ tìm thấy nhiều ứng dụng thêm cho Enums. Chúng là một phần cơ bản của ngôn ngữ Java, và việc nắm vững chúng sẽ làm bạn trở thành một nhà lập trình hiệu quả và chính xác hơn.

Tiếp tục luyện tập, tiếp tục lập trình, và nhất quan, tiếp tục tận hưởng quá trình học hỏi. Trước khi bạn biết nó, bạn sẽ viết các chương trình Java phức tạp một cách dễ dàng. Chúc bạn mãi mãi có niềm vui trong việc lập trình!

Credits: Image by storyset