0Pricing
C# Academy · Pelajaran

Fungsi Lokal vs Lambda

Pilih antara fungsi lokal dan lambda.

Fungsi Lokal vs Lambda adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Fungsi Lokal dibandingkan Lambda

Fungsi lokal dan lambda sama-sama memungkinkan Anda mendefinisikan fungsi kecil di dalam metode. Keduanya memiliki banyak kesamaan, tetapi berbeda dalam sintaksis, kemampuan, dan performa. Memilih yang tepat membuat kode tetap jelas dan efisien.

Dua Cara Menulis Fungsi Pembantu

Di sini, fungsi pembantu pengkuadratan yang sama ditulis sebagai fungsi lokal dan sebagai lambda yang ditetapkan ke delegasi. Keduanya menghasilkan hasil yang sama.

using System;

public class Program
{
    public static void Main()
    {
        int SquareFn(int n) => n * n;       // local function
        Func<int, int> squareLambda = n => n * n; // lambda

        Console.WriteLine(SquareFn(4));
        Console.WriteLine(squareLambda(4));
    }
}

Fungsi Lokal Mendukung Rekursi dengan Mudah

Fungsi lokal dapat memanggil dirinya sendiri berdasarkan nama. Lambda tidak dapat merujuk variabelnya sendiri selama inisialisasi, sehingga rekursi menjadi lebih rumit jika menggunakan lambda.

using System;

public class Program
{
    public static void Main()
    {
        // Clean recursion with a local function
        int Factorial(int n) => n <= 1 ? 1 : n * Factorial(n - 1);
        Console.WriteLine(Factorial(5));
    }
}

Fungsi Lokal Dapat Bersifat Generik

Fungsi lokal mendukung parameter tipenya sendiri. Lambda tidak dapat bersifat generik, jadi fungsi lokal adalah pilihan yang tepat untuk fungsi pembantu bertipe yang dapat digunakan kembali.

using System;

public class Program
{
    public static void Main()
    {
        T First<T>(T[] items) => items[0]; // generic local function

        Console.WriteLine(First(new[] { 9, 8, 7 }));
        Console.WriteLine(First(new[] { "a", "b" }));
    }
}

Performa: Menghindari Alokasi Delegasi

Lambda yang ditetapkan ke delegasi mungkin mengalokasikan objek delegasi dan, jika menangkap variabel, sebuah penutupan. Fungsi lokal yang dipanggil secara langsung menghindari keduanya, yang penting dalam perulangan yang sering dijalankan.

using System;

public class Program
{
    public static void Main()
    {
        // Direct call, no delegate or closure allocation
        static int Add(int a, int b) => a + b;

        int total = 0;
        for (int i = 0; i < 5; i++) total = Add(total, i);
        Console.WriteLine(total);
    }
}

Parameter out dan ref

Fungsi lokal dapat mendeklarasikan parameter out dan ref; lambda melalui delegasi Func/Action yang umum tidak dapat melakukannya. Karena itu, fungsi pembantu coba-urai cocok ditulis sebagai fungsi lokal.

using System;

public class Program
{
    public static void Main()
    {
        bool TryGetFirstDigit(string s, out int digit)
        {
            digit = 0;
            foreach (var c in s)
                if (char.IsDigit(c)) { digit = c - '0'; return true; }
            return false;
        }

        if (TryGetFirstDigit("abc4", out int d))
            Console.WriteLine(d);
    }
}

Lambda Unggul sebagai Argumen Sebaris

Saat Anda perlu meneruskan perilaku langsung ke metode seperti LINQ Where atau Select, lambda adalah pilihan yang paling ringkas dan mudah dibaca.

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

public class Program
{
    public static void Main()
    {
        var nums = new List<int> { 1, 2, 3, 4, 5, 6 };
        var evens = nums.Where(n => n % 2 == 0).Select(n => n * 10);
        Console.WriteLine(string.Join(", ", evens));
    }
}

Keduanya Mendukung Penangkapan Variabel

Kedua bentuk tersebut dapat menangkap variabel dari lingkup luar. Perbedaannya terutama terletak pada sintaks dan biaya alokasi, bukan pada kemungkinan melakukan penangkapan.

using System;

public class Program
{
    public static void Main()
    {
        int bonus = 10;
        int WithBonusFn(int n) => n + bonus;     // captures
        Func<int, int> withBonusLambda = n => n + bonus; // captures

        Console.WriteLine(WithBonusFn(5));
        Console.WriteLine(withBonusLambda(5));
    }
}

Penetapan Pasti dan Urutan

Fungsi lokal dapat dipanggil sebelum deklarasinya di dalam metode; variabel lambda harus ditetapkan sebelum digunakan. Hal ini membuat penempatan fungsi lokal lebih fleksibel.

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Triple(4)); // allowed before declaration

        int Triple(int n) => n * 3;
    }
}

Memilih di Antara Keduanya

Gunakan fungsi lokal untuk fungsi pembantu yang memiliki nama, dapat digunakan kembali, bersifat rekursif atau generik, maupun sering dieksekusi. Gunakan lambda untuk perilaku singkat sebaris yang langsung diteruskan ke metode lain. Keduanya adalah alat; pilih berdasarkan tujuan.

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

public class Program
{
    public static void Main()
    {
        static bool IsPrime(int n)
        {
            if (n < 2) return false;
            for (int i = 2; i * i <= n; i++)
                if (n % i == 0) return false;
            return true;
        }

        var primes = Enumerable.Range(2, 20).Where(IsPrime);
        Console.WriteLine(string.Join(", ", primes));
    }
}

Cobalah Sendiri

Gunakan fungsi lokal rekursif untuk logika inti dan lambda untuk proyeksi LINQ sebaris, sehingga setiap konstruksi dapat melakukan hal yang paling dikuasainya.

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

public class Program
{
    public static void Main()
    {
        // Local function: recursive, named, reusable
        static int DigitCount(int n) => Math.Abs(n) < 10 ? 1 : 1 + DigitCount(n / 10);

        var nums = new List<int> { 5, 42, 1000, 7, 88 };
        // Lambda: concise inline projection
        var report = nums.Select(n => n + " has " + DigitCount(n) + " digits");
        foreach (var line in report) Console.WriteLine(line);
    }
}

Pemeriksaan Singkat

Bandingkan kedua konstruksi tersebut.

Ringkasan

Fungsi lokal dan lambda memiliki beberapa kesamaan, tetapi berbeda dalam hal-hal penting.

  • Fungsi lokal dapat bersifat rekursif, generik, dan menggunakan out/ref.
  • Jika dipanggil secara langsung, fungsi lokal menghindari alokasi delegasi dan penutupan.
  • Lambda paling ringkas sebagai argumen sebaris untuk metode seperti LINQ.
  • Pilih berdasarkan tujuan: fungsi pembantu bernama yang dapat digunakan kembali atau perilaku singkat sebaris.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Lokal vs Lambda” gratis?

Ya — teks lengkap “Fungsi Lokal vs Lambda” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Lokal vs Lambda”?

Pilih antara fungsi lokal dan lambda. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Fungsi Lokal vs Lambda” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeklarasikan Fungsi Lokal
  2. Closure dan Variabel yang Ditangkap
  3. Fungsi Lokal Statis
  4. Fungsi Lokal vs Lambda
← Kembali ke C# Academy