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.

Bir enum (numaralandırma), sabit bir değerler 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 veya dizeler kullanmak yerine, enum'lar tip 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

Enum'lar basit sabitlerden daha fazlasıdır; onlar tam sınıflardır. Onlara alanlar (fields), yapıcılar (constructors) ve metotlar (methods) 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());  // Şunu yazdırır: 20

Her enum, kullanışlı yerleşik metotlarla birlikte gelir. values() metodu tüm sabitlerin bir dizisini döndürür, valueOf() ise bir dizeyi eşleşen enum sabitine dönüştürür. ordinal() metodu sabitin konumunu (0'dan başlayarak) döndürür:

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; bu da kodunuzu düz sabitler kullanmaktan daha güvenli ve daha anlamlı hale getirir.

challenge icon

Görev

Kolay

Alanlar, yapıcılar ve metotlar içeren enum'ların gücünü gösteren bir kahve dükkanı sipariş sistemi kuralım. Fiyat bilgilerini saklayan bir CoffeeSize enum'ı ve müşteri siparişlerini işleyen bir sistem oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • CoffeeSize.java: İlişkili fiyatlara sahip kahve boyutlarını temsil eden bir enum oluşturun. Enum'ınız üç sabite sahip olmalıdır: sırasıyla 2.50, 3.50 ve 4.50 fiyatlarıyla SMALL, MEDIUM ve LARGE.

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

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

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

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Kahve dükkanınızı hayata geçirin! İki girdi alacaksınız: bir müşteri adı (String) ve bir boyut adı ("SMALL", "MEDIUM" veya "LARGE" gibi bir String).

    İlk olarak, boyut dizesini karşılık gelen enum sabitine dönüştürmek için CoffeeSize.valueOf() kullanın. Müşteri adı ve boyutuyla bir Order oluşturun, ardından makbuzu yazdırın.

    Makbuzu yazdırdıktan sonra boş bir satır yazdırın, ardından values() metodunu kullanarak tüm CoffeeSize değerleri üzerinde dönerek tam menüyü görüntüleyin. Her boyut için açıklamasını ayrı bir satıra yazdırın.

Sırasıyla iki girdi alacaksınız: müşteri adı ve boyut adı ("SMALL", "MEDIUM" veya "LARGE" değerlerinden biri).

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

Kopya kağıdı

Bir enum, sabitlerden oluşan sabit bir kümeyi temsil eden, tip güvenli ve okunabilir değerler sağlayan özel bir sınıf türüdür:

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

Day today = Day.MONDAY;
System.out.println(today);  // Çıktı: MONDAY

Enum'lar alanlara (fields), yapılandırıcılara (constructors) ve metotlara sahip olabilir:

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());  // Çıktı: 20

Yerleşik enum metotları:

  • values() - tüm enum sabitlerinden oluşan bir dizi döndürür
  • valueOf(String) - bir dizeyi eşleşen enum sabitine dönüştürür
  • ordinal() - 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");  // Dizeyi enum'a dönüştürür

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: valueOf() kullanarak sizeName'i CoffeeSize enum'ına dönüştürün
        
        // TODO: Müşteri adı ve boyutu ile bir Sipariş (Order) oluşturun
        
        // TODO: Makbuzu yazdırın
        
        // TODO: Boş bir satır yazdırın
        
        // TODO: Tüm CoffeeSize değerlerini döngüye alarak tam menüyü görüntüleyin
        // İpucu: Tüm enum sabitlerini almak için CoffeeSize.values() kullanın
        
    }
}
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