Opsiyonel ve İsimlendirilmiş Parametreleri Duymayan Var Mı?

Merhaba koda her türlü takla attırmaktan zevk alan dostlarım. Bu yazımda, .NET 4.0’ın C# diline getirmiş olduğu bir yenilikten bahsediyor olacağım. Şimdi diyeceksiniz ki, .NET 4.0 çıkalı bir yıldan fazla oldu. Canlarım benim oldu olmasına da siz hiç kullandınız mı onu deyin bana. Sonuçta bu tarz dil değişikliklerinin amacı hayatımızı kolaylaştırmak. Dolayısıyla aslolan, bilmek değil kullanmaktır.

Bildiğiniz gibi uygulama geliştirirken; kodun okunabilirliği açısından en çok kullandığımız yöntem; bir nesnenin yapacağı bütün işleri metotlara ayırmaktır. Ancak iş bu kadarla bitmez. Yazdığınız her metodun, parametrik alternatiflerini de düşünerek o metotların overload (aşırı yükleme)’larını da yazmamız gerekir. C#.NET’in önceki versiyonlarında, bu tarz bir pattern (desen) uygularken, zorunlu olmayan her bir parametre için bir overload yazmanız şarttı. Oysa; VB diliyle uygulama geliştirenler bu konuda çok daha rahattılar. Çünkü Visual Basic’de “optional” parametre çok uzun zamandır var ve kullanılıyor. İşte .NET 4.0’dan sonra artık C# diliyle uygulama geliştirenler de bu nimetten faydalanabilirler.

Gelin önce .NET 4.0 öncesine bakalım.

Senaryomuz; iki boyutlu geometrik şekillerin (kare, dikdörtgen, daire ve üçgen) alanlarını hesaplama üzerine kurulu. Bu dört şekli, formüllerine göre ayıralım önce.

Karenin alanını hesaplamak için gereken formül; bir kenar uzunluğunun karesi. Dikdörtgenin alan formülü: en çarpı boy. Üçgenin formülü: alt kenar çarpı yükseklik bölü 2. Dairenin ise; yarı çapın karesi çarpı pi sabiti. Bu noktada bu dört formülü de incelerseniz; bazı şekillerin (üçgen ve dikdörtgen) zorunlu iki parametre, diğer ikisinin ise yalnızca bir parametre almak zorunda olduğunu görürüz. Demek ki alanHesapla metotumuzun bir overload’ı daha olmalı.

İşte metotumuz:

Ve overload’ı:

Tamamdır. Artık, alanını hesaplayacağınız şekile göre dilediğiniz overload’ı kullanabilirsiniz. Peki; metotumuzun uzunluk2 ve sekil parametrelerini opsiyonel yapsak (ki bu durumda sekil parametresinin varsayılan değeri “kare” olabilir) nasıl olur? Tek metot ile bu işi halledebilir miyiz?

Yalnız bu noktada; kodumuzu biraz daha güzelleştirelim ve sekil parametresini string yerine kendi yazdığımız bir Enum’a dönüştürelim:

İşte .NET 4.0 ile birlikte gelen opsiyonel parametreli metodumuz geliyor:

Gayet basit ama etkili. Tek metot ile, bir çok opsiyona sahibiz şu anda. Tahmin edebileceğiniz gibi altı çizili olan parametrelerimiz, opsiyonel parametrelerdir. Demek ki bir parametrenin opsiyonel olması için varsayılan değerini belirtmemiz yeterli. Ayrıca önemli bir ayrıntı da, zorunlu parametrenizin (örnekte birimUzunluk1) mutlaka ilk sırada olması gerektiği.

Burada önemli bir noktaya daha deyinelim; sakın “overload yönteminin pabucu dama atıldı” diye düşünmeyin yok öyle bir şey! Opsiyonel parametre, hiçbir şeyi ortadan kaldırmıyor sadece bir kolaylık getiriyor.

Yazımın ikinci konusu ise isimlendirilmiş parametreler. Bu da aslında oldukça basit ama pratik yeniliklerden biri. Bildiğiniz gibi metot imzaları; metodun dönüş değeri ve parametre sıralamasını temsil eder. .NET 4.0 öncesinde, bir metodu oluştururken parametrelerini hangi sırayla yazdıysanız; o metodu çağırırken de aynı sırayla değer atamanız gerekir. Oysa 4.0’da metodu çağırırken, isim belirtmek şartıyla dilediğiniz sırayla parametre değerlerini atayabilirsiniz. İşte buna isimlendirilmiş parametre diyoruz

Örneği geliyor:

 

İşte bu kadar! ParametreAdi:deger şeklinde belirtmek şartıyla; dilediğim sırada parametrelere değer atabiliyorum. Peki bana bu ne sağlar derseniz, ben de derim ki; “kombinasyon”. Bu rahatlık elbette, başka design patternlerin de ortaya çıkmasını sağlayacak cinsten bir yenilik.

Bu yenilikleri bol bol kullanmanız dileklerimle.

2 thoughts on “Opsiyonel ve İsimlendirilmiş Parametreleri Duymayan Var Mı?

  1. Klavyenize sağlık hocam güzel bi ek bilgi oldu benim için heee nerde kullanırım onu şuan için bilmiyorum ama zaten her bildiğimi kullanıyorum gibi bişeyde yok zaten 🙂 belki birgün bir yerde lazım olur daha sık yazmanız dileğiyle… 🙂

Leave a Reply