0Pricing
C# Academy · Ders

Statik Yerel İşlevler

Açıklık ve performans için yakalamaları önleyin.

Statik Yerel İşlevler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Statik Yerel İşlevler

Bir yerel işlevi static olarak işaretlemek, işlevin kendisini kapsayan hiçbir değişkeni veya this değerini yakalamasını engeller. Bu, işlevi kendi içinde yeterli ve daha anlaşılır kılar; ayrıca gizli kapanım ayırmalarını ortadan kaldırır.

Statik Yerel İşlev Tanımlama

static değiştiricisini dönüş türünün önüne ekleyin. İşlev yine parametre alabilir ve değer döndürebilir; yalnızca dışarıdaki yerel değişkenlere erişemez.

using System;

public class Program
{
    public static void Main()
    {
        static int Square(int n) => n * n; // captures nothing

        Console.WriteLine(Square(6));
    }
}

Yakalamaya İzin Yok

Statik bir yerel işlev, kendisini kapsayan yerel değişkenleri kullanamaz. İhtiyaç duyduğu her şey parametre olarak geçirilmelidir; bu da girdilerini açık hâle getirir.

using System;

public class Program
{
    public static void Main()
    {
        int factor = 3;
        // factor must be passed in, not captured
        static int Scale(int n, int f) => n * f;

        Console.WriteLine(Scale(5, factor));
    }
}

Gizli Ayırmalardan Kaçınma

Değişkenleri yakalayan statik olmayan yerel işlevler gizli bir kapanım nesnesi ayırabilir. Statik bir yerel işlev hiçbir şeyi yakalamadığından bu ayırmadan tamamen kaçınır.

using System;

public class Program
{
    public static void Main()
    {
        // Pure helper, no closure object created
        static bool IsEven(int n) => n % 2 == 0;

        for (int i = 0; i < 5; i++)
            Console.WriteLine(i + ": " + IsEven(i));
    }
}

Kendini Açıklayan Niyet

static anahtar sözcüğü, okuyuculara yardımcının yalnızca bağımsız değişkenlerine bağlı olduğunu bildirir. Bu güvence, işlevi anlamayı ve sınamayı kolaylaştırır.

using System;

public class Program
{
    public static void Main()
    {
        static int Clamp(int value, int lo, int hi)
            => value < lo ? lo : value > hi ? hi : value;

        Console.WriteLine(Clamp(15, 0, 10));
        Console.WriteLine(Clamp(-3, 0, 10));
    }
}

Derleyici Yakalama Olmadığını Zorunlu Kılar

Statik bir yerel işlevin içinde yanlışlıkla kendisini kapsayan bir yerel değişkene başvurursanız derleyici hata bildirir. Böylece istenmeyen bağımlılıklar erkenden yakalanır.

using System;

public class Program
{
    public static void Main()
    {
        int seed = 7;
        // Correct: seed is passed explicitly, not captured
        static int Mix(int x, int s) => x * 31 + s;

        Console.WriteLine(Mix(2, seed));
    }
}

Özyinelemeli Statik Yerel İşlevler

Statik yerel işlevler özyinelemeyi yine destekler; çünkü kendilerini çağırmaları, bir değişkeni yakalamakla aynı şey değildir.

using System;

public class Program
{
    public static void Main()
    {
        static int Power(int baseN, int exp)
            => exp == 0 ? 1 : baseN * Power(baseN, exp - 1);

        Console.WriteLine(Power(2, 10));
    }
}

out Parametreleriyle Birleştirme

Her yöntem gibi statik yerel işlevler de out parametrelerini kullanabilir. Bu özellik, yakalama yapmayan yapılarıyla birleştiğinde try-parse tarzı yardımcılar için oldukça uygundur.

using System;

public class Program
{
    public static void Main()
    {
        static bool TryParsePositive(string s, out int value)
        {
            value = 0;
            return int.TryParse(s, out value) && value > 0;
        }

        if (TryParsePositive("42", out int n))
            Console.WriteLine("got " + n);
        Console.WriteLine(TryParsePositive("-1", out _));
    }
}

Statik Yerel İşlevleri Temsilci Olarak Geçirme

Hiçbir şeyi yakalamadıkları için statik yerel işlevler, kapanım ayırmadan temsilcilere dönüştürülebilir; bu, yoğun yürütme yollarında önemli olabilir.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        static bool IsBig(int n) => n > 100;

        var nums = new List<int> { 50, 150, 200, 10 };
        Console.WriteLine(nums.Count(IsBig));
    }
}

static Ne Zaman Tercih Edilmeli?

Yardımcı kendisini kapsayan duruma ihtiyaç duymadığında statik bir yerel işlevi tercih edin. Bu, işlevin saf olduğunu belgeler, yanlışlıkla yakalamayı önler ve daha verimli olabilir. static anahtar sözcüğünü yalnızca yerel değişkenlere gerçekten kapanmanız gerektiğinde kaldırın.

using System;

public class Program
{
    public static void Main()
    {
        static string Describe(int score)
        {
            if (score >= 90) return "A";
            if (score >= 80) return "B";
            return "C";
        }

        Console.WriteLine(Describe(95));
        Console.WriteLine(Describe(82));
    }
}

Kendiniz Deneyin

Saf bir statik yerel işlev yazın ve bunu LINQ'ya bir yüklem olarak geçirin. Hiçbir şeyi yakalamadığı için kapanım olmadan bir temsilciye dönüştürülür.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        static bool IsLeapYear(int year)
            => (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

        var years = new List<int> { 1900, 2000, 2004, 2021, 2024 };
        Console.WriteLine(string.Join(", ", years.Where(IsLeapYear)));
    }
}

Hızlı Kontrol

static anahtar sözcüğünün bir yerel işleve ne kattığını hatırlayın.

Özet

static bir yerel işlev hiçbir şeyi yakalamaz.

  • Kendisini kapsayan yerel değişkenleri veya this değerini kullanamaz; verileri parametrelerle geçirin.
  • Gizli kapanım ayırmalarını önler.
  • Derleyici yakalamama kuralını uygular ve yanlışlıkla oluşan bağımlılıkları yakalar.
  • Yardımcı kendisini kapsayan duruma ihtiyaç duymadığında bunu tercih edin.

Sıkça Sorulan Sorular

“Statik Yerel İşlevler” dersi ücretsiz mi?

Evet — “Statik Yerel İşlevler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Statik Yerel İşlevler” dersinde ne öğreneceğim?

Açıklık ve performans için yakalamaları önleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Statik Yerel İşlevler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yerel İşlevleri Bildirme
  2. Kapanışlar ve Yakalanan Değişkenler
  3. Statik Yerel İşlevler
  4. Yerel İşlevler ve Lambda'lar
← C# Academy Sayfasına Dön