اذهب إلى المحتوى
  • 0

ما هو factory في لغة dart ?

Mohammed Hhhh

السؤال

Recommended Posts

  • 0

قام مصطفى شرح ال factory  بشكل ممتاز ولكن بالطبع، يمكننا توضيح مفهوم factory في لغة Dart من خلال بعض الأمثلة. لنفترض أن لدينا فئة بسيطة تسمى "Person" وتحتوي على بعض الخصائص مثل "الاسم" و "العمر". يمكن استخدام factory في هذه الفئة لإنشاء كائنات Person بطرق مختلفة.

على سبيل المثال، يمكننا استخدام factory لإنشاء كائن Person باستخدام بيانات JSON. ولتحقيق ذلك، يمكننا تعريف الدالة الاستاتيكية fromJson() في الفئة Person كما يلي:

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  factory Person.fromJson(Map<String, dynamic> json) {
    return Person(
      json['name'] as String,
      json['age'] as int,
    );
  }
}

ومن ثم، يمكننا استخدام هذا ال factory لإنشاء كائن Person من بيانات JSON بسيطة، كما يلي:

final json = {'name': 'Ahmed', 'age': 25};
final person = Person.fromJson(json);

ويمكن استخدام factory في الفئة Person لإنشاء كائنات بمختلف الطرق، حسب الاحتياجات. على سبيل المثال، يمكننا استخدام factory لإنشاء كائن Person باستخدام اسم المستخدم والعمر على حد سواء، كما يلي:

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  factory Person.fromUsernameAndAge(String username, int age) {
    return Person(username, age);
  }
}

ثم، يمكننا استخدام هذا ال factory لإنشاء كائن Person باستخدام اسم المستخدم والعمر، كما يلي:

final person = Person.fromUsernameAndAge('Ahmed', 25);

باستخدام factory، يمكن تخصيص عملية إنشاء كائنات بطرق مختلفة، وتحديد الخوارزمية المستخدمة لذلك، وتحديد إذا ما كان يلزم إنشاء كائن جديد أو استخدام كائن موجود بالفعل. ويمكن استخدام factory في العديد من المجالات، مثل التحويل بين تنسيقات البيانات وإنشاء كائنات معقدة تتطلب خوارزميات معقدة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

في لغة Dart، كلمة factory هي كلمة مفتاحية تُستخدم لتعريف الـ factories.

وFactory method هو نمط تصميم يُستخدم لإنشاء كائنات داخل الفئة نفسها، ولكن بطريقة تختلف عن استخدام الـ constructors التقليدية.
تمامًا مثل الـ constructors، تستخدم الـ factories لإنشاء كائنات، ولكن هناك اختلافات في طريقة إنشاء الكائنات.

فعند استخدام الـ constructor التقليدي، تستخدم الكلمة المفتاحية new لإنشاء الكائن، ولكن في حالة استخدام الـ factory method، يتم استخدام اسم الفئة مباشرة.

والكود في الصورة ببساطة يتعامل مع تحويل كائن من نوع Person إلى شكل JSON والعكس.

فأولاً ، يتم تعريف فئة تسمى Users وتحتوي على خصائص id و name و email و gender و status.

حيث يتم تعريف هذه الخصائص باستخدام المعاملات المسماة (named parameters) في القائمة الفاصلة بين الأقواس السواقط {}.

والعبارة this.id تعني أنه عند إنشاء كائن من نوع Users ، من الممكن تمرير قيمة للخاصية id وسيتم تعيينها للخاصية المقابلة في الكائن، ونفس الشيء ينطبق على الخصائص الأخرى.

ثم يأتي الجزء المهم من الكود وهو الـ factory، حيث يعمل الـ factory على توفير طريقة لإنشاء كائنات من الفئة Person باستخدام البيانات المستلمة من JSON.

الكود التالي:

factory Person.fromlson(Map<String, dynamic> json) => _$PersonFromJson(json); 

يعمل على تعريف طريقة تسمى fromlson التي تستقبل معامل من نوع Map<String, dynamic> وتقوم بإرجاع كائن من الفئة Person باستخدام الدالة _$PersonFromJson المولدة تلقائياً (يفترض أنها تم إنشاؤها بواسطة مولد كود مثل json_serializable).

بمعنى آخر ، تستطيع استخدام الـ factory لإنشاء كائن Person من مصدر JSON، ويتوقف الأمر على المكتبة المستخدمة لتنفيذ المنطقة المرتبطة بالـ factory ، حيث يولد الكود اللازم لتحويل JSON إلى كائن من الفئة Person بناءً على التعليمات المعطاة.

ثم يأتي الجزء الثاني من الكود:

Map<String, dynamic> toJson() => _$PersonToJson(this);.

وتلك الوظيفة تقوم بتحويل كائن من الفئة Users إلى تنسيق JSON.

وتقوم الدالة toJson() بإرجاع كائن من نوع Map<String, dynamic> يحتوي على الخصائص الموجودة في كائن Users.

وتستخدم الدالة _$PersonToJson المولدة تلقائيًا (والتي يفترض أنها تم إنشاؤها بواسطة مولد كود مثل json_serializable) لتوليد الترميز JSON بناءً على الكائن Users الحالي.

وعند استدعاء الدالة toJson() على كائن Users، ستشفر الخصائص الموجودة في الكائن إلى JSON، وتستطيع استخدام هذا الناتج لتبادل البيانات مع الخوادم أو التخزين في ملفات JSON.

أي بإختصار، يساعد الـ factory والدالة toJson() في تسهيل عملية تحويل الكائنات إلى تنسيق JSON والعكس، مما يتيح إمكانية تبادل البيانات بسهولة بين تطبيقات Dart وخوادم الويب أو قواعد البيانات التي تستخدم JSON كتنسيق للبيانات.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...