إنشاء التعبيرات يدويًا
أنشئوا أشجار التعبيرات باستخدام Expression API
إنشاء التعبيرات يدويًا درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
إنشاء الأشجار يدويًا
إلى جانب إتاحة إنشاء الشجرة من lambda بواسطة المصرّف، يمكنكم إنشاء شجرة بأنفسكم باستخدام أساليب المصنع الساكنة في Expression.
using System;
using System.Linq.Expressions;
var five = Expression.Constant(5);
Console.WriteLine(five); // 5
Console.WriteLine(five.Type); // System.Int32Expression.Parameter
ينشئ Expression.Parameter(type, name) عقدة معلمة يمكنكم الإشارة إليها في الجسم وربطها في lambda.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
Console.WriteLine(x.Name + " : " + x.Type); // x : System.Int32Expression.Constant
يضمّن Expression.Constant(value) قيمة حرفية. ويمكنكم اختياريًا تحديد نوعها.
using System;
using System.Linq.Expressions;
var c = Expression.Constant(42);
var typed = Expression.Constant(3.14, typeof(double));
Console.WriteLine(c + " " + typed); // 42 3.14Expression.Add
تحتوي العوامل الثنائية على أساليب مصنع مثل Expression.Add. وتأخذ هذه الأساليب تعبيري معاملين وتنشئ BinaryExpression.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var sum = Expression.Add(x, Expression.Constant(1));
Console.WriteLine(sum); // (x + 1)عوامل ثنائية أخرى
تتوفر أساليب مصنع للمجموعة الكاملة، مثل Subtract وMultiply وDivide وGreaterThan وEqual وغيرها.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var gt = Expression.GreaterThan(x, Expression.Constant(10));
var mul = Expression.Multiply(x, Expression.Constant(2));
Console.WriteLine(gt + " | " + mul); // (x > 10) | (x * 2)تغليف التعبير في Lambda
يربط Expression.Lambda الجسم والمعلمات في Expression<TDelegate> يمكنكم تجميعه لاحقًا.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Add(x, Expression.Constant(1));
var lambda = Expression.Lambda<Func<int, int>>(body, x);
Console.WriteLine(lambda); // x => (x + 1)تركيب التعبيرات المتداخلة
يمكن تداخل أساليب المصنع بحرية، ولذلك يمكنكم إنشاء تعبيرات معقدة مثل (x + 1) * 2 خطوةً خطوة.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var addOne = Expression.Add(x, Expression.Constant(1));
var timesTwo = Expression.Multiply(addOne, Expression.Constant(2));
Console.WriteLine(timesTwo); // ((x + 1) * 2)الوصول إلى الأعضاء
ينشئ Expression.Property وExpression.Field عقد الوصول إلى الأعضاء.
using System;
using System.Linq.Expressions;
var s = Expression.Parameter(typeof(string), "s");
var lengthAccess = Expression.Property(s, "Length");
Console.WriteLine(lengthAccess); // s.Lengthاستدعاءات الأساليب
ينشئ Expression.Call عقدة استدعاء عند تزويده بالهدف والأسلوب والمعاملات.
using System;
using System.Linq.Expressions;
var s = Expression.Parameter(typeof(string), "s");
var toUpper = typeof(string).GetMethod("ToUpper", Type.EmptyTypes);
var call = Expression.Call(s, toUpper);
Console.WriteLine(call); // s.ToUpper()التحقق من الأنواع أثناء الإنشاء
تتحقق أساليب المصنع من أنواع المعاملات أثناء الإنشاء. وتؤدي الأنواع غير المتطابقة إلى استثناء فورًا، مما يساعد على اكتشاف الأخطاء مبكرًا.
using System;
using System.Linq.Expressions;
try {
var bad = Expression.Add(
Expression.Constant(1),
Expression.Constant("text")); // int + string
} catch (InvalidOperationException) {
Console.WriteLine("type mismatch rejected");
}تجميع المفاهيم
أنشئوا lambda x => (x + 1) * 2 بالكامل وبطريقة يدوية.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Multiply(
Expression.Add(x, Expression.Constant(1)),
Expression.Constant(2));
var lambda = Expression.Lambda<Func<int, int>>(body, x);
Console.WriteLine(lambda); // x => ((x + 1) * 2)اختبار سريع
تأكدوا من كيفية إنشاء التعبيرات يدويًا.
مراجعة
تعلّمتم إنشاء أشجار التعبيرات يدويًا.
- ينشئ
Expression.ParameterوExpression.Constantالعقد الطرفية. - ينشئ
Expression.Addوما شابهه العمليات الثنائية. - يتعامل
Expression.PropertyوExpression.Callمع الأعضاء والأساليب. - يجمع
Expression.Lambdaشجرة قابلة للاستدعاء.
الأسئلة الشائعة
هل درس «إنشاء التعبيرات يدويًا» مجاني؟
نعم — نص درس «إنشاء التعبيرات يدويًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «إنشاء التعبيرات يدويًا»؟
أنشئوا أشجار التعبيرات باستخدام Expression API تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «إنشاء التعبيرات يدويًا»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما أشجار التعبيرات؟
- إنشاء التعبيرات يدويًا
- ترجمة التعبيرات وتنفيذها
- أشجار التعبيرات في موفّري LINQ