Menu
Coddy logo textTech

Enum'lar ve Enum Metotları

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 87.

enum (numaralandırma), sabit bir sabitler kümesini temsil eden özel bir sınıf türüdür. Haftanın günleri veya sipariş durumları gibi seçenekleri temsil etmek için rastgele tam sayılar ya da dizeler kullanmak yerine, enum'lar tür güvenli ve okunabilir değerler sağlar.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Yazdırır: MONDAY

Numaralandırmalar basit sabitlerden daha fazlasıdır: bunlar tam sınıflardır. Bunlara alanlar, yapıcılar ve metotlar ekleyebilirsiniz:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Yazdırır: 20

Her enum, kullanışlı yerleşik yöntemlerle birlikte gelir. values() yöntemi tüm sabitlerden oluşan bir dizi döndürürken, valueOf() bir dizeyi eşleşen enum sabitine dönüştürür. ordinal() yöntemi sabitin konumunu döndürür (0'dan başlayarak):

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // String'i enum'a dönüştürür

Enum'lar, çalışma zamanında değişmeyecek, bilinen ve sabit bir değer kümesine sahip olduğunuzda idealdir; kodunuzu yalnızca sabitleri kullanmaya kıyasla daha güvenli ve daha anlaşılır hâle getirir.

challenge icon

Görev

Kolay

Alanlar, yapıcılar ve metotlarla enum'ların gücünü sergileyen bir kahve dükkânı sipariş sistemi oluşturalım. Fiyatlandırma bilgilerini depolayan bir CoffeeSize enum'ı ve müşteri siparişlerini işleyen bir sistem oluşturacaksın.

kodunu üç dosyaya ayıracaksın:

  • CoffeeSize.java: İlişkili fiyatlarıyla kahve boyutlarını temsil eden bir enum oluştur. Enum'ında sırasıyla SMALL, MEDIUM ve LARGE fiyatlarına sahip üç sabit bulunmalı: 2.50, 3.50 ve 4.50.

    Her boyutun özel bir price alanına (double), bu alanı ayarlayan bir yapıcıya ve alanı almak için bir getPrice() metoduna ihtiyacı vardır. Ayrıca şu biçimde bir dize döndüren bir getDescription() metodu ekle: [size name] - $[price] (örneğin: SMALL - $2.5)

  • Order.java: Bir kahve siparişini temsil eden bir sınıf oluştur. Bir Order'ın iki özel alanı vardır: customerName (String) ve size (CoffeeSize). Her iki alanı başlatmak için bir yapıcı ve her biri için getter metotları ekle.

    Çok satırlı bir dize döndüren bir getReceipt() metodu ekle:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Kahve dükkânına hayat ver! İki girdi alacaksın: bir müşteri adı (String) ve bir boyut adı (String; örneğin "SMALL", "MEDIUM" veya "LARGE").

    Önce, boyut dizesini karşılık gelen enum sabitine dönüştürmek için CoffeeSize.valueOf() kullan. Müşteri adı ve boyutla bir Order oluştur, ardından fişi yazdır.

    Fişi yazdırdıktan sonra boş bir satır yazdır, ardından CoffeeSize metodunu kullanarak tüm values() değerleri üzerinde yineleme yapıp tam menüyü görüntüle. Her boyut için açıklamasını ayrı bir satırda yazdır.

İki girdiyi sırayla alacaksın: müşteri adı ve boyut adı ("SMALL", "MEDIUM" veya "LARGE" seçeneklerinden biri).

Enum'ın hem boyut kimliğini hem de ilişkili fiyatını nasıl kapsüllediğine dikkat et; bu, kodunun tamamında ayrı sabitler veya sihirli sayılar kullanmaktan çok daha temizdir!

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: sizeName'i valueOf() kullanarak CoffeeSize enum'una dönüştür
        
        // TODO: Müşteri adı ve boyut ile bir Order oluştur
        
        // TODO: Fişi yazdır
        
        // TODO: Boş bir satır yazdır
        
        // TODO: Tüm CoffeeSize değerleri üzerinde yineleyerek tam menüyü görüntüle
        // İpucu: Tüm enum sabitlerini almak için CoffeeSize.values() kullan
        
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi