Fonksiyonlar ve Metotlar

Fonksiyonlar ve metotlar, C# programlarında kod tekrarını önlemek, modülerlik sağlamak ve daha okunaklı bir yapı oluşturmak için kullanılır. Metotlar (Methods), belirli bir işlemi gerçekleştiren kod bloklarıdır ve genellikle bir değer döndüren (return) veya doğrudan işlem yapan (void) türlerde olabilirler.

1. Metot Tanımlama

Bir metot tanımlarken şu temel yapıyı kullanırız:

erişim_belirteci dönüş_tipi metot_adı(parametreler)
{
    // Metot içeriği
    return değer; // Eğer dönüş_tipi void değilse
}
C#
TerimAçıklama
Erişim Belirtecipublic, private, protected, internal vb.
Dönüş Tipivoid, int, string, bool gibi veri tipleri veya object, List<T> gibi yapılar
Metot AdıMetodun çağrılmasını sağlayan isim
ParametrelerMetoda dışarıdan gönderilecek değerler

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

void türündeki metotlar bir işlem yapar ama değer döndürmez.

void SelamVer()
{
    Console.WriteLine("Merhaba, hoş geldiniz!");
}
C#

Çağırma:

SelamVer();
C#

3. Değer Döndüren Metotlar

Eğer bir metot işlem sonucunda bir değer döndürecekse, return anahtar kelimesi kullanılır.

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

Çağırma ve Kullanma:

int sonuc = Topla(5, 7);
Console.WriteLine("Sonuç: " + sonuc); // 12
C#

4. Parametreli Metotlar

Metotlara parametre göndererek dinamik hale getirebiliriz.

void Karsilama(string isim)
{
    Console.WriteLine("Hoş geldin, " + isim + "!");
}
C#

Çağırma:

Karsilama("Ahmet");
Karsilama("Zeynep");
C#
C#
Hoş geldin, Ahmet!
Hoş geldin, Zeynep!
C#

5. Varsayılan Parametreli Metotlar

Bazı parametrelere varsayılan değer atanabilir.

void MesajGoster(string mesaj = "Merhaba, Dünya!")
{
    Console.WriteLine(mesaj);
}
C#

Çağırma:

MesajGoster(); // "Merhaba, Dünya!"
MesajGoster("Özel bir mesaj"); // "Özel bir mesaj"
C#

6. Geri Dönüş Tipi bool Olan Metotlar

Bazen bir metot, koşullu bir sonucu döndürmelidir.

bool CiftMi(int sayi)
{
    return sayi % 2 == 0;
}
C#
Console.WriteLine(CiftMi(8)); // true
Console.WriteLine(CiftMi(7)); // false
C#

7. Overloading (Aşırı Yükleme)

Aynı isimde fakat farklı parametrelerle tanımlanmış metotlar aşırı yükleme (overloading) olarak adlandırılır.

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

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

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

Çağırma:

Console.WriteLine(Topla(5, 3)); // 8
Console.WriteLine(Topla(2.5, 4.7)); // 7.2
Console.WriteLine(Topla(1, 2, 3)); // 6
C#

8. Recursive (Özyinelemeli) Metotlar

Bir metot, kendini tekrar tekrar çağırarak işlem yapabilir. Örneğin, faktöriyel hesaplama:

int Faktoriyel(int n)
{
    if (n <= 1)
        return 1;
    return n * Faktoriyel(n - 1);
}
C#

Çağırma:

Console.WriteLine(Faktoriyel(5)); // 120
C#

9. Ref ve Out Parametreleri

C#’ta ref ve out anahtar kelimeleri metotlara referans (adres) üzerinden veri aktarmak için kullanılır.

9.1. ref Kullanımı

Eğer bir değişkenin değerini metot içinde değiştirip çağıran yere geri göndermek istiyorsak ref kullanabiliriz.

void DegerArttir(ref int sayi)
{
    sayi += 10;
}
C#

Çağırma:

int num = 5;
DegerArttir(ref num);
Console.WriteLine(num); // 15
C#

Not: ref kullanırken değişken önceden atanmış olmalıdır.

9.2. out Kullanımı

out parametreleri de ref gibi çalışır, ancak değişkenin önceden atanmasına gerek yoktur.

void Hesapla(int a, int b, out int toplam, out int fark)
{
    toplam = a + b;
    fark = a - b;
}
C#

Çağırma:

int t, f;
Hesapla(10, 4, out t, out f);
Console.WriteLine("Toplam: " + t + ", Fark: " + f);
C#
C#
Toplam: 14, Fark: 6
C#

10. Lambda İfadeleri ve Expression-bodied Metotlar

C#’ta kısa metotlar için lambda ifadeleri (=>) ve tek satırlık fonksiyonlar kullanılabilir.

10.1. Expression-bodied Metot

int Kare(int x) => x * x;
Console.WriteLine(Kare(5)); // 25
C#

10.2. Lambda Fonksiyonu

Func<int, int, int> Carp = (x, y) => x * y;
Console.WriteLine(Carp(4, 5)); // 20
C#