İsimlendirilmiş Argümanlar
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 49 / 70.
Adlandırılmış bağımsız değişkenler, konuma güvenmek yerine ismini kullanarak hangi parametrenin bir değer alacağını belirtmenize olanak tanır. Bu, metot çağrılarını daha net hale getirir ve bağımsız değişkenleri herhangi bir sırayla iletmenize izin verir.
Değerden önce parametre adını ve ardından iki nokta üst üste kullanın:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Adlandırılmış argümanları kullanma
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // Herhangi bir sıralama çalışırAdlandırılmış argümanlar, isteğe bağlı parametrelerle birleştirildiğinde oldukça kullanışlıdır. Önceki tüm isteğe bağlı değerleri sağlamak yerine, doğrudan ihtiyacınız olan değere atlayabilirsiniz:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// port ve useSSL'i atla, yalnızca timeout'u belirt
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Konumsal ve adlandırılmış bağımsız değişkenleri karıştırabilirsiniz, ancak konumsal bağımsız değişkenler önce gelmelidir. Adlandırılmış bağımsız değişkenler, özellikle aynı türden birden fazla parametreye sahip metotlar veya anlamın tek başına değerden anlaşılamadığı boolean bayrakları için okunabilirliği artırır.
Görev
KolayMetot çağrılarını kristal netliğinde hale getirmek için adlandırılmış argümanlardan (named arguments) yararlanan bir rapor oluşturucu inşa edelim. Metotların birden fazla parametresi olduğunda - özellikle aynı türden olanlar veya boolean bayrakları - adlandırılmış argümanlar kodunuzu kendi kendini belgeleyen (self-documenting) hale getirir.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
ReportGenerator.cs:Reportsad alanı (namespace) içinde, birkaç isteğe bağlı parametreye sahip bir metoda sahip birReportGeneratorsınıfı oluşturun:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Bu metot, rapor yapılandırmasını açıklayan biçimlendirilmiş bir dize döndürmelidir
- Biçim:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: Ana dosyanızda,GenerateReportmetodunu farklı şekillerde çağırarak adlandırılmış argümanların gücünü gösterin - ihtiyacınız olmayan isteğe bağlı parametreleri atlayın ve her rapor için yalnızca önemli olanları belirtin.
Üç girdi alacaksınız:
- Birinci rapor başlığı
- İkinci rapor başlığı
- Üçüncü rapor başlığı
Farklı yapılandırmalarla üç rapor oluşturun:
- Birinci rapor: Yalnızca başlığı kullanın (tüm varsayılanlar geçerlidir)
- İkinci rapor: Başlığı
includeSummary: truevemaxPages: 25ile kullanın (author ve includeHeader parametrelerini atlayarak varsayılanlarını koruyun) - Üçüncü rapor: Başlığı
author: "Admin",includeHeader: falseveincludeSummary: trueile kullanın (maxPages varsayılanını koruyun)
Her rapor sonucunu kendi satırına yazdırın.
Örneğin, girdiler Sales Q1, Annual Review ve Inventory Check ise çıktı şu şekilde olmalıdır:
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10Adlandırılmış argümanların, ilgilendiğiniz parametrelere doğrudan atlamanıza nasıl izin verdiğine dikkat edin - sadece includeSummary parametresini değiştirmek için author veya includeHeader parametrelerini belirtmek zorunda değilsiniz. Bu, metot çağrılarınızı çok daha okunabilir ve niyetinizi belli eden hale getirir!
Kopya kağıdı
Adlandırılmış bağımsız değişkenler (named arguments), konuma güvenmek yerine adını kullanarak hangi parametrenin bir değer alacağını belirtmenize olanak tanır. Bu, metot çağrılarını daha net hale getirir ve bağımsız değişkenleri herhangi bir sırayla iletmenize izin verir.
Değerden önce parametre adını ve ardından iki nokta üst üste kullanın:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Adlandırılmış bağımsız değişkenleri kullanma
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // Herhangi bir sıra işe yararAdlandırılmış bağımsız değişkenler, isteğe bağlı parametrelerle (optional parameters) iyi çalışır. Önceki tüm isteğe bağlı değerleri sağlamadan doğrudan ihtiyacınız olan parametreye atlayabilirsiniz:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// port ve useSSL'i atla, sadece timeout'u belirt
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Konumsal (positional) ve adlandırılmış bağımsız değişkenleri karıştırabilirsiniz, ancak konumsal bağımsız değişkenler önce gelmelidir. Adlandırılmış bağımsız değişkenler, özellikle aynı türden birden fazla parametreye veya boolean bayraklara sahip metotlar için okunabilirliği artırır.
Kendin dene
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// Üç rapor başlığını oku
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// Bir ReportGenerator örneği oluştur
ReportGenerator generator = new ReportGenerator();
// TODO: İlk raporu oluştur - yalnızca başlığı kullan (tüm varsayılanlar geçerlidir)
// TODO: İkinci raporu oluştur - başlığı includeSummary: true ve maxPages: 25 ile kullan
// (author ve includeHeader kısımlarını atla, varsayılan değerlerini koru)
// TODO: Üçüncü raporu oluştur - başlığı author: "Admin", includeHeader: false ve includeSummary: true ile kullan
// (maxPages varsayılan değerini koru)
// Her bir rapor sonucunu yazdır
}
}
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
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme