C# Methods and Functions (Metotlar ve Fonksiyonlar)

Merhabalar,

Bugün çok güzel ve yararlı olabileceğine inandığım bilgiler edindim çünkü birçoğunu bilmeme rağmen aslında bazı önemli özelliklerini bilmiyormuşum dediğim anlar oldu. Teknoloji hepimizin bildiği gibi sürekli değişiyor ve hızla gelişiyor. Yazılım sektöründe de anlık diyebileceğim düzeyde yeni özellikler, geliştirmeler, ihtiyaçlar, yapılar, kütüphaneler, diller vs… gibi uçsuz bucaksız gelişmeler devam ediyor. Bunların hepsini bilmemize gerek yok ama en azından bilgi sahibi olabilecek kadar bilmemiz gerektiğini düşünüyorum. O yüzden dostlar araştırmaya, bilgi edinmeye ve motivasyonumuzu korumaya devam etmeliyiz.

Bu hafta benim için biraz yorucu geçti. Yazılım ile ilgili yeni trendler öğrendim. Görev aldığım proje için Java diliyle geliştirmeler yapmaya çalıştım. İtiraf etmeliyim ki Java dilini özlemişim. Eğitimim büyük çoğunluğu aslında Java Programlama yaparak geçti. Hatta öğrenci iken ilk kazandığım para Java ile programlanmış bir projeydi (Ey gidi günler). Çalışma hayatına başladığımda ise Microsoft Teknolojilerine yöneldim ve bu sektörde ilerlemeye devam ediyorum. Bakalım ilerde ne gibi değişimler yaşayacağız bilmiyorum 🙂

Her seride olduğu gibi bu seriye ilham veren motivasyon cümlesi:

“Başarısızlık karşımıza çıkan engelleri alt etmemiz için hazırlanmış bir öğrenme sürecidir”

Bir önceki serimde Dizileri (Arrays) ele almıştım. Hatırlamak amacıyla konu başlıkları nelerdi anımsayalım. Seriye buradan ulaşabilirsiniz.

  • Çok Boyutlu (Multidimensional) Diziler
  • Düzensiz Diziler (Jagged Arrays)
  • System.Array Sınıfı özellikleri ve metotları
  • Array.CreateInstance metodu kullanımı

Metotlar ve Fonksiyonlar

Günlük hayatta karşımıza çıkan problemleri bir şekilde çözmeye çalışıyoruz. Ama problemleri parçalara bölerek çözmeye çalışırsak daha etkili çözümler olur. Programlarımızı da aynı şekilde parçalara bölmeliyiz. Yani programlarımızı modüllere ayırmalıyız ki her modül kendisine atanan görevden sorumlu olsun. Programlarımızda iş yapan en temel parçalar fonksiyonlarıdır. Fonksiyonları da belirli işleri yapmaları için geliştiririz.

C# gibi nesne yönelimli programlama dillerinde fonksiyon kelimesi yerine genelde metot sözcüğü kullanılır.

Metot, programın herhangi bir yerinde kullanmak için belirli işi yerine getirmek amacıyla tasarlanmış alt programlardır.

Metotlar ile İlgili Bilmemiz Gereken Önemli Özellikler

  • Metotlara isim verirken isimlendirme kurallarına uymalıyız.
  • Metotları çağırırken parametreleri eksiksiz girmeliyiz.
  • Bir metot içinde başka bir metot bildirilemez
  • Metotlar içinde tanımlanan değişkenler, metotlar dışında geçersizdir.
  • Metotlar içinde tanımlanan değişkenler programın başından sonuna kadar durmaz. Bu değişkenler programın akışı metoda geldiğinde tanımlanır. Metodun işlevi bittiğinde ise bellekten silinir. (otomatik ömürlü nesneler)

Değer ve Referans Parametreleri

Daha önceden değer ve referans türlerinin arasındaki farkı görmüştük. Değer ve referans türlerine bu serimden ulaşabilirsiniz. Referans türleri metotlara aktarılırken bit bit kopyalanmaz, metoda aktarılan sadece referanstır. Yani metot içinde yapılan değişiklikler nesnenin değerini değiştirir. Değer tipleri metotlara aktarılırken bit bit kopyalanarak geçirilir. Yani metot içinde yapılan değişiklikler ana değişkeni değiştirmez.

ref ve out Anahtar Sözcükleri

  • Genellikle değer tiplerini referans olarak metotlara geçirmek için kullanılır.
  • ref parametreleri aktarılırken kesinlikle ilk değerin verilmiş olması gerekir.
  • out parametreleri aktarılırken ilk değer verme gibi zorunluluk yoktur.

