Anasayfa / C# / CONSOLE APPS / C# Fonksiyonlar (Metotlar)

C# Fonksiyonlar (Metotlar)

C# programlama eğitim serimizde, değişkenler, veri tipleri, karar yapıları (if-else) ve döngüler gibi temel yapı taşlarını geride bıraktık. Şimdi sıra, yazdığımız kodları daha düzenli, okunabilir ve tekrar kullanılabilir hale getiren en önemli yazılım konseptlerinden birine geldi: Fonksiyonlar veya C# dünyasında bilinen resmi adıyla Metotlar.

Bu kapsamlı rehberimizde, “Bir metot nedir?”, “Nasıl tanımlanır?”, “Parametre ve Geri Dönüş (Return) kavramları nelerdir?” gibi soruları günlük hayattan senaryolarla cevaplayacak ve modern C# sürümleriyle gelen güçlü metot özelliklerini inceleyeceğiz.


1. Fonksiyon (Metot) Nedir ve Neden Kullanırız?

Yazılım geliştirirken en sık yapılan hatalardan biri, aynı kod bloğunu programın farklı yerlerinde defalarca kopyalayıp yapıştırmaktır. Programlama dünyasında DRY (Don’t Repeat Yourself – Kendini Tekrar Etme) adı verilen çok önemli bir prensip vardır. Eğer bir işlemi birden fazla kez yapıyorsanız, o işlemi bir “Fonksiyon” (Metot) içine almalısınız.

C# gibi Nesne Yönelimli Programlama (OOP) dillerinde, bir sınıfın (class) içine yazılan ve belirli bir işlevi yerine getiren kod bloklarına Metot (Method) adı verilir.

Günlük Hayattan Bir Analoji: Bir metodu, bir kahve makinesi gibi düşünebilirsiniz.

  • Kahve makinesine su ve kahve çekirdeği koyarsınız (Parametreler / Girdiler).
  • Makine kendi içinde suyu ısıtır ve kahveyi demler (İşlem / Kod Bloğu).
  • Sonunda size içmeye hazır sıcak bir kahve verir (Geri Dönüş Değeri / Return).

Siz kahvenin makine içinde tam olarak nasıl demlendiğini adım adım bilmek zorunda değilsinizdir; sadece malzemeyi verir ve sonucu alırsınız. Metotlar da programlarımızda tam olarak bu soyutlamayı ve kolaylığı sağlar.


2. C# Dilinde Bir Metodun Anatomisi (Sözdizimi)

C# dilinde bir metodun imzası (signature); isteğe bağlı erişim belirleyicileri, geri dönüş tipi, metodun adı ve parantez içinde virgülle ayrılmış parametre listesinden oluşur.

Genel yazım kuralı şöyledir:

[Erişim Belirleyici] [Geri Dönüş Tipi] [Metot Adı]([Parametre 1], [Parametre 2]...)
{
    // Metodun yapacağı işlemler (Kod bloğu)
}

  • Erişim Belirleyici (Access Modifier): Metoda kimlerin erişebileceğini belirler (Örn: public, private). Başlangıç aşamasında bu detaya takılmanıza gerek yoktur.
  • Geri Dönüş Tipi (Return Type): Metodun işlemi bitirdikten sonra bize ne tür bir veri (int, string, bool) vereceğini belirtir. Eğer metot bize hiçbir şey vermeyecekse, sadece bir işlem yapıp bitecekse void anahtar kelimesi kullanılır.
  • Metot Adı: Metodun ne iş yaptığını anlatan eylem bildiren bir isimdir. C# dilinde metot isimleri genellikle büyük harfle başlar (PascalCase).
  • Parametreler: Metodun çalışmak için dışarıdan ihtiyaç duyduğu verilerdir.

3. Değer Döndürmeyen (Void) Parametresiz Metotlar

En basit metot türü, dışarıdan hiçbir veri almayan (parametresiz) ve dışarıya bir veri vermeyen (void) metotlardır. Sadece çağrıldıklarında içlerindeki kodu çalıştırırlar.

Örnek Uygulama:

