مقدمة

أسلوب الـ Generics يجعلك قادراً على بناء كود واحد يلائم أكثر من نوع بيانات, و عند الحاجة إلى استخدام هذا الكود يمكنك إستخدامه كما هو, و يمكنك أيضاً تحديد نوع البيانات التي تريده أن يعمل معها حسب حاجتك.

فائدة الـ Generics

أنت لست مجبر على استخدام أسلوب الـ Generics, لكن تعلمه سيفيدك كثيراً في تطوير الكود الخاص فيك, و جعل حجمه أصغر و أسهل في حالة التعديل.
فمثلاً, إن كنت بحاجة إلى بناء مصفوفة ليس لها حجم محدد و تريد تخزين أعداد صحيحة ( أي من النوع int ) فقط فيها, يمكنك إنشاء Array و تحديد النوع Integer كنوع البيانات الوحيد الذي يمكن إدخاله في هذا الكائن و تكون بهذا قد وصلت لهدفك بكل سهولة بواسطة أسلوب الـ Generics.

ميزة أخرى مهمة جدًا في هذا الأسلوب, و هي أنه يساعد المبرمج في إكتشاف الأخطاء النوعية أثناء كتابة الكود.

مثلاً, إذا قمت بإنشاء  Array و حددت أنه يمكنه تخزين قيم من النوع Integer فقط, بعدها حاولت تخزين قيمة من نوع آخر مثل النوع String على سبيل المثال, عندها سيظهر لك تحذير مفاده أنه لا يمكن تحويل النوع String إلى النوع Integer.

بشكل عام, نستخدم الـ Generics لبناء كود يتوافق مع أي نوع بيانات. عند الحاجة إلى هذا الكود نقوم بتحديد نوع البيانات التي سنتعامل معها.

ملاحظة: جميع الأحرف المذكورة في الجدول ليس لها أي تأثير على الكود و يمكنك وضع أي حرف أو كلمة مكانهم, لكننا ننصحك باعتمادهم , لأنها فقط أحرف متعارف عليها بين المبرمجين.

مثال :


} (func exchange<T>(a: inout T, b: inout T
let temp = a
a = b
b = temp
{
var numb1 = 100
var numb2 = 200

(“(print(“Before Swapping Int values are: \(numb1) and \(numb2
(exchange(a: &numb1, b: &numb2
(“(print(“After Swapping Int values are: \(numb1) and \(numb2

“var str1 = “Generics
“var str2 = “Functions

(“(print(“Before Swapping String values are: \(str1) and \(str2
(exchange(a: &str1, b: &str2
(“(print(“After Swapping String values are: \(str1) and \(str2

output

Before Swapping Int values are: 100 and 200
After Swapping Int values are: 200 and 100
Before Swapping String values are: Generics and Functions
After Swapping String values are: Functions and Generics