Ref Olarak İşaretlenen Geri Dönüş Değerleri (ref Return)

C# 7.0 ile birlikte gelen yeni özelliklerden biri ref anahtar sözcüğü, metotlardan değer yerine referans dönülmesine ve bunların yerel değişkenlerde referans olarak saklanmasına imkan sağlamaktadır.

Metotların Aşırı Yüklenmesi ve İmza Kavramı

  • Metot imzası (method signature), bir metodun karakteristik özelliklerini içeren bir tür bilgidir.
  • Metot imzaları parametrelerin türünüde kapsadığı için aynı isimli fakat farklı türden parametre alan metotlar tanımlayabiliriz.

Eğer aşırı yüklenmiş metotlara (5, 10f) şeklinde bir çağrım yapsaydık ekrana 3 yazacaktı. Bunun sebebi tür dönüştürmede veri kaybının olmaması için diyebiliriz. Yani float türü int türünden daha büyük olduğu için dönüşüm sırasında veri kaybı olmayacak. O yüzden derleyici bununda farkında olduğundan 3. metodu seçecektir.

İsimlendirilmiş (Named) ve Opsiyonel (Optional) Parametreler

C# 4.0 ile birlikte isimlendirilmiş ve opsiyonal parametreler tanımlanabilmektedir. Named (isimlendirilmiş) parametreler sayesinde bir metot çağırımında parametre sırasından bağımsız olarak parametre adı belirtilerek parametreleri metoda gönderebiliriz. Optional (opsiyonel) parametreler ile metot bildirimi sırasında istenilen parametreye varsayılan değer verilerek parametrenin gönderilmediği durumda metot içinde alacağı değeri belirtiriz.

Özyineli (Recursive Metotlar)

Bir metodu kendi içinde çağırmamız gereken durumlar olabilir. Kendi kendini çağıran bu tür metotlara Recursive (Özyineli) metotlar diyoruz. En bilindik örneği Faktöriyel hesaplamadır.

Yerel Metotlar (Local Functions)

C# 7.0 ile birlikte gelen bir başka özellik olan yerel metotlar sayesinde bir metodun içerisinde çağrılmak üzere başka metotlar tanımlayabiliyoruz.

Main Metodu

Kodlamaya başlarken sürekli olarak kullandığım gözü yaşlı Main() metodunun aslında diğer metodlardan bir farkı yok. Tek farkı main metodunun program çalışmaya başladığı nokta olmasıdır.

Main metodu diğer metotlar gibi aşırı yüklenmiş metotları vardır. Genelde ben geri dönüş değeri olmayan ve herhangi bir parametresi olmayan metodunu kullanıyordum. Aslında parametre alan ve geri dönüş değeri dönen aşırı yüklenmiş metotları vardır.

Peki Geri Dönüşlü Parametreyi Kim Kullanıyor?

Bildiğimiz gibi programlar işletim sistemleri üzerinde çalışır. Genellikle aynı anda birden fazla proses çalışır ve bazı durumlarda birbirine bağlı olarak çalışabilir. Bu durumda programdan ne çıktığı başka bir proses için yönlendirici olabilmektedir. Bazı durumlarda metotlar başarısız bir şekilde çıkabilir, bu durumda geri dönüş değerini 1 olarak döndürmek programın başarısız bir şekilde sollandığını işletim sistemine bildirmek anlamına gelir.

Peki Parametreli Metot Nasıl Kullanılıyor?

Bildiğimiz gibi Main metodu içinde string türünden bir dizi parametre alır. Bu parametreleri komut satırı argümanı ile gönderebiliriz.

Metotlar ve Fonksiyonlar ile ilgili serimizin sonuna geldik. Metotlar sayesinde kodlarımızı daha anlaşılır ve yönetilebilir hale getirmiş oluruz. Özellikle Microsoft ekibi peyderpey biz programcıların yararına olabilecek yeni geliştirmeleri yayınlıyor. Bu tür işimize yarayabilecek yeni geliştirmeleri takip ederek kodlarımızı daha eğlenceli hale getirebiliriz.

Bir sonraki serimde RoadMap’e bağlı kalarak Sınıflar, Yapılar ve Numaralandırmalar (Class, Struct and Enumeration) hakkında edindiğim bilgileri paylaşıyor olacağım. Görüşmek dileğiyle.

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik,

https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

Leave a Comment