Menu
Coddy logo textTech

İsimlendirilmiş Sabitler için enum

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 55 / 63.

C programları yazarken, genellikle birbiriyle ilişkili sabit değer kümeleriyle çalışmanız gerekir. Örneğin, haftanın günlerini, yılın aylarını veya bir programdaki farklı durumları temsil etmeniz gerekebilir. 0, 1, 2 gibi ham sayılar kullanmak yerine, bu sabitler için anlamlı isimler oluşturmak üzere enum kullanabilirsiniz.

Numaralandırılmış bir tür veya enum, adlandırılmış tam sayı sabitlerinden oluşan bir grup tanımlamanıza olanak tanır. Bu, kodunuzu çok daha okunabilir ve bakımı daha kolay hale getirir. İşte temel sözdizimi:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Varsayılan olarak, ilk isim 0 değerini alır, ikincisi 1 değerini alır ve bu şekilde devam eder. Böylece MONDAY 0'a, TUESDAY 1'e ve SUNDAY 6'ya eşittir. Bu yaklaşım, 0. günün Pazartesi veya 6. günün Pazar olduğunu hatırlamaktan çok daha nettir.

enum kullanmak, kodunuzu kendi kendini belgeleyen hale getirir ve programınız boyunca sihirli sayılar (magic numbers) kullanıldığında oluşabilecek hataları önlemeye yardımcı olur.

Enum türünde değişkenler bildirebilir ve onlara enum değerleri atayabilirsiniz:

enum DayOfWeek today;
today = MONDAY;  // today değişkenine 0 atar
challenge icon

Görev

Kolay

Trafik ışığı renkleri için bir enum tanımlayan ve kullanımını gösteren bir C programı oluşturun. Programınız şunları yapmalıdır:

  1. Tam olarak şu sırayla aşağıdaki sabitleri içeren TrafficLight adında bir enum tanımlayın:
    • RED
    • YELLOW
    • GREEN
  2. Main fonksiyonu içinde:
    • enum TrafficLight tipinde currentLight adında bir değişken bildirin
    • Girdiden trafik ışığı durumunu temsil eden bir tam sayı okuyun (0, 1 veya 2)
    • Girdiye bağlı olarak currentLight değişkenine karşılık gelen enum değerini atayın:
      • Girdi 0 ise, RED atayın
      • Girdi 1 ise, YELLOW atayın
      • Girdi 2 ise, GREEN atayın
    • Mevcut ışık durumunu tam olarak şu formatta yazdırın: Current light: [enum_name]
    • Mevcut ışığın sayısal değerini tam olarak şu formatta yazdırın: Numeric value: [number]
    • Mevcut ışığa göre eylemi belirleyin ve yazdırın:
      • Eğer RED ise: Action: Stop yazdırın
      • Eğer YELLOW ise: Action: Caution yazdırın
      • Eğer GREEN ise: Action: Go yazdırın
    • Dizideki bir sonraki ışığı hesaplayın ve yazdırın:
      • Mevcut ışık RED (0) ise, bir sonraki GREEN (2) olur
      • Mevcut ışık YELLOW (1) ise, bir sonraki RED (0) olur
      • Mevcut ışık GREEN (2) ise, bir sonraki YELLOW (1) olur
    • Bir sonraki ışığı tam olarak şu formatta yazdırın: Next light: [enum_name]

Bu meydan okuma, enum sabitlerinin kodu ham sayılar kullanmaktan nasıl daha okunabilir hale getirdiğini göstermektedir. 0'ın kırmızı, 1'in sarı ve 2'nin yeşil anlamına geldiğini hatırlamak yerine, RED, YELLOW ve GREEN gibi anlamlı isimler kullanabilirsiniz. Bir enum tanımlama, atamalarda ve karşılaştırmalarda enum sabitlerini kullanma ve enum sabitlerinin temelindeki tam sayı değerlerine erişme pratiği yapacaksınız.

Kopya kağıdı

Bir enum, isimlendirilmiş tam sayı sabitlerinden oluşan bir grup tanımlamanıza olanak tanıyarak kodun ham sayılar kullanmaktan daha okunabilir olmasını sağlar:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Varsayılan olarak, ilk isim 0 değerini alır, ikincisi 1 değerini alır ve bu şekilde devam eder. Yani MONDAY 0'a, TUESDAY 1'e eşittir, vb.

Enum türünde değişkenler bildirebilir ve bunlara enum değerleri atayabilirsiniz:

enum DayOfWeek today;
today = MONDAY;  // today değişkenine 0 atar

Kendin dene

#include <stdio.h>

// TODO: Burada TrafficLight enum'ını tanımlayın

int main() {
    // Girdiyi oku
    int input;
    scanf("%d", &input);
    
    // TODO: currentLight değişkenini bildirin ve girdiye göre enum değerini atayın
    
    // TODO: Mevcut ışık durumunu yazdırın
    
    // TODO: Sayısal değeri yazdırın
    
    // TODO: Mevcut ışığa göre eylemi yazdırın
    
    // TODO: Bir sonraki ışığı hesaplayın ve yazdırın
    
    return 0;
}
quiz iconKendini test et

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

Logic & Flow bölümündeki tüm dersler