1 Şubat 2012 Çarşamba

C# ile Metotlar

Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# programlama dilinin temel yapı taşlarından ve kod organizasyonunun bel kemiği olan metotları (methods) derinlemesine inceleyeceğiz. Metotlar, belirli bir görevi yerine getiren, tekrar tekrar çağrılabilen kod bloklarıdır. .NET Framework 4 ile C#'ta metotların nasıl tanımlandığını, kullanıldığını ve farklı parametre geçirme yöntemlerini gelin birlikte keşfedelim.

Metot Kavramına Giriş ve Temel Terminoloji

Metotlar, programlarımızı daha modüler, okunabilir ve yönetilebilir hale getirir. Belirli bir işlevi olan kod parçalarını metotlar içinde toplayarak, aynı kodu tekrar tekrar yazmaktan kurtuluruz. Metotlarla ilgili bazı temel terimleri hatırlayalım:

  • Prosedür (Procedure): Geriye herhangi bir değer döndürmeyen metotlardır. Genellikle belirli bir eylemi gerçekleştirmek için kullanılırlar. C#'ta void anahtar kelimesi ile tanımlanırlar.
  • Fonksiyon (Function): Geriye bir değer döndüren metotlardır. Belirli bir hesaplama veya işlem sonucunu çağıran koda iletirler. Döndürecekleri değerin veri tipi metot tanımında belirtilir.
  • Parametre (Parameter): Bir metot tanımlanırken, dışarıdan veri alabilmesi için belirtilen değişkenlerdir. Metot imzasında parantez içinde türü ve adı belirtilir.
  • Argüman (Argument): Bir metot çağrılırken, metot tanımındaki parametrelere karşılık gelen ve metoda gönderilen gerçek değerlerdir.

Metot Tanımlama Söz Dizimi

Bir metotun temel yapısı şu şekildedir:

erişimBelirleyici döndürülecekDeğer MetotAdı(ParametreTipi ParametreDeğişkeni)
{
    // Metotun gerçekleştireceği kodlar
    return eğer döndürülecekDeğer void değilse;
}

 

  • Erişim Belirleyici (Access Modifier): Metota nereden erişilebileceğini belirler (örneğin public, private, static).
  • Döndürülecek Değer (Return Type): Metotun geriye döndüreceği verinin türünü belirtir. Eğer metot geriye değer döndürmüyorsa void olarak tanımlanır.
  • Metot Adı (Method Name): Metotu çağırmak için kullanılan benzersiz bir isimdir.
  • Parametreler (Parameters): Metoda dışarıdan veri aktarmak için kullanılan, türü ve adı belirtilmiş değişkenlerdir (isteğe bağlıdır).

Örnek Metot Tanımları:

public void Metod1()
{
    System.Console.WriteLine("Bu bir prosedürdür.");
}
 
string Metod2()
{
    return "Bu bir fonksiyondur ve yazı döndürür.";
}
 
int Metod3(int sayi)
{
    return sayi * 2;
}
 
public static void Metod4()
{
    System.Console.WriteLine("Bu statik bir metottur.");
}

Önemli Not: Bir metotta bir parametreye varsayılan bir değer atanmışsa, diğer parametrelere de varsayılan değer atanmalıdır. Aksi takdirde derleme hatası oluşur.

// Hatalı tanımlama:
// int Topla(int a = 2, int b) { ... }
 
// Doğru tanımlama:
int Topla(int a = 2, int b = 4) { return a + b; }

Parametre Geçirme Yöntemleri

