Alıştırma - if deyimleriyle karar mantığı oluşturma
- 19 dakika
Uygulamaların çoğu çok sayıda yürütme yolu içerir. Örneğin, bir uygulama kullanıcının seçtiği menü seçeneğine göre farklı yürütme yolları uygulayabilir. Geliştiriciler, farklı yürütme yollarını kod dalları olarak uygulayan koda başvurur.
En yaygın kullanılan kod dallanma deyimi deyimidir if .
if deyimi, parantez içine alınmış bir Boole ifadesini kullanır. İfade true ise, deyiminden if sonraki kod yürütülür. Yoksa, .NET çalışma zamanı kodu yoksayar ve yürütmez.
Bu alıştırmada bir oyun oluşturarak deyim yazma if alıştırması yapacaksınız. İlk olarak oyunun kurallarını tanımlayacak, ardından bunları kodda uygulayacaksınız.
Üç tane altı taraflı zar atma simülasyonu Random.Next() yapmak için yöntemini kullanacaksınız. Puanı hesaplamak için yuvarlanan değerleri değerlendireceksiniz. Puan rastgele bir toplamdan büyükse kullanıcıya kazanan bir ileti görüntülersiniz. Puan kesmenin altındaysa kullanıcıya bir kayıp iletisi görüntülersiniz.
- Attığınız iki zar aynı değerle sonuçlanırsa çifte zar attığınız için ekstra iki puan kazanırsınız.
- Attığınız üç zarın tümü de aynı değerle sonuçlanırsa üçlü zar attığınız için ekstra altı puan kazanırsınız.
- Attığınız üç zarın toplamı artı ekstra puanlar 15 veya daha büyük olursa oyunu kazanırsınız. Aksi takdirde kaybedersiniz.
Deyimi hakkında if daha fazla bilgi edindikçe kuralları daraltacaksınız.
Önemli
Bu alıştırmada sınıfı kapsamlı bir şekilde System.Random kullanılır. Nasıl çalıştığını yenileyiciye Random.Next() ihtiyacınız varsa "C# kullanarak .NET Sınıf Kitaplığı'ndan yöntemleri çağırma" başlıklı Microsoft Learn modülüne başvurabilirsiniz.
Kodlama ortamınızı hazırlama
Bu modül, örnek kod oluşturma ve çalıştırma işleminde size yol gösteren etkinlikleri içerir. Geliştirme ortamınız olarak Visual Studio Code kullanarak bu etkinlikleri tamamlamanız tavsiye edilir. Bu etkinlikler için Visual Studio Code'un kullanılması, dünya çapındaki profesyoneller tarafından kullanılan bir geliştirici ortamında daha rahat kod yazmanıza ve çalıştırmanıza yardımcı olur.
Visual Studio Code'u açın.
Visual Studio Code'u açmak için Windows Başlat menüsü (veya başka bir işletim sistemi için eşdeğer kaynak) kullanabilirsiniz.
Visual Studio Code Dosyası menüsünde Klasör Aç'ı seçin.
Klasör Aç iletişim kutusunda Windows Masaüstü klasörüne gidin.
Kod projelerini tuttuğunuz farklı bir klasör konumunuz varsa, bunun yerine bu klasör konumunu kullanabilirsiniz. Bu eğitim için önemli olan, kolayca bulunabilecek ve anımsanabilecek bir konuma sahip olmaktır.
Klasör Aç iletişim kutusunda Klasör Seç'i seçin.
Yazarlara güvenip güvenmeyişinizi soran bir güvenlik iletişim kutusu görürseniz Evet'i seçin.
Visual Studio Code Terminal menüsünde Yeni Terminal'i seçin.
Terminal panelindeki bir komut isteminin geçerli klasörün klasör yolunu görüntülediğine dikkat edin. Örneğin:
C:\Users\someuser\Desktop>Not
Korumalı alan veya barındırılan bir ortam yerine kendi bilgisayarınızda çalışıyorsanız ve bu C# serisindeki diğer Microsoft Learn modüllerini tamamladıysanız, kod örnekleri için zaten bir proje klasörü oluşturmuş olabilirsiniz. Bu durumda, TestProject klasöründe bir konsol uygulaması oluşturmak için kullanılan sonraki adımı atlayabilirsiniz.
Terminal komut isteminde, belirtilen klasörde yeni bir konsol uygulaması oluşturmak için aşağıdaki istemi girin:
dotnet new console -o ./CsharpProjects/TestProjectBu .NET CLI komutu, belirtilen klasör konumunda yeni bir C# konsol uygulaması projesi oluşturmak için bir .NET program şablonu kullanır. Komut sizin için CsharpProjects ve TestProject klasörlerini oluşturur ve dosyanızın
.csprojadı olarak TestProject kullanır.Dosyaların zaten var olduğunu belirten bir ileti görüntülenirse, sonraki adımlarla devam edin. Mevcut proje dosyalarını yeniden kullanacaksınız.
EXPLORER görünümünde CsharpProjects klasörünü genişletin.
TestProject klasörünü ve iki dosyayı, Program.cs adlı bir C# program dosyasını ve TestProject.csproj adlı bir C# proje dosyasını görmeniz gerekir.
Visual Studio Code Dosyası menüsünde Klasör Aç'ı seçin.
Klasör Aç iletişim kutusunda CsharpProjects klasörünü ve ardından Klasör Seç'i seçin.
EXPLORER görünümünde TestProject klasörünü genişletin ve Program.cs'ı seçin.
Mevcut kod satırlarını silin.
Bu modül sırasında kod örnekleri oluşturmak, derlemek ve çalıştırmak için bu C# konsol projesini kullanacaksınız.
Terminal panelini kapatın.
Üç rastgele sayı oluşturan ve bunları çıkışta görüntüleyen kod yazma
Visual Studio Code'da boş bir Program.cs dosya açtığınızdan emin olun.
Bu alıştırmanın ilk kodunu oluşturmak için aşağıdakileri girin:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");Girdiğiniz kodu gözden geçirmek için bir dakikanızı alır.
Başlamak için sınıfının yeni bir örneğini
System.Randomoluşturacak ve adlıdicebir değişkende nesnesine başvuru depolaacaksınız. Ardından, ve arasındakiRandom.Next()diceolası değerleri kısıtlamak için hem alt hem de üst sınırları sağlayarak nesnede yöntemini1üç kez çağırırsınız6(üst sınır özeldir). Üç rastgele sayıyı sırasıyla ,roll1veroll2değişkenlerineroll3kaydedersiniz.Ardından, üç zar atmasını toplayarak değeri adlı
totalbir tamsayı değişkenine kaydedersiniz.Son olarak, dize ilişkilendirmesini kullanarak üç değeri görüntülemek için yöntemini kullanırsınız
WriteLine().Kodu çalıştırdığınızda aşağıdaki iletiyi görmeniz gerekir (sayılar farklı olacaktır).
Dice roll: 4 + 5 + 2 = 11Bu ilk görev bir kurulum göreviydi. Artık oyunu daha ilginç hale getirmek için karar mantığını kodunuza ekleyebilirsiniz.
Toplam değişkeninin değerine göre farklı iletiler görüntülemek için bir if deyimi ekleyin
Visual Studio Code Düzenleyicisi'nde, kod dosyanızın en altındaki imleci bulun ve boş bir kod satırı oluşturun.
İlk oyun özelliğinizi oluşturmak için aşağıdaki
ifdeyimleri girin.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Bu iki
ifdeyim, kazanan ve kaybeden senaryoları işlemek için kullanılır. İlkififadeyi incelemek için bir dakika bekleyin.deyiminin
ifüç bölümden oluşan bir ifade olduğuna dikkat edin:-
ifanahtar sözcüğü - Parantez içindeki bir
() - Küme ayraçları ile tanımlanan bir
{ }
Çalışma zamanında,
total > 14Boole ifadesi değerlendirilir. Bu doğru bir deyimse (değeritotalbüyüktür14) yürütme akışı kod bloğunda tanımlanan koda devam eder. Başka bir deyişle, küme ayraçları içindeki kodu yürütür.Ancak Boole ifadesi false ise (değerinden
totalbüyük14değilse) yürütme akışı kod bloğunu atlar. Başka bir deyişle, küme ayraçları içindeki kodu yürütmez.Son olarak, ikinci
ifdeyimi, kullanıcının kaybetmesi durumundaki iletiyi denetler. Sonraki ünitede, bu iki deyimi amacı daha açık bir şekilde ifade eden tek bir deyime kısaltmak için deyimindeki bir varyasyonuifkullanacaksınız.-
Boole ifadesi nedir?
Boole ifadesi, true veya falseboole değeri döndüren herhangi bir koddur. En basit Boole ifadeleri yalnızca ve truedeğerleridirfalse. Alternatif olarak, Boole ifadesi veya truedeğerini false döndüren bir yöntemin sonucu olabilir. Örneğin, bir dizenin başka bir dize içerip içermediğini değerlendirmek için string.Contains() yöntemini kullanan basit bir kod örneği aşağıda verilmiştir.
string message = "The quick brown fox jumps over the lazy dog.";
bool result = message.Contains("dog");
Console.WriteLine(result);
if (message.Contains("fox"))
{
Console.WriteLine("What does the fox say?");
}
message.Contains("fox") bir veya true değeri döndürdüğünden false Boole ifadesi olarak niteler ve deyiminde if kullanılabilir.
İki değeri karşılaştırmak için işleçler kullanılarak diğer basit Boole ifadeleri oluşturulabilir. İşleçler şunları içerir:
-
==, eşitliği test etmek için "eşittir" işlecini -
>, soldaki değerin sağdaki değerden büyük olup olmadığını test etmek için "büyüktür" işleci -
<, soldaki değerin sağdaki değerden küçük olduğunu test etmek için "küçüktür" işlecini kullanın -
>=, “büyüktür veya eşittir işleci”dir -
<=, “küçüktür veya eşittir işleci”dir - vb.
Not
Microsoft Learn'de C# eğitim serisi, modülün tamamını Boole ifadelerine ayırır. Boole ifadesi oluşturmak için kullanabileceğiniz birçok işleç vardır ve bu modülde buradaki temel bilgilerden yalnızca birkaçını ele alacağız. Boole ifadeleri hakkında daha fazla bilgi için "C# dilinde karar vermek için Boole ifadelerini değerlendirme" başlıklı Microsoft Learn modülüne bakın.
Bu örnekte Boole ifadesini total > 14değerlendirmişsinizdir. Ancak, Boole ifadesini total >= 15 seçebilirdiniz çünkü bu örnekte bunlar aynıdır. Oyunun kurallarının "Üç zarın toplamı, artı herhangi bir bonus 15 veya daha büyükse, oyunu kazanırsınız" değerini belirttiğinden, büyük olasılıkla ifadeyi >= 15 uygulamalısınız. Alıştırmanın sonraki adımında bu değişikliği yapacaksınız.
Kod bloğu nedir?
Kod bloğu, bir açılış ve kapanış küme ayracı simgesi { } ile tanımlanan bir veya daha fazla kod satırı koleksiyonudur. Yazılım sisteminizde tek bir amacı olan eksiksiz bir kod birimini temsil eder. Bu durumda, çalışma zamanında, Boole ifadesi true olursa kod bloğundaki tüm kod satırları yürütülür. Buna karşılık, Boole ifadesi false ise, kod bloğundaki tüm kod satırları yoksayılır.
Ayrıca kod bloklarının başka kod blokları içerebileceğini de bilmeniz gerekir. Aslında, bir kod bloğunun uygulamalarınızdaki başka bir kod bloğunun içinde "iç içe" olması yaygın bir durumdur. Bu modülün ilerleyen bölümlerinde, başka bir kod bloğunun içinde bir if deyim oluşturduğunuzda kendi kod bloklarınızı iç içe yerleştirmeye başlayacaksınız.
Not
Microsoft Learn'de C# eğitim serisi, kod bloklarını anlamaya yönelik bir modülün tamamını ayırır. Kod blokları, kod düzenlemesini ve yapısını anlamanın merkezidir ve değişken kapsamının sınırlarını tanımlar. Kod blokları hakkında daha fazla bilgi için "C# dilinde kod bloklarını kullanarak değişken kapsamını ve mantığını denetleme" başlıklı modüle bakın.
Çiftler bonusunu uygulamak için başka bir if deyimi ekleyin
Daha sonra şu kuralı uygulayabilirsiniz: "Atladığınız iki zar aynı değere neden olursa, çiftleri yuvarlamanız için iki bonus puan alırsınız". Önceki adımdaki kodu, aşağıdaki kod listesi ile eşleşecek şekilde değiştirin:
Visual Studio Code Düzenleyicisi'nde, imleci ilk
ifdeyimin üzerindeki boş kod satırında bulun."Çiftler" oyun özelliğinizi oluşturmak için aşağıdaki
ifdeyimi girin.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }Burada üç Boole ifadesini birleştirerek tek bir kod satırında tek bir bileşik Boole ifadesi oluşturacaksınız. Buna bazen bileşik koşul adı verilir. İki kanal karakteriyle ayrılmış üç iç parantez kümesini birleştiren bir dış parantez kümeniz var.
Çift boru karakteri
||, mantıksal VEYA işleci olup temel olarak “Boole ifadesinin tamamının true olması için soldaki ifadenin VEYA sağdaki ifadenin true olması gerektiğini” belirtir. İki Boole ifadesi de false ise Boole ifadesinin tamamı false olur. Değerlendirmeyi üçüncü bir Boole ifadesine genişletebilmek için iki mantıksal OR işleci kullanırsınız.İlk olarak değerini değerlendirirsiniz
(roll1 == roll2). Bu true olursa ifadenin tamamı true olur. Yanlışsa değerini değerlendirirsiniz(roll2 == roll3). Bu true olursa ifadenin tamamı true olur. Yanlışsa değerini değerlendirirsiniz(roll1 == roll3). Bu true olursa ifadenin tamamı true olur. Bu false olursa, ifadenin tamamı false olur.Bileşik Boole ifadesi true ise aşağıdaki kod bloğunu yürütürsunuz. Bu defa iki kod satırı vardır. Birinci kod satırı, kullanıcıya bir ileti yazdırır. İkinci kod satırı,
totaldeğerini2artırır.Kodunuzun okunabilirliğini geliştirmek için ikinci
ifdeyimini aşağıdaki gibi güncelleştirin:if (total >= 15)Artık kazanan bir ruloyu
>=değerlendirmek için kullanılan ifadede işlecini kullandığınıza dikkat edin. işleci>="büyüktür veya eşittir" anlamına gelir. Sonuç olarak, yerinetotaldeğerini15karşılaştırabilirsiniz14. Bu değişikliklerle, kazanan bir ruloyu değerlendirmek için kullandığınız ifade artık kaybeden bir roll için değerlendirdiğiniz ifadeye benzer. Bu, kodunuzun anlaşılmasını kolaylaştırmaya yardımcı olur (daha okunabilir). Tamsayı değerleriyle ilgilendiğiniz için, yeni ifadeniz(total >= 15)daha önce(total > 14)yazdıklarınızla aynı şekilde çalışır.Kodunuzu gözden geçirmek için bir dakikanızı alır.
Kodunuz, aşağıdakilerle eşleşmelidir:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Kazanan ve kaybeden ruloları değerlendirmek için kullanılan ifadeler arasındaki iyileştirilmiş hizalamaya dikkat edin.
Üçlü bonusu uygulamak için başka bir if deyimi ekleyin
Ardından, şu kuralı uygulayabilirsiniz: "Atladığınız üç zarın hepsi aynı değere neden olursa, üçlü atarak altı bonus puan alırsınız." Önceki adımlarda yer alan kodu aşağıdaki kod listesiyle eşleşecek şekilde değiştirin:
Visual Studio Code Düzenleyicisi'nde , "doubles"
ifdeyiminizin kod bloğunun altında boş bir kod satırı oluşturun."Üçlü" oyun özelliğinizi oluşturmak için aşağıdaki
ifdeyimi girin.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }Burada iki Boole ifadesini birleştirerek tek bir kod satırında tek bir bileşik Boole ifadesi oluşturursunuz. İki ve işaretiyle ayrılmış iki iç parantez kümesini birleştiren bir dış parantez kümeniz var.
Çift ve karakteri
&&, mantıksal VE işleci olup temel olarak “yalnızca iki ifadenin true olması durumunda ifadenin tamamının true olduğunu” belirtir. Bu durumda,roll1,roll2değerine veroll2,roll3değerine eşitse, kesintiyle birlikteroll1,roll3değerine eşit olmalı ve kullanıcı üçlü zar atmış olmalıdır.Visual Studio Code Dosyası menüsünde Kaydet'e tıklayın.
Kodunuzu gözden geçirmek için bir dakikanızı alır.
Kodunuzun aşağıdakilerle eşleştiğinden emin olun:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }EXPLORER görünümünde, TestProject klasör konumunuzdaki bir Terminali açmak için TestProjesi'ne sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin.
Terminal paneli açılmalı ve Terminal'in TestProject klasör konumunuza açık olduğunu gösteren bir komut istemi içermelidir.
Terminal komut isteminde kodunuzu çalıştırmak için dotnet run yazın ve Enter tuşuna basın.
Not
"Çalıştırılacak proje bulunamadı" iletisini görürseniz Terminal komut isteminin beklenen TestProject klasörü konumunu gösterdiğinden emin olun. Örneğin:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Aşağıdaki sonuçlardan birine benzeyen bir çıktı görmeniz gerekir:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose.Veya şununla:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose.Veya şununla:
Dice roll: 5 + 6 + 4 = 15 You win!Veya şanslıysanız şununla karşılaşırsınız:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!Ama bekle, oyuncuyu hem üçlü bonus hem de çift bonusla ödüllendirmeli misin? Ne de olsa, üçlü bir zar, çiftleri de yuvarladıklarını ifade eder. İdeal olarak, bonuslar yığılmamalıdır. İki ayrı bonus koşulu olmalıdır. Bu, düzeltilmesi gereken bir mantık hatasıdır.
Mantığınızdaki sorunlar ve kodu geliştirme fırsatları
Bu iyi bir başlangıç olsa da ve deyimi, Boole ifadeleri, kod blokları, mantıksal OR ve AND işleçleri hakkında if çok fazla bilgi edinmiş olmanıza rağmen, geliştirebileceğiniz çok şey vardır. Bunu bir sonraki ünitede yapacaksınız.
Özet
- Kod mantığınızı dallandırmak için
ifdeyimini kullanın. Boole ifadesi true olursaifkarar deyimi, kod bloğundaki kodu yürütür. Aksi takdirde çalışma zamanı, kod bloğunu atlar ve kod bloğundan sonra bir sonraki kod satırına devam eder. - Boole ifadesi, Boole değeri döndüren herhangi bir ifadedir.
- Boole işleçleri, solundaki ve sağındaki iki değeri, eşitlik, karşılaştırma ve daha fazlası açısından karşılaştırır.
- Kod bloğu, küme ayraçları
{ }ile tanımlanır. Tek bir birim olarak değerlendirilmesi gereken kod satırlarını toplar. - Mantıksal VE işleci
&&, ifadenin tamamının true olması için her iki alt ifadenin de true olması gerekecek şekilde iki ifadeyi toplar. - Mantıksal VEYA işleci
||, alt ifadelerden birinin true olması durumunda ifadenin tamamı true olacak şekilde iki ifadeyi toplar.