🚀 C# ile Programlamaya Giriş: Kodlamaya İlk Adımını At, Kendi Projelerini Geliştirmeye Başla!
00ANASAYFA 01YAZILAR 02EĞİTİM 03ELEKTRİK_ENERJİ 04OTOMOTİV_MÜHENDİSLİĞİ 05ARAÇLAR 06LAB 07SÖZLÜK 08ETİKETLER ♡OKUMA LİSTEM ⌕ARA
TRENG

Metotlar: Kodu Parçalara Ayırmak

Tekrarlayan işleri metotlara dönüştürüyor; parametre, dönüş değeri, varsayılan değer, aşırı yükleme ve özyinelemeyi öğreniyorsun.

Metot nedir?

Metot, adı olan ve çağrıldığında çalışan bir kod parçasıdır. Aynı hesabı programın üç yerinde yapıyorsan, onu bir kez metot olarak yaz, üç yerden çağır. Hem kısalık hem hatasızlık sağlar: düzeltme gerekirse tek yerde yaparsın.

static void Selamla()
{
    Console.WriteLine("Merhaba!");
}

Selamla();
Selamla();

void, metodun bir değer döndürmediğini söyler. Üst düzey ifadelerle yazdığın programda metotları dosyanın herhangi bir yerinde tanımlayıp çağırabilirsin.

Parametre ve dönüş değeri

Metoda parantez içinde veri verebilir, return ile sonuç alabilirsin. Ohm yasasını metot yapalım:

static double OhmAkim(double gerilim, double direnc)
{
    return gerilim / direnc;
}

double akim = OhmAkim(12, 470);
Console.WriteLine($"Akım: {akim:F4} A");
Akım: 0,0255 A

Metot imzası şu parçalardan oluşur: dönüş tipi (double), ad (OhmAkim), parametreler (double gerilim, double direnc). Metot adlarını büyük harfle başlatmak C# gelenekleridir.

Metotları birbirine bağlamak

static double OhmAkim(double v, double r) => v / r;
static double Guc(double v, double i) => v * i;

double v = 12, r = 470;
double i = OhmAkim(v, r);
Console.WriteLine($"Güç: {Guc(v, i):F3} W");
Güç: 0,306 W

Tek ifadelik metotları => ile kısa yazabilirsin (expression-bodied). Güç P = V × I = 12 × 0,02553 ≈ 0,306 W.

Varsayılan ve adlandırılmış parametreler

static double Verim(double cikis, double giris, int basamak = 1)
{
    return Math.Round(cikis / giris * 100, basamak);
}

Console.WriteLine(Verim(4.5, 5));                    // 90
Console.WriteLine(Verim(4.567, 5, basamak: 2));      // 91,34

Varsayılan değer verilen parametre çağrıda atlanabilir. Adlandırılmış argüman (basamak: 2) hangi değerin neye ait olduğunu açıkça gösterir ve sırayı karıştırma hatasını önler.

Aşırı yükleme (overloading)

Aynı adlı birden fazla metot, parametre listeleri farklıysa birlikte yaşayabilir. (Üst düzey kodda iç içe tanımlanan yerel metotlar aşırı yüklenemez; bu yüzden metotları bir sınıfın içine koyuyoruz. Sınıfları sonraki derste ayrıntılı göreceksin.)

Console.WriteLine(Geometri.Alan(2).ToString("F2"));   // daire: 12,57
Console.WriteLine(Geometri.Alan(3, 4));                // dikdörtgen: 12

static class Geometri
{
    public static double Alan(double yaricap) => Math.PI * yaricap * yaricap;
    public static double Alan(double en, double boy) => en * boy;
}

out ve çoklu dönüş değeri

Bir metot tek değer döndürür; birden fazla değer gerekirse out parametre ya da tuple kullanılır. Tuple daha okunaklıdır:

static (double Min, double Max) MinMax(double[] veri)
{
    double min = veri[0], max = veri[0];
    foreach (double d in veri)
    {
        if (d < min) min = d;
        if (d > max) max = d;
    }
    return (min, max);
}

var sonuc = MinMax(new double[] { 3.3, 2.9, 3.6, 3.1 });
Console.WriteLine($"En düşük: {sonuc.Min}, en yüksek: {sonuc.Max}");
En düşük: 2,9, en yüksek: 3,6

Özyineleme (recursion)

Bir metot kendini çağırabilir. Mutlaka bir durma koşulu olmalıdır. Klasik örnek faktöriyel: 5! = 5 × 4 × 3 × 2 × 1.

static long Faktoriyel(int n)
{
    if (n <= 1) return 1;          // durma koşulu
    return n * Faktoriyel(n - 1);  // kendini daha küçük sayıyla çağır
}

Console.WriteLine(Faktoriyel(5));
120

Dikkat: Durma koşulu unutulursa metot sonsuza kadar kendini çağırır ve program "StackOverflow" ile çöker. Çok derin özyinelemeler yerine mümkünse döngü kullan.

İyi metot: Bir metot tek bir iş yapmalı ve adı o işi anlatmalı. "HesaplaVeYazdirVeKaydet" yerine üç ayrı metot yaz. Bu, test etmeyi ve değiştirmeyi kolaylaştırır.

Kendin dene

SeriDirenc(double r1, double r2) ve ParalelDirenc(double r1, double r2) metotlarını yaz. Ardından Main kısmında iki direnç değerini kullanıcıdan alıp ikisini de yazdır. Bonus: double[] alan bir aşırı yüklenmiş sürüm yaz.

// Mini sınav

Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.

1. static void Selamla() tanımındaki void ne anlama gelir?
2. Aşırı yükleme (overloading) nedir?
3. Özyinelemeli bir metotta mutlaka bulunması gereken şey nedir?

Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.

İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.