C#'ta metotlara parametreler farklı şekillerde geçirilebilir:

  • Değer ile Geçirme (Value Passing): Metoda gönderilen argümanın bir kopyası oluşturulur ve metot içinde bu kopya üzerinde işlem yapılır. Orijinal argümanın değeri değişmez. Değer tipleri (int, double, bool vb.) varsayılan olarak değer ile geçirilir.
  • Referans ile Geçirme (Reference Passing - ref): Metoda gönderilen argümanın bellekteki adresinin bir referansı geçirilir. Bu sayede metot içinde yapılan değişiklikler doğrudan orijinal argümanı etkiler. ref anahtar kelimesi hem metot tanımında hem de metot çağrısında kullanılır. ref ile geçirilen değişkene metot çağrılmadan önce bir değer atanmış olmalıdır.
    void Metod6(ref int sayi)
    {
        sayi = 100;
    }
     
    int numara = 5;
    Metod6(ref numara); // numara değişkeninin değeri şimdi 100 oldu

 

  • Çıktı Parametreleri (out): ref'e benzer şekilde referans ile değer geçirmeye yarar. Ancak out ile geçirilen değişkene metot çağrılmadan önce bir değer atanması zorunlu değildir. Metot içinde out parametresine mutlaka bir değer atanmalıdır. Bir metot birden fazla out parametresi alabilir.
    void Metod7(out int sonuc)
    {
        sonuc = 5 * 5; // out parametresine değer atamak zorunlu
    }
    int kare;
    
    Metod7(out kare); // kare değişkeninin değeri şimdi 25 oldu

 

  • Değişken Sayıda Parametre (params): Bir metoda belirsiz sayıda aynı türden argüman geçirmek için kullanılır. Metot tanımında params anahtar kelimesi ile bir dizi parametre tanımlanır. Metot çağrılırken virgülle ayrılmış birden fazla argüman geçirilebilir.
    void Metod5(params int[] sayilar)
    {
        int toplam = 0;
        foreach (int sayi in sayilar)
        {
            toplam += sayi;
        }
        System.Console.WriteLine($"Toplam: {toplam}");
    }
     
    Metod5(1, 2, 3);       // Çıktı: Toplam: 6
    Metod5(10, 20, 30, 40); // Çıktı: Toplam: 100

 

  • İsteğe Bağlı Parametreler (Optional Parameters): Metot tanımlanırken parametrelere varsayılan değerler atanarak, bu parametrelerin metot çağrılırken isteğe bağlı hale getirilmesi sağlanır. Eğer argüman geçirilmezse, varsayılan değer kullanılır.
    int Topla(int a, int b = 1)
    {
        return a + b;
    }
     
    int sonuc1 = Topla(5);    // b için varsayılan değer (1) kullanılır, sonuç 6
    int sonuc2 = Topla(5, 3); // b için belirtilen değer (3) kullanılır, sonuç 8

 

  • Adlandırılmış Argümanlar (Named Arguments): Metot çağrılırken argümanları parametre adlarıyla birlikte belirtme imkanı sunar. Bu, özellikle çok sayıda parametresi olan metotları çağırırken kodun okunabilirliğini artırır ve argümanların sırasını karıştırma riskini azaltır.
    int Carp(int sayi1, int sayi2)
    {
        return sayi1 * sayi2;
    }
     
    int sonuc3 = Carp(sayi2: 5, sayi1: 10); // Parametre sırası önemli değil

Extension Metotlar (Genişletme Metotları)

Extension metotlar, mevcut tiplere (sınıflara, yapılara, arayüzlere) yeni metotlar eklememizi sağlayan özel bir özelliktir. Extension metotlar statik bir sınıfta statik olarak tanımlanır ve ilk parametre olarak genişletilecek tipin önüne this anahtar kelimesi eklenir.

public static class IntegerExtensions
{
    public static int Artir(this int sayi)
    {
        return sayi + 1;
    }
}
 
int num = 5;
int yeniNum = num.Artir(); // sanki int tipinin bir metoduymuş gibi çağrılır
System.Console.WriteLine(yeniNum); // Çıktı: 6

Metot Bilgisi ve Çağırma

Metotların ne iş yaptığını ve nasıl kullanıldığını anlamak için metot imzalarına (erişim belirleyici, döndürülecek değer, metot adı ve parametreler) bakmak önemlidir. Visual Studio gibi IDE'ler, metot imzaları hakkında hızlı bilgi (IntelliSense) sunarak geliştirme sürecini kolaylaştırır. Metot imzası üzerine üç adet eğik çizgi (///) ekleyerek otomatik olarak açılan summary etiketi aracılığıyla metot hakkında açıklayıcı bilgiler yazabiliriz. Bu, kodun dokümantasyonunu kolaylaştırır.

Metotlar, bulundukları sınıfın veya yapının bir örneği (instance) üzerinden ya da eğer statik bir metotsa doğrudan sınıf adı üzerinden çağrılır.

Ogrenci ogrenci1 = new Ogrenci();
ogrenci1.BilgiYazdir(); // Instance üzerinden metot çağırma
 
SinifIslemleri.OrtalamaHesapla(notlar); // Statik metot doğrudan sınıf adı üzerinden çağırma

Metot Çağırma Mekanizması ve Bellek Yönetimi

Metotlar çağrıldığında, argümanlar metot parametrelerine kopyalanır (değer tipleri için değer kopyalanır, referans tipleri için referans kopyalanır). Değer tipleri belleğin Stack bölgesinde tutulurken, referans tiplerinin asıl verisi Heap bölgesinde saklanır ve Stack'te sadece bu verilere ait adres bilgisi tutulur. Heap üzerindeki işlemler Stack üzerindeki işlemlere göre genellikle daha yavaştır.

Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile metotların temel kavramlarını, tanımlama ve kullanma yöntemlerini, farklı parametre geçirme tekniklerini ve extension metotları detaylı bir şekilde inceledik. Metotlar, kodunuzu düzenlemenin, tekrar eden işlemleri önlemenin ve daha modüler uygulamalar geliştirmenin anahtarıdır. Umarım bu rehber, metotların gücünü anlamanıza ve kodlarınızda etkili bir şekilde kullanmanıza yardımcı olur. Bir sonraki yazımızda, sınıflar ve nesne yönelimli programlamanın temellerine giriş yapacağız.

Webkolog'u takipte kalın!

Hepinize metotlarla dolu ve başarılı kodlama deneyimleri dilerim!

 

0 yorum:

Yorum Gönder