16 Nisan 2013 Salı

107 - Metodlar... Metot Tanımlama ve Kullanma...

Programın farklı yerlerinde aynı işlemi yapacak kod satırlarına ihtiyacımız olursa, yada aynı işlemi defalarca yaptıracaksak metodları kullanırız... Metodlar ve Sınıflar olmadan C# üzerinde işlem yapmamız ve C# ın o esnek yapısını kullanmamıza imkan yoktur...


Metotların amacı; programın yapısal olmasını sağlamak ve birbiriyle ilgili komutları veya programın bir bölümünü istenen isim altında toplamaktır. Bu şekilde programın okunması kolaylaşmakta ve yapısal bir görünüm kazanmaktadır.

Bir önceki konudan hatırlayacağınız gibi bir çok metod zaten C# tarafından bizim kullanımıza hazır hale getirilmiştir... Örneğin substring, split, compare gibi string komutlar, hatta Math sınıfına ait olan bütün matematiksel işlemleri yaptığımız komutlar aslında bir metottur... Program bunları bizim imkanımıza sunmuştur...

İşi biraz daha ilerletecek olursak, hani C# nesne tabanlı bir programlama dili ya, Console komutu ile çağırdığımız ve kullandığımız Write, ReadLine ve diğerleri aslında bir sınıfın içerisinden çağrılan metotlardır...

Metod Çeşitleri:
Temel de üç çeşit metod vardır...
a) Geri değer döndürmeyen metodlar,
b) Parametre alan metodlar,
c) Geri değer döndüren metodlar,

Metod Tanımlama:

erişim  dönüştipi  isim ( parametreler )
{
        metodun gövdesi
}

Erişim: Hazırlayacağımız metoda kullanıcıların nasıl erişebileceğini belirleyecek olan kısımdır... İki çeşittir...
 a) Public: Programın içerisinde bulunan her yerden bu metodun çağrılması isteniyorsa public erişimi kullanılır...
  b)  Private: Bu şekilde kullanıldığında sadece metodun çağrıldığı sınıfın içerisinden çağrıla bilecektir. Eğer her hangi bir kullanım olmaz ise private olarak kabul edilir...


Nesne yönelimli programlama dillerinde metotlar, tanımlandıkları sınıf adı ile birlikte çağrılırken eğer metot, programın ana metodu ( Main() ) içerisinden çağrılacaksa static olarak tanımlanır ve sınıf adını yazmaya gerek kalmadan çağrılır.


Dönüş-tipi: Bu metodun çalıştırıldıktan sonra programda çağrıldığı noktaya döndürdüğü verinin tipini belirlediğimiz kısımdır. Eğer metot bir değer döndürmeyecekse dönüş tipi void olarak belirtilmelidir.

İsim: Program içerisinde metodu çağırırken kullanacağımız tanımlamadır... Bu tanımlama da konu ile alakalı ve  değişken tanımlama kurallarına uygun bir tanımlama yapılmasında fayda vardır...

Parametreler: Parametreler metot içerisinde kullanılır... Program içerisinden bazı değerleri almamız gerektiğinde parametreler yardımı ile bu değerleri metotlara aktarırız... Parametrelerin tanımlanan tipleri ile program içerisinde metotların çağrıldıkları yerlerdeki değerler aynı olmak zorundadır... Örneğin birinci parametre string tipinde tanımlandı ise, gelen veri de string olmalıdır... Aksi takdir de hata mesajları verecektir...



Örnek: Aşağıdaki örnekte metot kullanılarak iki sayının toplaması yapılmakta ve ekranda gösterilmektedir...



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        // Metodumuz geri değer döndürmeyeceği için void, ana programdan çağrılacağı için static kullanılarak tanımlanmıştır...
        // Erişim olarak ise her hangi bir şey kullanılmadığı için program private olarak almıştır...
        static void islem() 
        {
            // Metod içerisinde iki sayı toplatılıyor... 
            Console.Write("Bir sayı giriniz: "); 
            int s1 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Bir sayı giriniz: ");
            int s2 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Toplama işleminin sonucu...:" + (s1 + s2).ToString() +"\n");
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            islem(); // Metodu çağırıyoruz... Bu çağırma işlemini birden çok kere yapınız... 
        }
    }
}

Örnek: Metoda gönderilen iki sayıyı ve işlem türüne göre sonucu gösteren program?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void islem(string tur, int a, int b)
        {
            if (tur == "+")
                Console.WriteLine("Sonuc =" + (a + b));
            else if (tur == "-")
                Console.WriteLine("Sonuc =" + (a - b));
            else if (tur == "*")
                Console.WriteLine("Sonuc =" + (a * b));
            else if (tur == "/")
                Console.WriteLine("Sonuc =" + (a / b));
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            islem("*", 8, 10); // Bu metod birden çok defa çağrılmaktadır... 
            islem("+", 5, 4);  // Her seferinde farklı değerler gönderilmektedir... 
            islem("*", 5, 20);
        }
    }
}

Üç parametre gönderiyoruz... Parametreler birebir eşleşir... 
Gönderilen   islem("*",8,10) 
Alınan          static void islem(string tur, int a, int b)

Burada tur = * , a=8, b = 10 değerlerini almaktadır...