التفكيك
فكّكوا tuples إلى متغيرات منفصلة
التفكيك درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
ما هو Deconstruction؟
يقسم Deconstruction tuple أو كائنًا إلى متغيرات منفصلة ضمن تعليمة واحدة، بحيث يمكنك تسمية كل جزء مباشرة.
using System;
class Program
{
static void Main()
{
var point = (3, 4);
(int x, int y) = point;
Console.WriteLine("x=" + x + ", y=" + y);
}
}تفكيك Tuple
ضع المتغيرات المستهدفة بين قوسين على يسار =. ويتلقى كل متغير عنصر tuple المطابق.
using System;
class Program
{
static void Main()
{
var user = ("Ada", 36);
(string name, int age) = user;
Console.WriteLine(name + " is " + age);
}
}استخدام var في Deconstruction
يمكنك ترك المترجم يستنتج الأنواع باستخدام var، سواء لكل متغير على حدة أو للمجموعة بأكملها.
using System;
class Program
{
static void Main()
{
var data = (1, "one", true);
var (id, word, flag) = data;
Console.WriteLine(id + " " + word + " " + flag);
}
}تفكيك ناتج دالة
يمكنك تفكيك tuple التي تُرجعها الدالة مباشرة إلى متغيرات مسماة.
using System;
class Program
{
static (int, int) MinMax(int a, int b) => a < b ? (a, b) : (b, a);
static void Main()
{
var (lo, hi) = MinMax(8, 3);
Console.WriteLine("min=" + lo + ", max=" + hi);
}
}تجاهل القيم
استخدم الشرطة السفلية _ لتجاهل الأجزاء التي لا تحتاج إليها أثناء Deconstruction.
using System;
class Program
{
static (int, int, int) Rgb() => (255, 128, 0);
static void Main()
{
var (r, _, _) = Rgb();
Console.WriteLine("Red channel: " + r);
}
}التفكيك إلى متغيرات موجودة
يمكنك الإسناد إلى متغيرات مصرح عنها مسبقًا بحذف أسماء الأنواع.
using System;
class Program
{
static void Main()
{
int a = 0, b = 0;
(a, b) = (10, 20);
Console.WriteLine(a + ", " + b);
}
}التبديل باستخدام Tuples
إليك حيلة مفيدة: بدّل متغيرين في سطر واحد باستخدام تفكيك tuple، من دون الحاجة إلى متغير مؤقت.
using System;
class Program
{
static void Main()
{
int x = 1, y = 2;
(x, y) = (y, x);
Console.WriteLine("x=" + x + ", y=" + y);
}
}دالة Deconstruct
يمكن لأصنافك الخاصة دعم Deconstruction من خلال تعريف دالة Deconstruct بمعلمات out.
using System;
class Point
{
public int X, Y;
public Point(int x, int y) { X = x; Y = y; }
public void Deconstruct(out int x, out int y)
{
x = X;
y = Y;
}
}
class Program
{
static void Main()
{
var p = new Point(5, 9);
var (px, py) = p;
Console.WriteLine(px + ", " + py);
}
}تعدد الأحمال الزائدة لـ Deconstruct
يمكن للصنف توفير عدة أحمال زائدة من Deconstruct لعرض أعداد مختلفة من القيم.
using System;
class Person
{
public string Name; public int Age; public string City;
public Person(string n, int a, string c) { Name = n; Age = a; City = c; }
public void Deconstruct(out string name, out int age)
{
name = Name; age = Age;
}
}
class Program
{
static void Main()
{
var p = new Person("Ada", 36, "London");
var (name, age) = p;
Console.WriteLine(name + ", " + age);
}
}Deconstruction في foreach
عند التكرار على مجموعة من tuples، يمكنك تفكيك كل عنصر مباشرة في ترويسة foreach.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pairs = new List<(string, int)>
{
("Ann", 30),
("Bob", 25)
};
foreach (var (name, age) in pairs)
Console.WriteLine(name + " is " + age);
}
}تجميع المفاهيم
تجعل Deconstruction الشيفرة التي تُرجع أو تخزن عدة قيم سهلة القراءة، إذ تسمي كل جزء عند استخدامه.
using System;
class Program
{
static (int Quotient, int Remainder) Divide(int a, int b) => (a / b, a % b);
static void Main()
{
var (q, r) = Divide(17, 5);
Console.WriteLine("17 / 5 = " + q + " remainder " + r);
}
}اختبار سريع
اختبر مدى فهمك لـ Deconstruction.
مراجعة
يقسم Deconstruction tuple أو كائنًا إلى متغيرات مسماة ضمن تعليمة واحدة. استخدم var (a, b) = ...، وتجاهل الأجزاء باستخدام _، وبدّل المتغيرات، ونفّذ التفكيك داخل foreach. ويمكن للأصناف المخصصة تفعيل ذلك باستخدام دالة Deconstruct ذات معلمات out، مع إمكانية تعريف أحمال زائدة لها.
using System;
class Program
{
static void Main()
{
var (a, b, c) = (1, 2, 3);
Console.WriteLine(a + b + c);
}
}الأسئلة الشائعة
هل درس «التفكيك» مجاني؟
نعم — نص درس «التفكيك» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «التفكيك»؟
فكّكوا tuples إلى متغيرات منفصلة تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التفكيك»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.