Metotlar

Metotlar yazılımda bir takım işlem kodlarının bir arada tutularak bir metot altında tanımlanması ve bu metotların gerekli görüldüğü yerde çağırılması sonucu kullanılan kod bloklarıdır. Yani aslında şöyle diyebiliriz, tekrar gerektiren durumlarda komutları yeniden yazmak yerine bir metot oluşturarak, sadece isminin çağırılması yani isminin yazılması yeterlidir.

Metotlar güvenlik veya gizlilik bakımından ele alırsak ikiye ayrılmaktadırlar. Bunların birisi public bir diğeri de private metotlardır. Ayrıca bir de değer döndürme açısından ikiye ayrılırlar. Bunlarda geriye değer döndüren metotlar ve geriye değer döndürmeyen metotlar olarak adlandılır.

Geriye Değer Döndürmeyen Metotlar

Bu metotların oluşturumunda geriye değer döndürme yoktur. Şimdi bir örnekle yapalım; formuma 5 adet textbox ekleyeceğim. Ayrıca 4 tane buton ekliyorum. Butonlarımın birinde textbox içeriğini temizle işlemi yapacağım, bir diğerinde 3 textboxların rengini değiştirelim.

Bir butonlada textbox içerisine yazı yazdıracağım. Örnek olarak textboxın birine İsmail, diğerine GÜRSOY, bir diğerine Emir, bir diğerine GÜRSOY bir diğerine de Galatasaray yazalım.

Son kalan butonlada textboxları pasif yapalım.

Şimdi 4 adet metot tanımlaması yapacağım, bunlar geriye değer döndürmeyen tipte metotlar olacak. Metot tanımlamalarımı global alanda yapıyorum.

Metot tanımlaması yaparken syntax şu şekilde;

Private void MetotAd ()
{
Yapılacak işlemler;
}

Public, private veya sadece void olarak belirtilebilir. Bunların arasındaki farkı daha sonra açıklayacağım.

Oluşturulurken en sonda noktalı virgül kullanılmaz. Yalnız program içinde çağırılma aşamasında noktalı virgül kullanılır. Hadi kodlayalım;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form15 : Form
    {
        public Form15()
        {
            InitializeComponent();
        }

        //Temizle metodunu oluşturdum
        private void Temizle()
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
        }
        //Renklendir metodunu oluşturdum
        public void Renklendir()
        {
            textBox1.BackColor = Color.Yellow;
            textBox2.BackColor = Color.Red;
            textBox3.BackColor = Color.BlueViolet;
            textBox4.BackColor = Color.Chocolate;
            textBox5.BackColor = Color.Cyan;
        }
        //Doldur metodunu oluşturdum
        void Doldur()
        {
            textBox1.Text = "İsmail";
            textBox2.Text = "GÜRSOY";
            textBox3.Text = "Emir";
            textBox4.Text = "GÜRSOY";
            textBox5.Text = "Galatasaray";
        }
        //Pasif Yap metodunu oluşturdum.
        private void PasifYap()
        {
            textBox1.Enabled = false;
            textBox2.Enabled = false;
            textBox3.Enabled = false;
            textBox4.Enabled = false;
            textBox5.Enabled = false;
        }
        //metotlarımı ilgili butonlarda çağırıyorum.
        private void button1_Click(object sender, EventArgs e)
        {
            Temizle();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Renklendir();         
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Doldur();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            PasifYap();
        }
    }
}

Burada bir açıklama yapalım, void boş, geçersiz anlamına gelmektedir ve geriye değer döndürmeyen metotlar için kullanılır.

Metotlarda başlangıçta public veya private olduğunu belirtmez isem bu metot private olarak kabul edilir.

metotlar

Geriye Değer Döndüren Metotlar

Örnek olarak bir denklem düşünelim. Bu denklemin içerisinde yer alan değişkenler değiştiğinde her defasında sonuç değişmekte olsun. Dolayısı ile bir sonuç elde ettiğim için sonucunda bir değer elde ediyorum. İşte geriye değer döndüren metotlarda metodu kullandığımda geriye bir değer de döndürülür. Bununla alakalı bir örnek yapalım, basit bir örnekle başlayalım. Geriye değer döndüren metotlar ise bir veritipinde tanımlanırlar.

Geriye döndüren metotların oluşturulması şu şekildedir, örneklersek;

int carpim (int sayi1, int sayi2)
{
Yapılacak işlemler
}

Carpim metodumun adı, carpim metodumun tipi ise int tipindedir. Carpim metodumun ayrıca iki tane parametresi mevcut. Metotlar içinde paramtre tanımlarken her bir parametrenin değişken tipi ve değişken adı ayrı ayrı yazılır. Yani int sayi1, sayi2 şeklinde bir yazım olmaz. Her biri ayrı ayrı değişken tipi ile birlikte tanımlanmalıdır.

