Karmaşık problemleri çözmenin en kolay yolu parçalara ayırmaktır. Parçaların kendi içende çözümü bütünün çözümüne katkıda bulunur. Program geliştirirken bütün işlemleri tek bir fonksiyon içerisinde yapmak yerine alt programlara yani metotlara ayırmak; kod tekrarını azaltır, okunabilirliği arttırır ve programın daha kolay geliştirilebilmesini sağlar.
Örnek Bir Senaryo: Bir otel otomasyonu hazırladığımızı düşünelim. Müşteri bilgilerine her ihtiyaç duyduğumuzda, veri tabanından müşteri bilgilerini çeken kod parçacığını yazmak kod kalabalığını arttıracaktır. Bu görevi bir metoda verip, her ihtiyaç duyduğumuzda metoda çağrıda bulunursak hem kod kalabalığını önlemiş oluruz hemde kaynak kodlarımızın tekrar kullanılabilirliğini sağlamış oluruz.
Metot Bildirimi
[Erişim Belirleyicisi] [Geri Dönüş Değerinin Tipi] [Metot Adı] (Parametreler) { // Gövde }
Erişim Belirleyicisi: Metoda olan erişimin sınırlarını belirlemektedir.
- Private: Sadece tanımlandığı sınıf içerisinden erişilebilir.
- Public: Her yerden erişilebilir.
- Internal: Sadece bulunduğu projede erişilebilir.
- Protected: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan erişilebilir.
Metodun kendisini çağıran metottan aldığı bilgilere Parametre denilmektedir. Metodun görevini tamamladıktan sonra kendisini çağıran metoda gönderdiği bilgiye de Geri Dönüş Değeri denilmektedir.
// Sadece tanımlandığı sınıf içerisinden erişilebilir. (Private) // Nesne oluşturmadan metoda erişilebilir. (Static) // Metodun herhangi bir geri dönüş değeri yoktur. (Void) // Parametre olarak int tipinde bir dizi almaktadır. (int[] dizi) private static void EkranaYaz1(int[] dizi) { foreach (int i in dizi) Console.WriteLine(i); } // EkranaYaz1 metodu sadece int tipindeki dizileri parametre olarak almaktaydı. // Bütün diziler System.Array sınıfı türünden bir nesnedir. // Bu yüzden EkranaYaz2 metodu veri tipi fark etmeksizin her türlü diziyi parametre olarak alabilmektedir. private static void EkranaYaz2(Array dizi) { foreach (object i in dizi) Console.WriteLine(i); } // int tipinde 2 parametre almaktadır ve geriye int tipinde bir değer döndürmektedir. private static int Topla(int sayi1,int sayi2) { return sayi1 + sayi2; } static void Main(string[] args) { int[] SayiDizisi = { 5, 18, 56, 28 }; EkranaYaz1(SayiDizisi); string[] SozcukDizisi = { "Serdar", "Yılmaz" }; EkranaYaz2(SozcukDizisi); EkranaYaz2(SayiDizisi); // Topla(5,10) ifadesi geriye 15 değerini döndürecektir. Console.WriteLine("Toplam:{0}", Topla(5,10)); }
Metot Çağrımı
Aynı sınıf içerisindeki metotlar birbirlerine direk çağrıda bulunabilir. Farklı sınıftan bir metoda çağrıda bulunabilmek için o sınıftan bir nesne oluşturmak gerekir. Fakat metot static ise nesne oluşturmadan, sadece metodun hangi sınıfta olduğu belirtilerek metoda erişilebilir.
class Sinif1 { public int Topla1(int sayi1, int sayi2) { return sayi1 + sayi2; } } class Sinif2 { public static int Topla2(int sayi1, int sayi2) { return sayi1 + sayi2; } } class Program { public static int Topla(int sayi1,int sayi2) { return sayi1 + sayi2; } static void Main(string[] args) { // Main ile aynı sınıf içerisinde bulunan Topla() metodu çağrıldı. Console.WriteLine(Topla(5, 15)); // Sinif1 içerisinde yer alan Topla1() metodu çağrıldı. Sinif1 s1 = new Sinif1(); Console.WriteLine(s1.Topla1(5, 15)); // Sinif2 içerisinde yer alan Topla2() metodu çağrıldı. Console.WriteLine(Sinif2.Topla2(5, 15)); } }
Metot Yazarken Nelere Dikkat Etmeliyiz ?
- Metotlara olabildiğince az görev verilmelidir. Örneğin bir metot hem diziyi sıralayıp hemde elemanlarını ekrana yazdırmamalıdır.
- Metodun adı, metodun işlevinin özeti niteliğinde olmalıdır.
- Metot çok fazla parametre almamalıdır.
Serdar YILMAZ
Mükemmel paylaşım için teşekkürler
Merhaba, Makaleniz konuyu çok yalın ve net bir şekilde anlatmış.Emeklerinize sağlık
Vatana millete verilen bir hizmettir bu 🙂
Allah razı olsun ne zamandır böyle bir kaynak arıyordum
Arkadaşım, tebrik ederim. Konuyu ne kadar yalın ve pozitif anlatmışsın. Sadece bu makale için değil, sitede yayınladığın tüm yazılar için bunu söyleyebilirim.
Çok açıklayıcı. Anlamakta sorun yaşayanlar için güzel bir paylaşım olmuş. Çalışmalarınızda başarılar
Merhaba ben Halime.Bilgisayar mühendisliği ikinci sınıf öğrencisiyim.Yaz okulu içi Sakarya’ya geldim.Bu örnekler gerçekten konuyu anlamama çok yardımcı oldu.Çok teşekkürler.Hayat boyu başarılar.