نوع المنتج
في لغات البرمجة ونظرية الأنواع ، يُعدّ ناتج الأنواع نوعًا مُركّبًا ضمن بنية. تُمثّل الأنواع "معاملات" الناتج ، وتُحدّد بنية نوع الناتج بالترتيب الثابت لهذه المعاملات. يحتفظ أي مثال من نوع الناتج بهذا الترتيب الثابت، ولكنه قد يحتوي على جميع الأمثلة الممكنة لأنواع بياناته الأولية . يكون تعبير أي مثال من نوع الناتج عبارة عن صف ، ويُسمى "نوع صف" للتعبير. ناتج الأنواع هو ناتج مباشر لنوعين أو أكثر.
إذا كان هناك نوعان فقط من المكونات، فيمكن تسميته "نوعًا مزدوجًا". على سبيل المثال، إذا كان هناك نوعان من المكوناتوهي مجموعة جميع القيم الممكنة لهذا النوع، نوع المنتج المكتوبيحتوي على عناصر على شكل أزواج، أينوأمثلة علىوعلى التوالي. يُعد نوع الزوج حالة خاصة من نوع الزوج التابع ، حيث يكون النوعقد يعتمد ذلك على الحالة المختارة من.
في العديد من اللغات، تتخذ أنواع المنتجات شكل نوع سجل ، حيث يمكن الوصول إلى مكونات الصف باستخدام التسمية . في اللغات التي تحتوي على أنواع بيانات جبرية ، كما هو الحال في معظم لغات البرمجة الوظيفية ، تكون أنواع البيانات الجبرية ذات المُنشئ الواحد متماثلة مع نوع المنتج.
في تطابق كاري-هوارد ، ترتبط أنواع المنتجات بالاقتران المنطقي ( و ) في المنطق .
يمتد هذا المفهوم مباشرةً إلى حاصل ضرب عدد محدود من الأنواع (anيُشير نوع المنتج (-ary product type) في هذه الحالة إلى التعبيرات التي تتصرف كصفوف من التعبيرات من الأنواع المقابلة. أما النوع الأحادي فهو شكل مُنحط من نوع المنتج ، وهو ناتج ضرب لا أنواع .
في لغات البرمجة التي تعتمد على استدعاء القيم ، يُمكن تفسير نوع المنتج على أنه مجموعة من الأزواج، حيث يكون العنصر الأول قيمة من النوع الأول، والعنصر الثاني قيمة من النوع الثاني. باختصار، هو منتج ديكارتي، ويُقابل منتجًا في فئة الأنواع.
تحتوي معظم لغات البرمجة الوظيفية على مفهوم بدائي لنوع المنتج. على سبيل المثال، المنتجتُكتب بلغة ML ولغة Haskell . في كلتا اللغتين، تُكتب المجموعات (tuples) وتُستخرج مكونات المجموعة عن طريق مطابقة الأنماط . بالإضافة إلى ذلك، توفر العديد من لغات البرمجة الوظيفية أنواع بيانات جبرية أكثر عمومية ، والتي تُوسّع كلاً من أنواع الضرب والجمع . أنواع الضرب هي النوع المقابل لأنواع الجمع.T1 * T2 * ... * Tn(T1, T2, ..., Tn)(v1, v2, ..., vn)
أنواع المنتجات في لغات البرمجة
- تُعرّف لغة C++ الفئة
std::tuple(المُعبَّر عنهاtuple<Ts...>باستخدام قوالب متغيرة الوسائط )، [ 1 ] وفي حالة وجود عنصرين، تُعرّفstd::pair(المُعبَّر عنهاpair<T, U>). [ 2 ]std::tupleويمكن أن تكون فارغة (tuple<>). - يُعرّف إطار عمل C# / .NET الفئة
System.Tuple. توجد نسخ مُخصصة من الفئة لعناصر تتراوح من 1 إلى 8 عناصر. في حالة عنصرين (زوج)، يتم استخدام [ 3 ]Tuple<T1, T2>. لإنشاء مجموعة من تسعة عناصر أو أكثر، يتم تمرير المعامل الأخير للفئة كمجموعة أخرى. [ 4 ]. للتكرار على المجموعات مثل أنواع القواميس، يتم توفير الفئة (المُعبر عنها بـ ). [ 5 ]TRestTuple<T1, T2, T3, T4, T5, T6, T7, TRest>System.Collections.Generic.KeyValuePairKeyValuePair<TKey, TValue> - لا تحتوي لغة Go على نوع tuple، ولكنها تستطيع التعبير عن قيم الإرجاع المتعددة في دالة كنوع من أنواع tuple. [ 6 ]
- تحتوي لغة هاسكل على نوع بيانات
Data.Tuple. [ 7 ] - لا تحتوي لغة جافا على نوع بيانات عام للصفوف، ولكن JavaFX تحتوي على نوع بيانات
javafx.util.Pair(يُعبّر عنه بـPair<K, V>). [ 8 ] عند التكرار على الحاويات الترابطية مثلjava.util.Map، يُعبّر عن الزوج في الخريطة بـMap.Entry<K, V>. [ 9 ] - لا تحتوي لغة Kotlin
kotlin.Pairعلى نوع tuple عام، ولكنها تحتوي على فئات (expressedPair<A, B>) [ 10 ] وkotlin.Triple(expressedTriple<A, B, C>). [ 11 ] - تحتوي لغة بايثون
tupleعلى مجموعة يمكن شرحها على النحو التاليtyping.Tuple(معبر عنها ). [ 12 ]Tuple[T1, T2, ..., TN] - تُعرّف لغة Rust نوع tuple الأولي، والذي يُعبّر عنه بـ ، والزوج هو ببساطة . [ 13 ]
(T1, T2, ..., TN)(T, U) - تُعرّف لغة سكالا
scala.Tupleالفئة [ 14 ] التي تدعم ما بين 2 و22 كائنًا على النحو التاليscala.Tuple2(معبرًا عنها بـTuple2[A, B]) [ 15 ] إلىscala.Tuple22(معبرًا عنها بـTuple22[A, B, ..., V]). [ 16 ] - تُعبّر لغة Swift عن المجموعات على النحو التالي : [ 17 ]
(T1, T2, ..., TN)
انظر أيضاً
مراجع
- نوع المنتج في مختبر n
- نظرية نوع التماثل: الأسس الأحادية للرياضيات ، برنامج الأسس الأحادية، معهد الدراسات المتقدمة . انظر القسم 1.5 .
- ↑ "std::tuple" . cppreference.com . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "std::pair" . cppreference.com . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "فئة الصف" . learn.microsoft.com . مايكروسوفت ليرن . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "فئة Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>" . learn.microsoft.com . Microsoft Learn . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "بنية KeyValuePair<TKey, TValue>" . learn.microsoft.com . مايكروسوفت ليرن . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Effective Go - Functions - Multiple return values" . go.dev . Retrieved 14 October 2025 .
- ↑ "Data.Tuple" . hackage.haskell.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Class Pair<K, V>" . download.java.net . شركة أوراكل . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Interface Map.Entry<K, V>" . docs.oracle.com . شركة أوراكل . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "زوج" . kotlinlang.org . JetBrains sro . تم الاسترجاع في 14 أكتوبر 2025 .
- ↑ "Triple" . kotlinlang.org . JetBrains sro . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "5. هياكل البيانات" . docs.python.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "tuple - Rust" . doc.rust-lang.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Tuple" . www.scala-lang.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Tuple2" . www.scala-lang.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "Tuple22" . www.scala-lang.org . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- ↑ "توثيق الأنواع" . docs.swift.org . شركة آبل . تم الاطلاع عليه بتاريخ 14 أكتوبر 2025 .
- أنواع البيانات
- نظرية الأنواع
- أنواع البيانات المركبة