// Ekrana karşılama mesajı yazdıran basit bir metot
void KarsilamaMesajiYazdir()
{
    Console.WriteLine("Uygulamamıza Hoş Geldiniz!");
    Console.WriteLine("Sistem yükleniyor...");
}

// Metodu çağırmak (kullanmak) için adını ve parantezleri yazmamız yeterlidir:
KarsilamaMesajiYazdir();
KarsilamaMesajiYazdir();

Bu metodu programın neresinde KarsilamaMesajiYazdir(); şeklinde çağırırsanız, içindeki iki satırlık kod çalışacaktır.


4. Parametre Alan Metotlar (Girdiler)

Metotlarımızı daha akıllı ve dinamik hale getirmek için onlara dışarıdan veri gönderebiliriz.

Örnek Uygulama: Kullanıcının adını dışarıdan alıp ona özel bir selamlama yapan metot yazalım.

// Bu metot çalışmak için dışarıdan 'string' türünde bir 'isim' bekliyor.
void OzelSelamlama(string isim)
{
    Console.WriteLine($"Merhaba {isim}, nasılsın?");
}

// Metodu kullanırken parantez içine mutlaka bir string (metin) göndermeliyiz:
OzelSelamlama("Ahmet"); // Çıktı: Merhaba Ahmet, nasılsın?
OzelSelamlama("Ayşe");  // Çıktı: Merhaba Ayşe, nasılsın?


5. Geri Dönüş Yapan (Return) Metotlar

Bir metodun yaptığı işlemin sonucunu ekrana yazdırmak yerine, o sonucu alıp programın başka bir yerinde, örneğin bir matematiksel hesaplamada veya veritabanı kaydında kullanmak isteyebilirsiniz. İşte o zaman void yerine bir Geri Dönüş Tipi belirtiriz ve metodun sonunda return anahtar kelimesini kullanırız.

Örnek Uygulama: İki tam sayıyı toplayıp sonucunu bize veren bir metot yazalım.

// Geri dönüş tipi olarak 'int' belirttik. Bu metot işi bitince bize bir tam sayı verecek.
int ToplamaYap(int sayi1, int sayi2)
{
    int sonuc = sayi1 + sayi2;
    return sonuc; // Elde edilen sonucu makineden dışarı fırlatıyoruz (return)
}

// Kullanımı:
int musteriBakiyesi = 500;
int eklenecekPara = 250;

// Metodun ürettiği 750 değerini yeni bir değişkene atıyoruz
int guncelBakiye = ToplamaYap(musteriBakiyesi, eklenecekPara);

Console.WriteLine($"Hesabınızdaki yeni para: {guncelBakiye} TL");


6. Modern C# Yenilikleri: İsteğe Bağlı ve İsimlendirilmiş Parametreler

C# dili geliştikçe metotların kullanımı da çok daha pratik hale gelmiştir. Visual Studio 2010 ile birlikte yayınlanan C# 4.0 sürümü, yazılımcılara “İsimlendirilmiş ve İsteğe Bağlı Argümanlar” (Named and optional arguments) özelliğini sunmuştur.

  • İsteğe Bağlı (Optional) Parametreler: Bir metoda parametre tanımlarken ona bir varsayılan (default) değer atayabilirsiniz. Metodu çağıran kişi bu veriyi göndermezse, sizin atadığınız varsayılan değer kullanılır.
  • İsimlendirilmiş (Named) Parametreler: Metodu çağırırken hangi veriyi hangi parametreye gönderdiğinizi açıkça belirtebilirsiniz. Bu, kodu okuyanlar için inanılmaz bir anlaşılırlık sağlar.
// KDV Oranı varsayılan olarak 0.18 atanmıştır. (İsteğe Bağlı Parametre)
double FiyatHesapla(double fiyat, double kdvOrani = 0.18)
{
    return fiyat + (fiyat * kdvOrani);
}

// 1. Normal Kullanım (KDV gönderilmezse 0.18 kullanılır)
double standartFiyat = FiyatHesapla(100);

// 2. KDV oranını kendimiz belirlediğimiz kullanım
double ozelFiyat = FiyatHesapla(100, 0.08);

// 3. İsimlendirilmiş parametre kullanımı (Sıranın bir önemi kalmaz)
double isimlendirilmisFiyat = FiyatHesapla(kdvOrani: 0.01, fiyat: 100);


7. İfade Gövdeli Üyeler (Expression-Bodied Methods)

Eğer metodunuzun içinde sadece tek bir satırlık işlem varsa ve hemen return ediyorsanız, uzun uzun süslü parantezler açmanıza gerek yoktur. C# 6.0 ile hayatımıza giren “İfade Gövdeli Üyeler” (Expression-bodied members) özelliği sayesinde, “Ok” (=>) işareti kullanarak metotlarınızı tek bir satırda çok zarif bir şekilde yazabilirsiniz.

// Geleneksel uzun yazım
int Carpma(int a, int b)
{
    return a * b;
}

// C# 6.0 ve sonrası ile tek satırda kısa yazım (Expression-bodied)
int PratikCarpma(int a, int b) => a * b;


8. Metot Aşırı Yükleme (Method Overloading)

C# dilinde aynı isme sahip birden fazla metot tanımlayabilirsiniz. Tek şart, bu metotların parametre sayılarının veya parametre tiplerinin birbirinden farklı olmasıdır. Bu duruma “Metot Aşırı Yükleme” (Method Overloading) denir.

Örneğin, Topla adında bir metodunuz var. Bazen 2 tam sayıyı, bazen de 3 tam sayıyı toplamak istiyorsunuz. İkisi için IkiSayiTopla ve UcSayiTopla gibi farklı isimler uydurmak yerine, ikisine de Topla adını verebilirsiniz:

int Topla(int a, int b)
{
    return a + b;
}

// Aynı isim, fakat 3 parametre alıyor (Aşırı Yükleme)
int Topla(int a, int b, int c)
{
    return a + b + c;
}

// Kullanımı:
Console.WriteLine(Topla(5, 10));      // 2 parametreli olan çalışır
Console.WriteLine(Topla(5, 10, 15));  // 3 parametreli olan çalışır


9. Modern .NET ve “Top-Level Statements” İçinde Metot Kullanımı

Eğitim serimizin önceki kısımlarında, C# 9 ile birlikte “Top-Level Statements” (Üst Düzey İfadeler) kavramının geldiğini ve Main metoduna ihtiyaç duymadan doğrudan kod yazabildiğimizi öğrenmiştik.

“Peki Main metodu veya bir sınıf (class) olmadan yeni bir metodu nereye yazacağım?” diye düşünüyor olabilirsiniz. Üst düzey ifadeler kullandığınız yeni nesil bir .NET 6+ konsol uygulamasında, metotlarınızı sayfanın en altına eklersiniz. Derleyici (compiler), arka planda bu yazdığınız kodları otomatik olarak bir Main metodunun içine yerleştirir ve sizin yazdığınız metotları da bu Main metodunun içinde birer “Yerel Fonksiyon” (Local Function) olarak kurgular. Yerel fonksiyonlar public veya private gibi erişim belirleyicileri alamazlar, bu yüzden top-level kullanırken sadece geri dönüş tipini ve metot adını yazmanız yeterlidir.

Sonuç

Bu detaylı rehberimizde, C# programlama dilinde kod tekrarını önleyen, sistemleri modüler ve okunabilir hale getiren Fonksiyonlar (Metotlar) konusunu başarıyla öğrendiniz. Metotların parametre almasını, return ile değer döndürmesini ve modern C# (Expression-bodied, Named/Optional arguments) sözdizimleriyle nasıl daha temiz yazılabileceğini örneklerle pekiştirdiniz.

Metotlar, gelecekte yazacağınız devasa uygulamaların en küçük yapı taşlarıdır. Bir sonraki eğitim adımımızda, oluşturduğumuz bu harika metotları hata vermeden yönetebilmek için “Hata Yakalama (Try-Catch)” mekanizmalarına giriş yapacağız. Bol pratikli ve keyifli kodlamalar dileriz!

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir