نصائح القابلية للتركيب
حافظ على قابلية تركيب LINQ: استخدم شروطًا وتحويلات صغيرة نقية، وركّب delegates، وأضف مساعدات امتداد صغيرة، وأعد مسارات IEnumerable .
نصائح القابلية للتركيب درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
نظرة عامة على LINQ القابل للتركيب
الهدف: اجعل LINQ قابلاً للتوسّع بسهولة.
- اكتب دوالاً شرطية وتحويلات صغيرة ونقية
- ركّب الدوال (من دون آثار جانبية)
- أضف مساعدين صغاراً من نوع extension
- أعد مسارات معالجة من نوع IEnumerable<T>
إعادة استخدام المساعدات النقية
استخرج أساليب نقية صغيرة ومرّرها كمجموعات أساليب. تحافظ إعادة الاستخدام على قِصر مسارات المعالجة وسهولة قراءتها.
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
}
}
تركيب الدوال الشرطية
أنشئ دوالاً شرطية جديدة عبر تركيب دوال أصغر. وهذا يحافظ على قابلية اختبار المنطق وإعادة استخدامه.
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);
}
}
امتدادات سهلة القراءة
أضف extension صغيراً للتعبير عن الغرض (مثل WhereNot). اجعله بسيطاً وخالياً من الآثار الجانبية.
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
}
}
مساعدات لمسارات معالجة قابلة لإعادة الاستخدام
وفّر مساعدات قابلة لإعادة الاستخدام من نوع IEnumerable<T>. ويمكن للمستدعين مواصلة تركيبها (OrderBy وTake وغيرهما).
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
}
}
قائمة التحقق من قابلية التركيب
نصائح:
- فضّل المساعدات النقية، وتجنّب الآثار الجانبية داخل Select/Where.
- ركّب الدوال الشرطية والتحويلات، وسمِّها تسمية جيدة.
- أعد IEnumerable<T> من المساعدات حتى يتمكن المستدعون من تمديد السلسلة.
- أجّل التجسيد، وتجنّب ToList في منتصف السلسلة إلا عند الحاجة.
أفضل ممارسة لقابلية التركيب
مراجعة
مراجعة: استخرج مساعدات صغيرة ونقية، وركّب الدوال الشرطية، وأضف امتدادات صغيرة، وأعد مسارات معالجة حتى يتمكن المستدعون من مواصلة الربط بينها.
الأسئلة الشائعة
هل درس «نصائح القابلية للتركيب» مجاني؟
نعم — نص درس «نصائح القابلية للتركيب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «نصائح القابلية للتركيب»؟
حافظ على قابلية تركيب LINQ: استخدم شروطًا وتحويلات صغيرة نقية، وركّب delegates، وأضف مساعدات امتداد صغيرة، وأعد مسارات IEnumerable . تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «نصائح القابلية للتركيب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- GroupBy وJoin وAggregate والإسقاط (الأنواع المجهولة)
- تحويل النتائج (ToList وToDictionary) وملاحظات الأداء
- نصائح القابلية للتركيب