C# Algoritma ve Programlamaya Giriş 10. Hafta

{{ page.title }}

Metotlar

Programın herhangi bir yerinde kullanılmak için belirli bir işi yerine getirmek amacıyla tasarlanmış alt programlara metot denir. Metotların önceden belirlenmiş bir işi vardır ve kendisi çağırıldığında daha önceden kendisine tanımlı bu işi yaparlar. Metotlar, çağırılan fonksiyon tarafından birtakım bilgiler alabilirler, alınan bu bilgilere göre bir takım sonuçlar üreterek geriye bir bilgi gönderebilir.

Metodun iş yapması için kendisini çağıran metottan aldığı bilgilere parametre ya da metot argümanları denir. Kendisini çağıran fonksiyona döndürdüğü bilgiye ise metodun geri dönüş değeri (return value) denir.C# da bildirilen bütün metotlar mutlaka bir sınıfın içinde olmalıdır. C# da metot bildirimi aşağıdaki gibi yapılmaktadır.

[erişim belirteçleri] Metotismi (parametre listesi)
{
metot govdesi
}

Erişim belirteçleri ile metoda programın nereden erişebileceği söylenir. Erişim belirteçlerinin kullanılması zorunlu değildir.Eğer metodun başına herhangi bir belirteç konulmazsa metot varsayılan olarak bildirilen sınıfa özel (private) olur.Yeni metot sadece bildirildiği sınıf içerisinden çağırılabilir.

Geri dönüş değeri, metodun iş yaptıktan sonra kendisini çağıran fonksiyona gönderdiği bilgidir. Bu bilgi herhangi bir veri tipinde olabilir. Parametre listesi ise metodu çağıranın iş yapması için verdiği bilgilerdir. Parametre olarak gönderilen bilgilerde herhangi bir veri tipinde olabilir.

Örnek: iki sayının toplanılması işleminin bir metot tanımlayarak yapalım.
static int MetotToplam(int a, int b)
{
return a+b;
}

return bir anahtar sözcüktür. a+b işleminin sonucunu parametre olarak geri döndürür. Burada geri döndürülen verinin metodun geri dönüş değeri ile aynı veri türünde olması gerektiğine dikkat edilmelidir!

Her metot geri değer döndürmeyebilir. Örnek: ekrana bir bilgi yazdırmak istediğimde kullandığım Console.WriteLine() da bir metotdur ve geri dönüş değeri yoktur. Ben bu metodu daha da kısa bir şekilde yeni bir metot yazarak tanımlamak istiyorum. Metodumun ismi «EkranaYaz» olsun.

static void EkranaYaz(object i)
{
Console.WreteLine(i.ToString());
}

Geri dönüş değeri olmayan metotlar void anahtar sözcüğü ile bildirilmelidir.

Metotlar parametre değeri tanımlanmadan da kullanılabilirler. Örnek: yazdığımız her kodu çalıştırdığımızda son satırda program sürümü ve programlayıcı bilgileri yer alsın bunu da bir metot kullanarak yapalım.

static void Bilgi()
{
Console.WriteLine("versiyon 1.0");
}

Metotlar ile ilgili Önemli Özellikler

  1. Metotlara isim verilirken değişken isimlendirme kurallarına uyulmalıdır.
  2. Metotlar çağırılırken parametreler eksiksiz girilmelidir.
  3. Geri dönüş değeri olmayan metotlarda void anahtar sözcüğünün kullanımı unutulmamalıdır.
  4. Geri dönüş değeri olmayan (void) meotolarda return anahtar sözcüğü kullanılmamalıdır.
  5. Metotların geri dönüş değerleri uyumlu bir veri türünden nesneye atanmalıdır.
  6. Bir metodun geri dönüş değeri olmayacağı gibi parametresi de kullanılabileceği unutulmamalıdır.
  7. Bir metot içinde başka bir metot bildirilemez.
  8. Metotların içinde tanımlanan değişkenler metodun dışında geçersizdir

Metot Parametresi Olarak Diziler

Diziler C# da ayrı bir tür olarak ele alındığından dizileri metot da parametre değeri olarak kullanmak da normal veri türleri gibidir. Örneğin:

static void DiziYaz(int[] dizi)
{
}

Örnek: Metot kullanarak bir dizinin elemanlarının ekrana yazdırılması.

static void DiziYaz(int[] dizi)
{
foreach(int i in dizi)
{
Console.WriteLine(i);
}
}

Özyineli (Recursive) Metotlar

  1. Bazı algoritmalarda bir metodun içinde kendisini çağırmak mümkün olabilmektedir.
  2. Kendi kendini çağıran bu tür metotlara özyineli (recursive) metot denilmektedir.
  3. Kendi kendini çağıran metotlarda bu çağırımı sonlandıran bir kontrol olmalıdır.
  4. Özyineli (Recursive) algoritmalara en güzel örnek faktöriyel hesabıdır

Hatırlarsak bir sayının faktörüyeli 1 den kendisine kadar olan sayıların çarpımına eşittir. n!=(n)(n-1)(n-2)…3.3.1 dir

Metotların Aşırı Yüklenmesi

Metotların aşırı yüklenmesi (overloading), aynı sınıfın içinde aynı metodun farklı şekillerde tanımlanarak farklı işleri yapabilmesidir. Üç parametreden (Metot adı, parametre sayısı, parametre adı) en az birinin farklı olması şartıyla.

private static int metot(int a,int b)
{
}
private static int metot(string a,string b)
{
}
private static int metot(int a,string b)
{
}

BOT Benson Topluluk kurucusu ve bir yazılımcı.