Örnek olarak iki sayının çarpımını yapan kısa kodlarımızı yazalım. Formuma 5 adet label ekledim ve bir adette buton ekledim. Her bir labelda metodun sonucunu yazdıracağım.

Kodlarım içerisinde açıklama yapmam gerekirse;

int Carpim(int sayi1, int sayi2)
        {
            int carpimSonuc = sayi1 * sayi2;
            return carpimSonuc;
        }

Burada int tipinde bir metot tanımlaması yaptım, adını da Carpim verdim.Metodum iki tane parametre alacak. Bir tanesi int tipinde sayi1, diğeri de yine int tipinde sayi2 parametresi. Daha sonra yapılacak işlem int tipinde carpimSonuc işlemi, burada çarpma işlemim olacak. Geriye de carpimSonuc dönecek. Daha sonra metodumu çağırırken şöyle çağırıyorum;

Carpim(3, 8)

Buarada Carpim metodumun adı, 3 ilk parametre yani sayi1 dediğim değişken, 8 ise ikinci parametre yani sayi2 dediğim değişken. Şimdi kodlayalım bakalım;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form16 : Form
    {
        public Form16()
        {
            InitializeComponent();
        }

        //metot tanımlamamı gerçekleştirdim. Burada int tipinde bir metotum var, iki adette parametresi mevcut. 
        int Carpim(int sayi1, int sayi2)
        {
            int carpimSonuc = sayi1 * sayi2;
            return carpimSonuc;
        }

        //metotumu çağırarak işlemlerimi yapıyorum.
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Carpim(3, 8).ToString();
            label2.Text = Carpim(5, 6).ToString();
            label3.Text = Carpim(7, 5).ToString();
            label4.Text = Carpim(3, 2).ToString();
            label5.Text = Carpim(8, 9).ToString();

        }
    }
}

Bir başka örnek daha yapalım bu örnektede metodumuz 3 adet sayıyı toplama ile ilgili olsun. Bu sefer tanımlanan metot içerisinde 3 adet parametre yer alacak. Yine aynı şekilde 5 label ve bir buton ekliyorum formuma ve ilgili kodları yazıyorum.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form16 : Form
    {
        public Form16()
        {
            InitializeComponent();
        }

        //metot tanımlamamı gerçekleştirdim. Burada int tipinde bir metotum var, üç adette parametresi mevcut. toplam adında int tipinde bir değer geri döndürülmekte. 
        int toplama(int sayi1, int sayi2, int sayi3)
        {
            int toplam = sayi1 + sayi2 + sayi3;
            return toplam;
        }

        //metotumu çağırarak işlemlerimi yapıyorum.
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = toplama(3, 8, 4).ToString();
            label2.Text = toplama(5, 6, 4).ToString();
            label3.Text = toplama(7, 5, 6).ToString();
            label4.Text = toplama(3, 2, 1).ToString();
            label5.Text = toplama(8, 9, 7).ToString();

        }
    }
}

Klavyeden girilen bir sayı üzerinde işlem yapalım. Klavyeden girilen sayının karesini alan metot yazalım.Bu sefer formuma 1 adet textbox bir adette buton ekledim.extboxa sayıyı girdiğimde butona basacağım ve karesini bir messagebox ile yazdıracağım. Kodlayalım;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form17 : Form
    {
        public Form17()
        {
            InitializeComponent();
        }
        //metodumu oluşturdum, tek bir parametre yeterli.
        int karesiniAl(int sayi)
        {
            int kareBul = sayi * sayi;
            return kareBul;
        }
        //metodumu çağırdım ve messagebox ile sonucu yazdırdım.
        private void button1_Click(object sender, EventArgs e)
        {
            int s1 = Convert.ToInt32(textBox1.Text);
            MessageBox.Show(karesiniAl(s1).ToString());
        }
    }
}

Burada görüleceği üzere tek bir parametre yeterli, çünkü sayının karesini bulabilmek için sayıyı kendisi ile çarpıyoruz.

Bir örnek daha yapalım, bu sefer klavyeden 2 sayı alalım bu 2 sayının farkını bulan bir metot yazalım. İlk sayıdan ikincisi çıkarılacak. Yine messagebox ile sonucu gösterelim.

Bu sefer iki textbox ve bir adette buton ekliyorum formuma.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form17 : Form
    {
        public Form17()
        {
            InitializeComponent();
        }
        //metodumu oluşturdum, fark bulacağım için iki parametre gerekiyor.
        int fark (int sayi1, int sayi2)
        {
            int sonuc = sayi1 - sayi2;
            return sonuc;
        }
        //metodumu çağırdım ve messagebox ile sonucu yazdırdım.
        private void button1_Click(object sender, EventArgs e)
        {
            int s1 = Convert.ToInt32(textBox1.Text);
            int s2 = Convert.ToInt32(textBox2.Text);
            MessageBox.Show(fark(s1,s2).ToString());
        }
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir