C# Dizilerini Anlama
C#'ta diziler, geliştiricilerin aynı türdeki öğeler koleksiyonunu bitişik hafıza konumlarında depolamasını sağlayan temel bir veri yapısıdır. Diziler tek boyutlu, çok boyutlu veya zikzak olabilir.
Bu C# dizi makalesi, Layla Porter's öğretici videosu "C# for Beginners Part 5 - Arrays and More Loops."dan esinlenmiştir. Videosunda Layla dizilerin temellerine dalarak, C#'ta daha fazla döngü tekniği tanıtarak izleyicileri koleksiyonları nasıl yönetecekleri ve veriler arasında nasıl etkin bir şekilde yineleyecekleri konusunda temel becerilerle donatıyor.
Dizileri Anlamak
Layla, C#'ta sabit uzunluklu koleksiyonlar olarak dizileri açıklayarak başlar. Bazı diğer programlama dillerinin aksine, dizilerin boyutunun dinamik olarak değişebildiği, C#'ta diziler oluşturulduktan sonra değiştirilemez. Bu, boyutlarının bellek tahsisi kısıtlamaları nedeniyle başlangıçtan sonra değiştirilemeyeceği anlamına gelir.
Basit Konsol Etkileşimi: Favori Peynirinizi Seçmek
Aşağıdaki kodda Layla (1:50) kullanıcıya seçmeleri için bir öğe listesi sunmanın yollarını ilk gösterir.
Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");Bu kod, ilk olarak Console.WriteLine kullanarak kullanıcıya en sevdiği peynirin ne olduğunu soran bir mesajı konsola yazdırır. Daha sonra Console.WriteLine'i dört kez daha kullanarak peynirlerin bir listesini konsola yazdırır. Kod daha sonra Console.ReadLine kullanarak kullanıcının konsoldan girdisini okur ve favouriteCheese değişkenine kaydeder. Son olarak, kod Console.WriteLine'i tekrar kullanarak kullanıcının en sevdiği peyniri içeren bir mesajı konsola yazdırır.
Layla, 2:04'te bu kodun nasıl çalıştığını göstermek için çalıştırır:

Bir Dizi Deklare Et - Dizi Başlatma
Örneklemek açısından Layla, ağcıl listesini, kullanıcılara menü olarak sunulan peynirlerin bir listesini göstererek bir dizi (2:30) ve bunları ilk değerlerle başlatmanın nasıl olacağını göstererek başlar. Bir tek boyutlu dizi tanımlamanın sözdizimini (2:30) ve bunları başlangıç değerleri ile kıvırcık parantezler içinde doldurmayı tanıtır (2:54).
string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };Dizilerde sıfır bazlı indekslemenin önemini vurgular, tek boyutlu bir dizideki ilk öğeye 0 indeks kullanılarak erişildiği yerde. Layla daha sonra, bir döngü kullanarak dizilerde nasıl yineleme yapacağını gösterir. Bu döngü yapısı programlamada belirli bir koşula dayanarak kodun tekrarlı yürütülmesine izin verdiği için çok önemlidir.
Döngüleri Uygulamak
Döngülerle ilgili olarak, Layla döngünün üç temel bileşeni ile for döngüsünü tanıtır: başlangıç noktası, koşul ve yineleyici. Bu döngü, bir dizinin uzunluğuna dayalı olarak dizinin elemanları arasında döngü yaparak yineleme yapar.
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(cheeses[i]);
}for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(cheeses[i]);
}O, saat 4:44'te cheeses.Length'nin dizideki elemanların sayısını verdiğini vurguluyor, bu da döngünün her bir elemandan düzgün bir şekilde geçmesini sağlıyor. i değişkeni indeksler boyunca iterasyon yapmak için bir indeks değişkeni olarak çalışır. Bu, yukarıda gösterilen şekilde dizinin elemanlarına erişmeden Console.WriteLine metodunu birden çok kez yazmadan tek tek dizi elemanlarını etkili bir şekilde yazdırır. Layla, 6:17'de bu döngünün çıktısını önceki örnektekiyle aynı olduğunu göstermek için uygulamayı çalıştırır:

Sıralama ve Değişmezlik
Layla, sıralamanın faydasını açıklıyor ve daha sonra saat 7:17'de Sort metodunu kullanarak bir diziyi alfabetik olarak sıralamayı gösteriyor; sıralamanın aslında dizilerin C#'da değiştirilemez olmasından dolayı görünmeyen bir şekilde yeni bir dizi oluşturduğunu belirtiyor. Bu, veri manipülasyonunun bellek ve performansı nasıl etkilediğini anlamak için önemli bir noktadır.
Array.Sort(cheeses);Array.Sort(cheeses);Ayrıca, 8:10'da bir dizi öğesinin nasıl doğrudan değiştirilebileceğini, yeni bir dizi oluşturmadan, değişmezlik içinde değiştirilebilirliği işlemenin nasıl olduğunu gösterir. Değiştirilecek elemanın indeksi, cheeses dizi değişkeninden sonra köşeli parantezler içinde geçer:
cheeses[0] = "Roquefort";cheeses[0] = "Roquefort";Bu, 0 indeksindeki "Brie" dizi elemanını "Roquefort" yeni değeriyle değiştirecektir.
Peynir Listesini Güncelleme: Yeni Girdilerle İşleme (8:46)
Layla, mevcut bir listeye değer eklemenin nasıl yapılacağını açıklar. Mevcut değerleri ve yeni değeri alarak her ikisini de içeren yeni bir dizi oluşturarak ve referansımızı bu yeni diziye doğrulatarak çalışırız. Aşağıdaki kod nasıl çalıştığını gösterir:
var favouriteCheese = Console.ReadLine();
bool containsFavourite = false;
foreach (var cheese in cheeses)
{
if (favouriteCheese == cheese)
{
containsFavourite = true;
}
}
if (!containsFavourite)
{
cheeses = cheeses.Append(favouriteCheese).ToArray();
}var favouriteCheese = Console.ReadLine();
bool containsFavourite = false;
foreach (var cheese in cheeses)
{
if (favouriteCheese == cheese)
{
containsFavourite = true;
}
}
if (!containsFavourite)
{
cheeses = cheeses.Append(favouriteCheese).ToArray();
}Bu örnek, temel dizi işlemleri ve foreach döngüsü kullanarak peynirin listede olup olmadığını kontrol etme işlemlerini basit bir şekilde gösteriyor. Listede değilse, Layla (13:33'te) peyniri diziye Append metodunu System.Linq'den kullanarak ekliyor.
Layla, saat 13:50'te kodun hata verdiğini söylüyor, çünkü cheeses ve Append'in sonucu farklı türdedir. Append bir IEnumerable döndürür, bu koleksiyonlar için bir arayüzdür. Bu sorunu çözmek için, IEnumerable'yi ToArray() metodunu kullanarak bir diziye çeviriyoruz ve sonra tekrar cheeses'ye atıyoruz. Layla, sarı dalgalı çizginin bir derleyici uyarısı olduğunu, favouriteCheese'un null olması gibi potansiyel sorunları belirttiğini, ancak bu demoda güvenlik kontrollerini görmezden geldiğimizi belirtiyor.
Peynir Listesini Güncelleme ve Yazdırma
Layla, dizimize yeni bir öğe eklediğimizde, güncellenmiş listeyi ekrana yazdırmamız gerektiğini açıklar. Bunu başarmak için, dizinin şimdi daha fazla öğe içerdiğini göstererek her elemanı ve indeksini yan yana yazdırmak için bir for döngüsü kullanırız.
Console.WriteLine("The new list:");
for (var i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(i + " " + cheeses[i]);
}
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");Console.WriteLine("The new list:");
for (var i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(i + " " + cheeses[i]);
}
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");Bu, C#'taki dizilerin dinamik doğasını gösterir, yeni öğeler eklemenin ve dizinin içeriğini yazdırarak güncellemeyi doğrulamanın nasıl olduğunu gösterir.
Layla daha sonra yeni eklenen peyniri göstermek için uygulamayı çalıştırır (15:19):

Nesne Dizileri ile Gelişme
Layla, anlayışı genişletmek için (16:14'te) Cheese sınıfını Name ve Strength özelliklerine sahip yaparak nesnelerden oluşan dizileri tanıtıyor. Daha sonra, string listesini Cheese nesnelerinden oluşan bir dizi oluşturmak için değiştiriyor ve iterasyon sırasında nesneler içindeki özelliklere nasıl ulaşılacağını gösteriyor (17:46).
class Cheese
{
public string Name { get; set; }
public int Strength { get; set; }
public Cheese(string name, int strength)
{
Name = name;
Strength = strength;
}
}
Cheese[] cheeses = new Cheese[]
{
new Cheese("Stilton", 3),
new Cheese("Cheddar", 2),
new Cheese("Pineapple", 1),
new Cheese("Brie", 2)
};
cheeses[0] = new Cheese("Roquefort", 4);class Cheese
{
public string Name { get; set; }
public int Strength { get; set; }
public Cheese(string name, int strength)
{
Name = name;
Strength = strength;
}
}
Cheese[] cheeses = new Cheese[]
{
new Cheese("Stilton", 3),
new Cheese("Cheddar", 2),
new Cheese("Pineapple", 1),
new Cheese("Brie", 2)
};
cheeses[0] = new Cheese("Roquefort", 4);Bu bölüm, dizilerin karmaşık veri yapıları kapsayabileceğine dair temel bir anlayış sağlar ve programlamada esneklik ve güç sunar.
Peynir Nesnesini Döngülerde Kullanma
Layla şimdi güncellenmiş listedeki tüm öğeleri ekrana nasıl yazdıracağını gösteriyor. Bu senaryoda, her peynir Name ve Strength özelliklerine sahip bir nesne olarak temsil edilir. for döngüsü, her bir iterasyonun doğrudan tek bir dizi elemanını işleme aldığı Cheese nesnelerinden oluşan bu dizi boyunca iterasyon yapar.
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}Bu döngü, cheeses dizisinde saklanan Cheese nesnelerinin özelliklerine erişim sağlar. Layla, saat 20:34'te programı çalıştırıyor ve çıktı şu şekildedir:

Sonuç
Sonuç olarak, Layla Porter'in C#'da diziler ve döngüler üzerine olan eğitimi, bu temel kavramları anlamaları için yeni başlayanlara sağlam bir temel sağlıyor. Dizileri ve çeşitli döngü yapılarını öğrenerek, C# geliştiricileri programlarında veri yapılarını etkili bir şekilde kullanabilir ve koleksiyonlar üzerinde iterasyon yapabilir. Bu temelleri anlamak, daha karmaşık uygulamalar geliştirmek ve C# programlamasının diğer yönlerini keşfetmek için çok önemlidir.
Layla'nın örneklerini ve açıklamalarını izleyerek, yeni başlayanlar kendi C# projelerinde dizileri ve döngüleri etkili bir şekilde kullanmak konusunda güven kazanıyorlar. C# koleksiyonları ve gelişmiş iki boyutlu ve düzensiz diziler hakkında daha derinlemesine bir inceleme için, öğrenenlerin sonraki dersleri ve pratik egzersizleri keşfetmeleri teşvik edilir.




