İ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 atarGörev
KolayTrafik ışığı 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:
- Tam olarak şu sırayla aşağıdaki sabitleri içeren
TrafficLightadında birenumtanımlayın:REDYELLOWGREEN
- Main fonksiyonu içinde:
enum TrafficLighttipindecurrentLightadında bir değişken bildirin- Girdiden trafik ışığı durumunu temsil eden bir tam sayı okuyun (0, 1 veya 2)
- Girdiye bağlı olarak
currentLightdeğişkenine karşılık gelen enum değerini atayın:- Girdi 0 ise,
REDatayın - Girdi 1 ise,
YELLOWatayın - Girdi 2 ise,
GREENatayın
- Girdi 0 ise,
- 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
REDise:Action: Stopyazdırın - Eğer
YELLOWise:Action: Cautionyazdırın - Eğer
GREENise:Action: Goyazdırın
- Eğer
- Dizideki bir sonraki ışığı hesaplayın ve yazdırın:
- Mevcut ışık
RED(0) ise, bir sonrakiGREEN(2) olur - Mevcut ışık
YELLOW(1) ise, bir sonrakiRED(0) olur - Mevcut ışık
GREEN(2) ise, bir sonrakiYELLOW(1) olur
- Mevcut ışık
- 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 atarKendin 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma7Yapılar (structs)
Struct Nedir?Struct TanımlamaStruct Değişkenleri OluşturmaStruct Üyelerine ErişmeStruct BaşlatmaÖzet: Öğrenci Verisi Struct'ı10Enum'lar ve Typedef
İsimlendirilmiş Sabitler için enumEnum Tanımlama ve KullanmaSwitch İfadelerinde Enum KullanımıTür Takma Adları için typedef KullanımıStruct'lar ile typedef KullanımıÖzet: Typedef ve Enum Pratiği2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları