Menu
Coddy logo textTech

'params' Anahtar Kelimesi

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 47 / 70.

params anahtar kelimesi, bir metodun aynı türden değişken sayıda argüman kabul etmesini sağlar. Çağıranların manuel olarak bir dizi oluşturmasını gerektirmek yerine, argümanları virgülle ayırarak doğrudan geçirebilirler.

Metot imzasında bir dizi parametresinden önce params anahtar kelimesini yerleştirin:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Bu çağrıların tümü çalışır
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (boş dizi)

Derleyici, argümanları otomatik olarak bir diziye sarar. Eğer halihazırda bir diziniz varsa, mevcut bir diziyi doğrudan da geçirebilirsiniz:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Hatırlanması gereken birkaç kural vardır: bir metodun yalnızca bir tane params parametresi olabilir ve bu, listedeki son parametre olmalıdır. Bunu normal parametrelerle birleştirebilirsiniz:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

params anahtar kelimesi, API'leri daha esnek ve kullanıcı dostu hale getirir; bu nedenle Console.WriteLine ve string.Format gibi metotlarda bu anahtar kelimeyle karşılaşırsınız.

challenge icon

Görev

Kolay

Herhangi bir sayıda değeri işlemek için params anahtar kelimesini kullanan esnek bir mesaj biçimlendirici oluşturalım. Değişken argümanlarla mesajları biçimlendirebilen bir yardımcı sınıf oluşturacak ve params kullanımının metotları nasıl daha çok yönlü ve kullanıcı dostu hale getirdiğini göstereceksiniz.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • MessageFormatter.cs: Formatting ad alanı (namespace) içinde, params kullanan iki metoda sahip bir MessageFormatter sınıfı oluşturun:
    • Combine(params string[] parts) - sağlanan tüm dizeleri aralarında bir boşluk olacak şekilde birleştirir ve sonucu döndürür
    • FormatList(string label, params int[] numbers) - normal bir parametreyi bir params dizisiyle birleştirir. Etiketi, ardından bir iki nokta üst üste ve virgülle ayrılmış tüm sayıları döndürmelidir (örneğin, Scores: 85, 90, 78)
  • Program.cs: Ana dosyanızda, her iki metodu da girdilerle gösterin. Bir etiket dizesi okuyun, ardından virgülle ayrılmış tam sayılardan oluşan bir satır okuyun. Üç sabit kelimeyi birleştirmek için Combine metodunu kullanın ve etiketi sayılarla birlikte görüntülemek için FormatList metodunu kullanın.

İki girdi alacaksınız:

  • Bir etiket dizesi (örneğin, Scores)
  • Virgülle ayrılmış tam sayı listesi (örneğin, 85,90,78,92)

Önce, "Hello", "params" ve "world!" kelimeleriyle Combine metodunu çağırın ve sonucu yazdırın. Ardından virgülle ayrılmış tam sayıları bir diziye ayrıştırın ve etiket ile tam sayı dizisini kullanarak FormatList metodunu çağırın, bu sonucu da yazdırın.

Örneğin, girdiler Scores ve 85,90,78 ise, çıktı şöyle olmalıdır:

Hello params world!
Scores: 85, 90, 78

Combine metodunun herhangi bir sayıda dizeyi doğrudan nasıl kabul ettiğine, FormatList metodunun ise normal parametreleri params ile nasıl karıştırabileceğinizi gösterdiğine dikkat edin - params parametresinin sadece en sonda gelmesi gerekir. Ayrıca mevcut bir diziyi de bir params metoduna geçirebilirsiniz; ayrıştırılmış tam sayılarla tam olarak bunu yapacaksınız!

Kopya kağıdı

params anahtar kelimesi, çağıranların manuel olarak bir dizi oluşturmasına gerek kalmadan bir metodun aynı türden değişken sayıda bağımsız değişken kabul etmesine olanak tanır:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Bu çağrıların tümü çalışır
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (boş dizi)

Mevcut bir diziyi doğrudan bir params metoduna geçirebilirsiniz:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

params için kurallar:

  • Bir metodun yalnızca bir tane params parametresi olabilir
  • Listedeki son parametre olmalıdır
  • Normal parametrelerle birleştirilebilir
public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Kendin dene

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // Girdileri oku
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: MessageFormatter.Combine metodunu "Hello", "params" ve "world!" ile kullanın
        // ve sonucu yazdırın
        
        
        // TODO: Virgülle ayrılmış tam sayıları bir int dizisine ayrıştırın
        // İpucu: Dizeyi bölün ve her parçayı int türüne dönüştürün
        
        
        // TODO: MessageFormatter.FormatList metodunu label ve int dizisi ile kullanın
        // ve sonucu yazdırın
        
    }
}
quiz iconKendini test et

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

Nesne Yönelimli Programlama bölümündeki tüm dersler