Kiat komposabilitas
Jaga agar LINQ tetap dapat dikomposisikan: gunakan predikat/transformasi murni yang kecil, komposisikan delegate, tambahkan helper ekstensi kecil, dan kembalikan alur IEnumerable .
Kiat komposabilitas adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. 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 3 pelajaran total.
Ikhtisar LINQ yang dapat dirangkai
Tujuan: Memudahkan pengembangan LINQ.
- Tulis predikat/transformasi kecil dan murni
- Rangkai fungsi (tanpa efek samping)
- Tambahkan pembantu ekstensi yang sederhana
- Kembalikan alur IEnumerable<T>
Penggunaan ulang pembantu murni
Ekstrak metode murni yang sederhana dan teruskan sebagai grup metode. Penggunaan ulang membuat alur tetap singkat dan mudah dibaca.
using System;
using System.Linq;
public class Program
{
static bool IsEven(int n) { return n % 2 == 0; } // pure predicate
static int Square(int n) { return n * n; } // pure transform
public static void Main(string[] args)
{
int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };
var q = xs
.Where(IsEven) // reuse predicate
.Select(Square); // reuse transform
foreach (int v in q) Console.WriteLine(v); // 4 16 36
}
}
Merangkai predikat
Buat predikat baru dengan merangkai predikat-predikat yang lebih kecil. Dengan begitu, logika tetap mudah diuji dan digunakan ulang.
using System;
using System.Linq;
public class Program
{
// Return a predicate n > threshold
static Func<int, bool> GreaterThan(int threshold)
{
return delegate(int n) { return n > threshold; };
}
// Combine two predicates with AND
static Func<int, bool> And(Func<int, bool> a, Func<int, bool> b)
{
return delegate(int n) { return a(n) && b(n); };
}
static bool IsEven(int n) { return n % 2 == 0; }
public static void Main(string[] args)
{
int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };
Func<int, bool> gt2 = GreaterThan(2);
Func<int, bool> evenAndGt2 = And(IsEven, gt2);
var q = xs.Where(evenAndGt2); // even and > 2 => 4,6
foreach (int v in q) Console.WriteLine(v);
}
}
Ekstensi yang mudah dibaca
Tambahkan ekstensi kecil untuk menyatakan maksud (misalnya, WhereNot). Buatlah sederhana dan tanpa efek samping.
using System;
using System.Collections.Generic;
using System.Linq;
public static class LinqEx
{
public static IEnumerable<T> WhereNot<T>(this IEnumerable<T> src, Func<T, bool> predicate)
{
foreach (T item in src)
{
if (!predicate(item)) yield return item;
}
}
}
public class Program
{
static bool IsVowel(char c)
{
char x = Char.ToLower(c);
return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u';
}
public static void Main(string[] args)
{
char[] letters = new char[] { 'a', 'b', 'c', 'e', 'i' };
var consonants = letters.WhereNot(IsVowel);
foreach (char c in consonants) Console.WriteLine(c); // b, c
}
}
Pembantu alur yang dapat digunakan ulang
Sediakan pembantu IEnumerable<T> yang dapat digunakan ulang. Pemanggil dapat terus merangkainya (OrderBy, Take, dan lainnya).
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static bool IsEven(int n) { return n % 2 == 0; }
static int Square(int n) { return n * n; }
// Reusable pipeline helper: filter evens and square
public static IEnumerable<int> SquaresOfEvens(IEnumerable<int> xs)
{
foreach (int x in xs)
{
if (IsEven(x)) yield return Square(x);
}
}
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
var pipeline = SquaresOfEvens(data); // composable
var topTwo = pipeline.OrderByDescending(x => x).Take(2);
foreach (int v in topTwo) Console.WriteLine(v); // 36, 16
}
}
Daftar periksa perangkaian
Kiat:
- Utamakan pembantu yang murni; hindari efek samping di dalam Select/Where.
- Rangkai predikat dan transformasi; beri nama yang baik.
- Kembalikan IEnumerable<T> dari pembantu agar pemanggil dapat memperluas rangkaian.
- Lakukan materialisasi belakangan; hindari ToList di tengah rangkaian kecuali diperlukan.
Praktik terbaik untuk perangkaian
Ringkasan
Ringkasan: Ekstrak pembantu murni yang kecil, rangkai predikat, tambahkan ekstensi sederhana, dan kembalikan alur agar pemanggil dapat terus merangkainya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kiat komposabilitas” gratis?
Ya — teks lengkap “Kiat komposabilitas” 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 3 pelajaran total.
Apa yang akan aku pelajari di “Kiat komposabilitas”?
Jaga agar LINQ tetap dapat dikomposisikan: gunakan predikat/transformasi murni yang kecil, komposisikan delegate, tambahkan helper ekstensi kecil, dan kembalikan alur IEnumerable . 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 3 dari 3.
Berapa lama pelajaran “Kiat komposabilitas” 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
- GroupBy, Join, Aggregate, proyeksi (tipe anonim)
- Materialisasi (ToList, ToDictionary) & catatan kinerja
- Kiat komposabilitas