İfade Gövdeli Üyeler
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 14 / 70.
İfade gövdeli üyeler, yalnızca tek bir ifade içeren üyeler için kısa ve öz bir sözdizimi sağlar. Süslü parantezlerle tam metot veya özellik gövdeleri yazmak yerine, => ok sözdizimini kullanırsınız.
Tek bir ifade döndüren metotlar için tüm gövdeyi değiştirebilirsiniz:
// Geleneksel metot
public int Add(int a, int b)
{
return a + b;
}
// İfade gövdeli metot
public int Add(int a, int b) => a + b;Bu söz dizimi, daha önce kısaca gördüğünüz salt okunur özellikler için de geçerlidir:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Özellik getter ve setter'ları için ifade gövdelerini (expression bodies) ayrı ayrı da kullanabilirsiniz:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Yapıcı metotlar bile tek bir ifade içerdiklerinde bu söz dizimini kullanabilirler:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}İfade gövdeli üyeler (expression-bodied members), mantık basit olduğunda kodunuzu daha okunabilir hale getirir. Bunları basit işlemler için kullanın, ancak birden fazla ifadeye veya karmaşık mantığa ihtiyaç duyduğunuzda geleneksel gövdelere bağlı kalın.
Görev
KolayTemiz ve özlü kod yazmak için ifade gövdeli üyelerin (expression-bodied members) gücünü sergileyen bir ürün fiyatlandırma hesaplayıcısı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Product.cs:Storead alanı (namespace) içinde birProductsınıfı tanımlayın. Bu sınıf çeşitli ifade gövdeli üyeleri göstermelidir:- Otomatik uygulanan özellikler
Name(string) veBasePrice(decimal) - Her iki özelliği de ayarlayan ifade gövdeli bir yapıcı metot (constructor)
- Taban fiyatın %10'unu hesaplayan ifade gövdeli, salt okunur bir özellik
TaxAmount - Taban fiyat artı vergi tutarını döndüren ifade gövdeli, salt okunur bir özellik
TotalPrice - İndirim tutarını (taban fiyat çarpı yüzde bölü 100) döndüren ifade gövdeli bir metot
GetDiscount(decimal percentage) - Toplam fiyattan indirimi çıkararak sonucu döndüren ifade gövdeli bir metot
GetFinalPrice(decimal discountPercentage)
- Otomatik uygulanan özellikler
Program.cs: Ana dosyanızda, giriş değerlerini kullanarak birProductoluşturun ve ardından fiyatlandırma dökümünü görüntüleyin.
Üç giriş alacaksınız:
- Ürün adı
- Taban fiyat
- Uygulanacak indirim yüzdesi
Fiyatlandırma ayrıntılarını şu formatta yazdırın:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}Örneğin, girişler Laptop, 1000 ve 15 ise çıktı şöyle olmalıdır:
Product: Laptop
Base Price: 1000
Tax (10%): 100
Total Price: 1100
Discount (15%): 150
Final Price: 950Tek bir ifade içeren tüm üyeler için => ok sözdizimini kullanmayı unutmayın. Bu, kodunuzun temiz ve okunabilir kalmasını sağlar!
Kopya kağıdı
İfade gövdeli üyeler (expression-bodied members), tek bir ifade içeren üyeler için => ok söz dizimini kullanarak geleneksel metot ve özellik gövdelerine kısa bir alternatif sunar.
İfade gövdeli metotlar:
// Geleneksel metot
public int Add(int a, int b)
{
return a + b;
}
// İfade gövdeli metot
public int Add(int a, int b) => a + b;İfade gövdeli salt okunur özellikler:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}İfade gövdeli özellik alıcıları (getters) ve ayarlayıcıları (setters):
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}İfade gövdeli yapıcı metotlar (constructors):
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Basit işlemler için ifade gövdeli üyeleri kullanın. Birden fazla ifade veya karmaşık mantık için geleneksel gövdeleri kullanın.
Kendin dene
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// TODO: Giriş değerlerini kullanarak bir Product nesnesi oluşturun
// TODO: GetDiscount metodunu kullanarak indirim tutarını hesaplayın
// TODO: GetFinalPrice metodunu kullanarak nihai fiyatı hesaplayın
// TODO: Fiyatlandırma ayrıntılarını istenen formatta yazdırın:
// Product: {Name}
// Base Price: {BasePrice}
// Tax (10%): {TaxAmount}
// Total Price: {TotalPrice}
// Discount ({percentage}%): {discountAmount}
// Final Price: {finalPrice}
}
}
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ı