Merhaba, hoş geldiniz. Bu derste switch deyimi hakkında konuşmak istiyorum.
If deyimine bir alternatiftir, ancak
genellikle yalnızca belirli durumlarda kullanılır.
Ancak if deyiminizde bazı tekrarlar yapmak için güzel bir sözdizimine sahiptir.
Dolayısıyla, koşul operatörü ve if than else ifadeleri iki alternatif
arasında seçim yapan programlar yazmayı kolaylaştırır.
Soru sormak ve karar vermek çok kolay.
Ancak, çoğu zaman bir programın
birkaç alternatiften birini seçmesi gerekir.
Bu da esasen if else
if else if else if olacaktır.
Dağınıktır çünkü birkaç alternatifiniz olduğunda bunu if deyimiyle
uygulayabilirsiniz, ancak yüzlerce
else if'iniz olabilir. Bu yüzden sıkıcıdır, hatalara açıktır ve
gerçekten tam bir baş belasıdır. Bir sürü şablon kod yazmak gibi bir şey.
Yani bu sözdiziminin alternatifi ve switch içinde yapabileceğiniz
her şeyi bir if içinde de yapabilirsiniz.
Ama daha temiz, daha kolay ve aslında çok daha verimli.
Dolayısıyla, bir değişkenin değeri farklı değerlerle başarılı bir şekilde karşılaştırıldığında switch
deyimini kullanın.
Bunun anlamı, bir if deyiminiz varsa ve ardından bir else if, else if, else if, else if, else if,
else if deyiminiz varsa switch deyimini kullanın.
Şimdi eğer bu Boolean ifadeleri biraz daha karmaşıksa.
Bir switch deyimi kullanamazsınız. Bir switch deyimini yalnızca
sabit gibi bir değerle karşılaştırma yaparken kullanabilirsiniz.
İfade bu kadar karmaşık olamaz.
Ancak switch deyimini kullanmak çok daha kullanışlı ve çok verimlidir
ve çoğu dilde bu yapı da vardır. Ve çok güzel olduğunu görüyorum. Pek çok dilin c'yi
temel aldığını fark edeceksiniz.
Daha önce programlama yaptıysanız,
bu yapıların çoğunu görecek ve aşina olacaksınız
çünkü bunlar aslında c veya be dilinde ortaya çıktı.
İşte bir switch deyiminin sözdizimi. Anahtar kelimeniz var.
Ve sonra anahtarın içinde, ifade olan bu sol ve sağ parantezlere
sahipsiniz. Dolayısıyla, if anahtar sözcüğü yerine switch
anahtar sözcüğünü kullanmanız dışında, başlangıçtaki if deyimine benzer.
Daha sonra sol brakete sahip olursunuz.
Sol parantez gereklidir. Soldaki braket anahtarın gövdesini başlatır.
Ve en altta, anahtarın gövdesini sonlandıran sağdaki braketi görüyorsunuz.
Burada önemli olan diğer bir husus da bu anahtar kelimelerin durumudur.
Case aslında if deyiminin kendisi
gibidir. Yani switch aslında bir
ifadeye bakacak, doğru ya da yanlış
olup olmadığına değil.
Anahtar sadece bir değişkene ya da başka bir şeye bakıyor olabilir.
Ve sonra bu değişkeni case ifadeleri içinde değerlendirecektir.
Yani 1 değeri ifadeye eşitse,
n değeri ifadeye eşittir.
Ancak buna, switch'in en üst seviyede olması
ve ardından case'lerin her birinin bir if deyimi olması, değerleri switch'teki
ifadelerle karşılaştırması gibi bakabilirsiniz.
Yani vakalar da anahtar kelimedir. Ayrıca iki nokta üst üste işaretine de dikkat edin.
Yani bir vakanız var, bir de değeriniz var.
Ve sonra orada, birden fazla program ifadesine sahip olabilirsiniz.
Ve sonunda, bir ara anahtar kelimeniz var. Bu da başka bir anahtar kelime. Yani burada üç anahtar
kelime var, aslında dört. switch anahtar sözcüğü, case anahtar sözcüğü, break anahtar sözcüğü
ve en altta da varsayılan sözcük vardır.
Bunlar dikkat edilmesi gereken önemli hususlardır. Ayrıntılı bir örnek üzerinden gideceğiz,
ancak farklı durumlarınız olabilir. Ve yine, bu sadece bir if else, if else, if else, else if gibi yapıyor.
Dolayısıyla, birinci değer eşit ifadeyse kodu çalıştırın.
Aksi takdirde, iki değeri ifadeye eşitse,
bunu değerlendirin. Üçüncü değer ifadeye eşitse, bunu değerlendirin.
Aksi takdirde, n değeri ifadeye eşitse, bu bloğun içindeki kodu çalıştırın.
Ve vakalar için blok iki nokta üst üste ile başlar ve ara ile biter.
Ve eğer orada bir kırılma olmazsa, diğer
kasalardan düşecektir. Bunu tekrar konuşacağız.
Ve burada önemli olan son şey de bu varsayılan anahtar kelimedir. Bu aslında alttaki else,
else if, else if, else if ve then else'dir.
Dolayısıyla, diğer durumlardan hiçbiri ifadeyi değerlendirmezse bu ayarlanır.
Şimdi bahsettiğim bazı detaylardan bahsedelim.
Parantez içine alınan ifade, değerlerle başarılı bir şekilde karşılaştırılır.
Tekrar söz dizimine
dönecek olursak, ifade tüm değerlerle karşılaştırılır.
Ve değerlerden herhangi birine eşitse, o değerin içindeki kodu çalıştırırsınız.
Durumlar basit sabitler veya sabit ifadeler, bir sabite göre değerlendirilen
ifadeler olmalıdır.
Böylece x artı y'yi açabilirsiniz çünkü
x 5 ise bu sadece 10'u açacak ve değerleri 10 ile karşılaştıracaktır.
Ancak genellikle, bir tür sayıya eşit olan bir değişkeni açarsınız.
Değeri ifadenin değerine eşit olan bir case bulunursa, case'i
takip eden ifadeler yürütülür.
Birden fazla ifade eklendiğinde, bunların parantez içinde kapatılması gerekmez.
Yani birden fazla ifade
eklendiğinde, case ifadeleri
için parantez gerekmez.
Unutmayın, if deyimi için her zaman bu parantezlere sahip
olmamız gerekirdi, durum böyle değil. Bunları birbiri ardına sıralayabilirsiniz, önemli olan aradaki boşluktur.
break deyimi, belirli bir durumun sonunu işaret eder
ve deyimin yürütülmesinin sonlandırılmasına neden
olur, atlar.
Eğer orada bir mola vermezseniz, bir sonraki davada düşecektir.
Bu yüzden her vakanın sonuna break ifadesini eklemek istersiniz. Molaları dahil etmediğinizde, bu genellikle bir
hata veya başka bir şey olduğu anlamına gelir.
Bir kesme eklemek istemenizin tek nedeni, kod çalıştırmak istediğiniz birden
fazla koşulunuz olmasıdır. Yani birden fazla durumunuz
varsa, temel olarak ifade bu
durum, bu durum veya şu durum ise aynı şeyi yapın
diyorsanız, o zaman araları çıkarırsınız.
Bu nedenle, aralara dikkat edin çünkü aralar, bir sonraki durumda belirli blokların
yürütülüp yürütülmeyeceği konusunda sorunlara neden olabilir.
Varsayılan olarak adlandırılan özel isteğe bağlı durum, ifadenin değeri
durumlardan herhangi biriyle eşleşmezse yürütülür. Bu durum, vakaların hiçbirinin doğru olmaması halinde
gerçekleşecek olan düşme ile aynıdır.
İşte bir enumu değerlendirmek için bir anahtar oluşturduğumuz güzel bir örnek.
Bu durumda, weekday adında bir enum türümüz vardır ve bu tür
sadece tüm hafta içi günlerle belirtilir.
Ardından enum weekday türünde bir değişken oluşturduk ve bunu Pazartesi olarak ayarladık
ve ardından bugünü açtık.
Dolayısıyla, today değişkeninin değerine bağlı olarak case
deyimlerinden biri yürütülecektir.
Bugün Pazar'a eşitse, bugün Pazar yazdıracak
ve sonra atlayacaktır.
Bugün Pazartesi'ye eşitse, bugün Pazartesi yazdıracak ve dışarı atlayacaktır.
Bunlardan herhangi birine eşit değilse,
varsayılan duruma geçecektir. Şimdi bu örneği kod blokları halinde inceleyelim.
Burada örnek kodumuz var. Ve göreceksiniz ki bugün Pazartesi'ye eşit
olduğu için Pazartesi vakası değerlendirilecek
ve çıktının bugün Pazartesi olduğunu göreceksiniz.
Şimdi devam edelim ve bu kodu oluşturup çalıştıralım. Bugün Pazartesi, göreceğimiz
şey de bu olacak.
Çünkü burada olan şey, bugünün Pazartesi olması. Bunu, değişkeni bugün değerlendirmek
istediğiniz ifadeyi koyarsınız ve sonra onu değerlendirir.
Burada hatırlanması gereken en önemli şey, 16. satırdaki
switch deyimini başlatmak için bir ayraç ve 29. satırdaki switch adını
sonlandırmak için bir bitiş ayraçına sahip olmanızdır.
Parantez kullanmadan her case deyiminin içinde birden fazla satıra sahip olabilirsiniz.
Şimdi Pazartesi gününden sonra mola ifadesini
çıkarırsak ne olacağını görelim.
Çünkü unutmayın, mola kasadan dışarı fırlayacaktır. Ancak bunu kaldırırsak,
Salı gününe düşecek ve hem
bugün Pazartesi hem de bugün Salı için printf'lerin
yürütüldüğünü göreceksiniz.
Şimdi programı çalıştırdığımızda bugünün
Pazartesi, bugünün Salı olduğunu görüyoruz.
Mola ifadesinin önemi budur.
Mola atlıyor.
Dolayısıyla, Pazartesi ve Salı için aynı çıktıyı istiyorsanız bu yararlı olabilir.
Örneğin bazen bunun gibi case ifadeleri
görürsünüz, case Tuesday çünkü aynı çıktıyı istersiniz ve
değişkenin neye eşit olduğu önemli değildir.
Dolayısıyla, bunun gibi şeyler görebilirsiniz, ancak farklı yürütmeye sahip
ayrı case ifadeleriniz olduğunda, bu kesmeyi oraya eklemeniz gerekir.
Yani sadece Pazar, Pazartesi ve Salı günlerine bakıyoruz.
Bugün değerini Pazar gününe eşitlersek ne olur, çünkü
bununla eşleşecek hiçbir durum yoktur.
Peki, ne olacak, varsayılandan düşecek ve her neyse onu yazdıracak.
Şimdi bunu tekrar çalıştırmayı deneyelim.
Ve bugünün Pazar olduğunu görüyoruz.
Üzgünüm, yanlış değişkene ayarladım. Diyelim ki Çarşamba gününe
ayarlamak istiyorum. Pazar günü için bir davamız vardı.
Şimdi, hiçbir durumla eşleşmediği için aslında her neyse onu
yazdırdığını göreceğiz.
Yani switch için yapmanız gereken tek şey söz dizimini gerçekten ezberlemektir.
İfade parantez içine alınır, değerlendireceğiniz şey budur.
Vakaların ifadeyle eşleşmesi gerekir. Yani genellikle değişkenler kullanıyorsunuz, bu yüzden
sabitler veya belirli bir sabit değere göre değerlendirilen ifadeler olması gerekiyor.
Ve sonra her bir şey için vakalarınız ve ardından varsayılan bir tüm vakalarınız var ve araları unutmayın.
Şimdi geri dönüp biraz daha konuşalım ve switch yapısının başka bir örneğini case'lerle
birlikte inceleyelim.
Sıradaki örnekte durum biraz farklı.
Burada yaptığımız şey, kullanıcıdan veri almak ve daha sonra bunu değiştirmektir.
Bu örnekte, ana fonksiyonumuz bir çift kayan değer oluşturarak
başlar, ardından bir karakter operatörü oluşturur ve kullanıcıdan bir değer,
bir operatör ve iki değer girmesini ister.
Ve ayırt etmek için biçim belirleyicileri kullanıyor ve hepsinde de ampersands adresi var.
İşleç için girdiğiniz karaktere bağlı olarak, artı eksi veya yıldız olsun, anahtar durumunuza
dahil etmek istediğiniz şey budur.
Yani kullanıcı bir artı girdiyse, burada
bir sonraki sütunda, anahtar yapısını görüyorsunuz, operatörü açıyor.
Operatörün değerini, değişken operatörünün değerini bu case ifadelerinin her
biriyle karşılaştıracaktır. Karakterleri karşılaştırdığımız için bu case
ifadelerinin etrafında tek tırnak işareti olduğunu fark edeceksiniz.
Böylece sayıları, değişkenleri
belirli sabit değerlerle veya karakterleri belirli sabit değerlerle karşılaştırabilirsiniz.
Ve sonra her case deyiminin içinde belirli bir format yazdırıyoruz.
Değer bir artı değer iki, değer bir eksi değer iki.
Aslında baskılarımızda hesaplama yapıyoruz.
Ve sonra yine bu önemli ara ifadeleri görüyorsunuz, bunlar öne
çıkıyor ve diğer vakalardan herhangi birine düşmek istemiyorsanız bunlara ihtiyacınız var.
Ayrıca, bölücüde ileri eğik çizginin bulunduğu son case deyiminde bir if deyimimiz olduğunu
fark etmişsinizdir.
Case'in etrafında herhangi bir parantezimiz yok çünkü
her case'te parantez olmadan birden fazla deyimimiz olabilir.
Son durumda, iki değeri 0'a eşitse, 0'a bölmediğimizden
emin olmak için küçük bir kontrol yapıyoruz.
Ve eğer 0'a bölmezsek, o zaman gerçekten bölme işlemimizi gerçekleştireceğiz.
Ve bu davanın en sonunda bir ara daha vereceğiz.
Varsayılan durumumuz, nasıl işleyeceğimizi bilmediğimiz bir operatör girdiğinizi söylemektir.
Ancak switch ifadesi çok etkilidir.
Birçok farklı değeri belirli bir değişkenle karşılaştırdığınızda
ve daha sonra farklı şeyler yapmak istediğinizde yazmak çok hızlıdır.
Bahsetmek istediğim son husus, karar alma süreciyle ilgili olarak yapılacak açıklamaydı.
Bu doğrudan bir karar ifadesi değildir,
daha çok bir etiket kullanarak farklı bir kod satırına atlamaktır, ancak
c'de mevcuttur ve bu yüzden bundan bahsetmek istedim.
Go to ifadesinin iki bölümü vardır: etiket ve go to anahtar sözcüğü.
Daha önce Fortran veya diğer temel dillerde
programlama yapmış olanlarınız muhtemelen bunu tanıyacak ve muhtemelen oldukça
fazla kullanmış olacaksınız.
Şimdi c'ye gelirsek, gerçekten kullanmaya
gerek yok. Oldukça faydalı olduğunu gördüğüm
birkaç durum var, bunları birazdan açıklayacağım, ancak gitmeniz gereken yer bazı kodlara atlamak
ve herhangi bir kod satırına gidebilirsiniz.
İnsanların bunu kullanmayı sevmemesinin nedenlerinden biri, takip etmenin çok zor olması.
Bir programın bakımını yaparken ve program sıralı ise, satır satır ilerlersiniz,
while döngülerinde if ifadeleri kullanırsınız.
While döngülerinde if ifadelerinin olması yeterince kötü.
Ancak şimdi, temelde kaynak kodunuzun 27. satırında olduğunuz bir şey varsa
ve sadece go to anahtar sözcüğü dışında hiçbir neden olmadan 800. satıra atlayacaksanız, birdenbire
bir ton kodu atlıyorsunuz ve bunu sürdürmek ve takip etmek çok zor.
Yani gidilecek iki parça ve etiket adı. Etiket, bir değişkeni adlandırmak
için kullanılan kurallara uygun olarak adlandırılır, alfanümerik karakterler, rakamlarla
başlayamazsınız, alt çizgi ile başlayabilirsiniz.
alt çizgi ile başlayabilirsiniz.
Temel olarak, sadece go to anahtar kelimesini kullanırsınız ve bazı tanımlayıcılara gidersiniz,
ikinci bölüm. İkinci bölüm bir yerlerde bir etiket.
Dolayısıyla, kod satırına gerçekten atlamak için, o kod satırını etiketlemeniz gerekir.
İkinci bölüm olduğunu belirten bir açıklama olmalı.
Şimdi size bunun bir örneğini göstereceğim, ancak bakımla ilgili sorunlar
nedeniyle bunu asla kullanmamalısınız.
Ancak, daha önce programladıysanız ve kullanmaya alışkınsanız bundan bahsetmek istedim.
C'de, gerçekten çok fazla kullanmanıza gerek yok.
Faydalı olabileceğini düşündüğüm bir kullanım örneği var.
Geçen gün bir programcı arkadaşımla çalışıyordum ve
elinde bir sürü iç içe geçmiş döngü veya iç içe
geçmiş if deyimi vardı.
Ancak döngüler gerçekten de muhtemelen daha iyi bir örnektir. Döngüler, hatırlayın, tekrar eden kodlar. Bir sürü iç içe döngüsü vardı.
Ve en içteki iç içe geçmiş döngüde, beşinci gibi, tüm
döngülerden atlamak istedi çünkü bir koşulu vardı.
Ve bu yüzden tüm o döngülerden atlamak için giderdi.
Döngülerden çıkmanın diğer yolu fren anahtar sözcüğünü kullanmaktır,
ancak fren yalnızca en içteki döngüden çıkacaktır.
Bu yüzden, bir sürü bayrak ayarlamadan ve her bir döngüden
çıkmak için bir sürü if deyimine sahip olmadan gerçekten
etkili bir yol yoktu. Oldukça faydalı olduğunu düşündüğüm bir durumdu
çünkü yazmanız gereken kod miktarını azaltıyordu ve neler olup bittiği konusunda oldukça netti.
Belirli bir koşulu karşıladığınız için iç içe geçmiş tüm
döngülerden atlıyordunuz.
Ve bu sadece bir vaka. Ancak çoğunlukla, gerçekten gitmenize gerek yoktur
ve bahsettiğim nedenlerden dolayı çok sorunludur, her yere atladığınızda kodu takip etmek zordur.
Ama tıpkı diğer dillerde kullandığınız gibi kullanıyorsunuz.
Etiket adıyla birlikte bir anahtar kelimeniz var.
Kodunuzda gerçekleşecek olan şey, etiketin bulunduğu kod satırına atlamak olacaktır.
Böylece her türlü kodu atlayabilirsiniz.
Buradaki örnekte, top adında bir etiketimiz var ve iki nokta üst üste
işaretine sahip. Etiket olduğunu böyle anlarsınız.
Ve üstte bazı açıklamalar var. Ve bunun en altında,
bir if ifadeniz var. Ve diyorsunuz ki, eğer karakter y'ye eşitse, en üste git.
Yani yine, kodunuzda nasıl oradan oraya atlayabileceğinizi ve bunun takip etmeyi çok zorlaştırdığını görüyorsunuz.
Bu nedenle, çok, çok, çok sayıda iç içe döngüye sahip değilseniz ve tüm döngülerden atlamak istemiyorsanız,
temel olarak kullanmayın. Teşekkür ederim.