نتائج البحث

اذهب إلى التنقل اذهب إلى البحث

استبدال الأصناف الفرعية بالحقول (Replace Subclass with Fields)

المشكلة لديك أصناف فرعية تختلف فقط في توابع (إعادة الثوابت) الخاصة بها. الحل استبدال التوابع بالحقول في الصنف الأب وحذف الأصناف الفرعية. مثال قبل إعادة التصميم لدينا الصنف Person الذي يحتوي على الصنفيين الفرعيين Male و Female؛ يختلف هذان الصنفان في القيمة المعادة فقط. يحتوي الصنف Person يحتوي على الصنفيين الفرعيين Male و Female. بعد إعادة التصميم وضع حقول في الصنف Person الأب مكان مقابلة لحقول الصنف الفرعي Male و Female ثم حذف هذان الصنفان. حذف الصنفان الفرعيان Male و ...

تبديل المرجع إلى قيمة (Change Reference to Value)

المشكلة وجود كائن مرجع صغير جدًا نادرًا ما يتغيَّر لتبرير إدارة دورة حياته. الحل تحويله إلى كائن قيمة (value object). مثال قبل إعادة التصميم مخطط يوضح كيفية ارتباط الصنفين Currency و Customer: مخطط يوضح كيفية ارتباط الصنفين Currency و Customer. بعد إعادة التصميم إعادة تصميم المخطط السابق للتتحول العلاقة الرابطة للصنفين Currency و Customer إلى علاقة has a (أي بمجرد وجود كائن Customer فلا بد من وجود كائن Currency له). مخطط يوضح كيفية ارتباط الصنفين Currency و Customer بعلاقة has ...

تبديل الأعداد السحرية بثوابت رمزية (Replace Magic Number with Symbolic Constant)

المشكلة تستخدم الشيفرة البرمجية عددًا له معنىً معين له. الحل استبدال هذا العدد بثابت له اسم يمكن قراءته ويشرح معنى العدد. مثال قبل إعادة التصميم تستخدم الشيفرة التالية العدد 9.81 بالشكل المجرَّد الذي يمثِّل ثابت الجاذبية الأرضية: في لغة Java: double potentialEnergy(double mass, double height) { return mass * height * 9.81; } في لغة C#‎: double PotentialEnergy(double mass, double height) { return mass * height * 9.81; } في لغة PHP: function potentialEnergy($mass, $height) { return $mass * $height * ...

تغليف الحقول (Encapsulate Field)

المشكلة لديك حقل عام. الحل جعل الحقل خاصًّا وإنشاء توابع وصول له. مثال قبل إعادة التصميم وجود الحقل العام name في الصنف Person: في لغة Java: class Person { public String name; } في لغة C#‎: class Person { public string name; } في لغة PHP: public $name; في لغة TypeScript: class Person { name: string; } بعد إعادة التصميم جعل الحقل name خاصًّا وإنشاء تابع جلب getName وضبط setName له: في لغة Java: class Person { private String name; public ...

تغيير الاقتران أحادي الاتجاه إلى ثنائي الاتجاه (Change Unidirectional Association to Bidirectional)

المشكلة وجود صنفان يحتاج كل منهما إلى استخدام ميزات الآخر، ولكن الاقتران بينهما أحادي الاتجاه فقط. الحل إضافة الاقتران المفقود إلى الصنف الذي يحتاج إليه. مثال قبل إعادة التصميم يحتاج الصنفان Customer و Order أحدهما الآخر ولكن الاقتران بينهما أحادي الاتجاه: الاقتران بين الصنفين أحادي الاتجاه فقط. بعد إعادة التصميم إضافة الاقتران الناقص إلى الصنف Customer: الاقتران المفقود مُضاف إلى الصنف الذي يحتاج إليه. لم إعادة التصميم؟ في الأصل، كان اقتران الأصناف أحادي الاتجاه. ولكن مع الوقت، احتاجت شيفرة العميل ...

تغيير الاقتران ثنائي الاتجاه إلى أحادي الاتجاه (Change Bidirectional Association to Unidirectional)

المشكلة وجود اقتران ثنائي الاتجاه (bidirectional association) بين الأصناف، ولكن لا يستخدم أحد الأصناف الميزات الأخرى. الحل إزالة الاقتران غير المستخدم. مثال قبل إعادة التصميم وجود اقتران ثنائي الاتجاه بين الصنفين Order و Customer، ولكن لا يستخدم أحدهما ميزات الآخر: وجود اقتران ثنائي الاتجاه بين الصنفين Order و Customer. بعد إعادة التصميم يحتاج الصنفان Customer و Order أحدهما الآخر ولكن الاقتران بينهما أحادي الاتجاه: وجود اقتران ثنائي الاتجاه بين الصنفين Order و Customer. لم إعادة التصميم؟ يكون من الصعب المحافظة على الاقتران ثنائي الاتجاه ...

تبديل رموز الأنواع بالحالة/الاستراتيجية (Replace Type Code with State/Strategy)

ما هو رمز النوع؟ يحدث رمز النوع عندما يوجد مجموعة من الأرقام أو السلاسل النصية التي تشكل قائمة بالقيم المسموح بها لبعض العناصر بدلًا من استخدام نوع بيانات منفصل. وغالبًا ما تُعطَى هذه الأرقام والسلاسل المحددة أسماءً مفهومة عن طريق الثوابت، وهو السبب في استخدام هذه الرموز بشكل كبير. المشكلة يؤثر نوع مُرمَّز على سلوك البرنامج ولكن لا يمكن استخدام الأصناف الفرعية للتخلص منه. الحل استبدال رمز النوع بكائن حالة. إذا كان من الضروري استبدال قيمة حقل برمز النوع، فسيكون ...

تبديل رموز الأنواع بالأصناف (Replace Type Code with Class)

ما هو رمز النوع (type code)؟ يحدث رمز النوع عندما يوجد مجموعة من الأرقام أو السلاسل النصية التي تشكل قائمة بالقيم المسموح بها لبعض العناصر بدلًا من استخدام نوع بيانات منفصل. غالبا ما تُعطى هذه الأرقام والسلاسل المحددة أسماءً مفهومة عن طريق الثوابت، وهو السبب في استخدام هذه الرموز بشكل كبير. المشكلة يحتوي الصنف على حقل يحتوي على رموز الأنواع. ولا تُستخدم قيم هذا النوع في شروط المُشغِّل ولا تؤثر على سلوك البرنامج. الحل إنشاء صنف جديد واستخدام كائناته بدلًا ...

التغليف الداخلي للحقول (Self Encapsulate Fields)

ملاحظة قبل البدء: تختلف هذه التقنية عن تقنية تغليف الحقول (Encapsulate Field) من حيث أنّها تُستخدَم لتغليف الحقول الخاصّة (أي المُحدَّدة بالكلمة المفتاحيّة private). المشكلة الوصول المباشر إلى الحقول الخاصّة (private fields) داخل الصنف (class). الحل إنشاء تابعي الوصول getter و setter للحقل الخاصّ ومنع الوصول إليه إلا عبرهما. مثال قبل إعادة التصميم يحتوي الصنف Range على الحقلين low و high من النوع الخاص (private) ونلاحظ الوصول إليهما مباشرةً داخل التابع includes في الشيفرة الآتية: في لغة Java: class Range ...

تبديل القيمة إلى مرجع (Change Value to Reference)

المشكلة وجود العديد من النُسَخ المتماثلة من صنفٍ واحدٍ تحتاج إلى استبدال كائنٍ واحدٍ بها. الحل تحويل الكائنات المتماثلة إلى كائن مرجعي واحد. مثال قبل إعادة التصميم مخطط يوضح وجود العديد من النُسَخ المتماثلة من الصنف Order: مخطط يوضح وجود العديد من النُسَخ المتماثلة من صنفٍ Order. بعد إعادة التصميم تحويل الكائنات المتماثلة إلى كائن مرجعي واحد: تحويل الكائنات المتماثلة إلى كائن مرجعي واحد. لم إعادة التصميم؟ في العديد من الأنظمة، يمكن تصنيف الكائنات على أنها إمَّا قيم أو مراجع. ...

تبديل المصفوفات بكائنات (Replace Array with Object)

تقنية إعادة التصميم هذه هي حالة خاصة من تبديل قيم البيانات إلى كائنات. المشكلة لديك مصفوفة تحتوي على أنواع مختلفة من البيانات. الحل استبدال المصفوفة بكائن يكون له حقول منفصلة لكل عنصر. مثال قبل إعادة التصميم احتواء المصفوفة row على نوعين مختلفين من البيانات (سلسلة نصية وعدد): في لغة Java: String[] row = new String[2]; row[0] = "Liverpool"; row[1] = "15"; في لغة C#‎: string[] row = new string[2]; row[0] = "Liverpool"; row[1] = "15"; في لغة PHP: $row = array(); $row[0] = "Liverpool"; $row[1] = 15; في لغة ...

ازالة توابع الإعدادات (Remove Setting Method)

المشكلة يكون تعيين قيمة الحقل فقط عند إنشائه، ولا تتغير في أي وقت لاحق. الحل إزالة التوابع التي تضبط قيمة الحقل. مثال قبل إعادة التصميم يضبط التابع ()setImmutableValue قيمةً غير قابلة للتغيير أو التعديل في المستقبل: يغيّر التابع من قيمة الحقل. بعد إعادة التصميم حذف التابع ()setImmutableValue من الصنف Customer: إزالة التابع الذي يضبط قيمة الحقل. لم إعادة التصميم؟ إذا كنت تريد منع أي تغييرات في قيمة الحقل. آلية الحل يجب أن تكون قيمة الحقل قابلة للتغيير فقط في الباني. ...

العوارض في منصة iOS في كوردوفا

يوضح هذا الدليل كيفية تضمين مُكوّن (component) عارض كوردوفا في تطبيقات منصة iOS الكبيرة. للمزيد من التفاصيل حول كيفية جعل تلك المكوّنات تتواصل مع بعضها، راجع دليل تطوير الإضافات. بدأ دعم العوارض في منصة iOS منذ الإصدار 1.4 كوردوفا، باستخدام مكوِّن Cleaver الذي بُنِي على قالب Xcode. منصة كوردوفا 2.0 والإصدارات الأحدث لا تدعم إلا التقديم المستند إلى المشروع الفرعي (subproject-based) للمكُوِّن Cleaver. تتطلب هذه الإرشادات على الأقل الإصدار الرابع من كوردوفا، والثامن من Xcode، بالإضافة إلى الملف config.xml من ...

اختلال الشيفرات ومشاكلها (Code Smells)

قد تعاني الشيفرات الكثير من الاختلالات والمشاكل الشكلية؛ فبمجرد اكتشاف تلك الاختلالات الظاهرية، يسهل علينا معرفة العلاج (التقنيات) وتطبيقه (إعادة التصميم) للحصول على شيفرة سليمة نظيفة. من هذه الاختلالات: المبالغة والإطالة قد يزداد حجم الشيفرات والتوابع (methods) والأصناف (classes) ازديادًا كبيرًا ليصل لمرحلةٍ يصعُب التعامل معها، ولا يحدث هذا بشكلٍ فجائيِّ دفعةً واحدةً، بل يكون ناتجًا عن تراكم الإضافات أثناء تطوير البرنامج (وخاصةً عندما لا يبذل أحدٌ جهدًا للحدِّ من ذلك التشعب)، ويبدو هذا التضخم واضحًا التوابع الطويلة (long methods): ...

التسلط على الكائنات الأخرى (Feature Envy)

توصيف المشكلة استخدام بعضُ التوابع (methods) بياناتِ الكائنات (objects) الأخرى أكثر ممّا تستخدم بياناتِها ذاتَها. أسبابها تحدث هذه المشكلة عقب نقل الحقول (fields) إلى أصناف البيانات (data class)، إذ من الأفضل نقلُ التوابع المستخدِمة لتلك الحقول لذلك الصنف أيضًا. وما الحل؟ لنضع بالحسبان القاعدة الآتية: يجب أن تبقى الأجزاء التي تتغيَّر بآنٍ واحدٍ في المكان ذاته معًاولتحقيق ذلك: نقلُ التوابع (move methods) إلى المكان الأنسب في الشيفرة. عندما يستخدِم جزءٌ فقط من التابع بياناتِ كائنٍ (object) آخر، فالأفضل استخراجُ تابعٍ ...

إخفاء التابع (Hide Method)

المشكلة لا يُستخدم التابع من قِبل الأصناف الأخرى أو يستخدم فقط داخل التسلسل الهرمي للصنف الخاص به. الحل جعل التابع خاصًا أو محميًا. مثال قبل إعادة التصميم لا يستخدم التابع ()aMethod من قبل أصناف أخرى غير الصنف Employee المعرف فيه: لا يُستخدم التابع من قِبل الأصناف الأخرى أو يستخدم فقط داخل التسلسل الهرمي للصنف الخاص به. بعد إعادة التصميم جعل التابع ()aMethod خاصًّا ومحميًّا بإخفائه عن الأصناف الأخرى: جعل التابع خاصًا أو محميًا. لم إعادة التصميم؟ في كثير من الأحيان، ...

تعريف كائن المُعامل (Introduce Parameter Object)

المشكلة تحتوي التوابع على نفس المجموعة المتكررة من المعاملات. الحل استبدال هذه المعاملات بكائنٍ واحد. مثال قبل إعادة التصميم تمرير نفس مجموعة المعاملات إلى توابع الصنف Customer: تحتوي التوابع على نفس المجموعة المتكررة من المعاملات. بعد إعادة التصميم تبديل كائن واحد بتلك المعاملات وتمريره إلى توابع الصنف Customer التي تشترك بنفس مجموعة المعاملات: استبدال هذه المعاملات بكائنٍ واحد. لم إعادة التصميم؟ غالبًا ما تُصادَف مجموعات متطابقة من المعاملات داخل العديد من التوابع. الأمر الذي يؤدي إلى تكرار الشيفرة البرمجية للمعاملات ...

نقل الميزات ما بين الكائنات (Moving Features between Objects)

تساعد عملية إعادة التصميم (refactoring) في توزيع المهام بشكل مثاليّ على الأصناف (classes) المختلفة في الشيفرة، وتضمن تقنيات الحل هذه طريقةً آمنةً لنقل المهام (functionality) ما بين الأصناف، وإنشاء أصناف جديدة وحماية تفاصيل عملية التنفيذ (implementation) من الوصول العام (public access)، وهذه التقنيات تشمل: نقل التابع (Move Method) المشكلة: استخدام التابع (method) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل: إنشاء تابعٍ جديدٍ في الصنف الأكثر استخدامًا لذلك التابع ونقل شيفرته إلى التابع الجديد، ثم تحويل الشيفرة ...

نقل الميزات ما بين الكائنات (Moving Features between Objects)

تساعد عملية إعادة التصميم (refactoring) في توزيع المهام بشكل مثاليّ على الأصناف (classes) المختلفة في الشيفرة، وتضمن تقنيات الحل هذه طريقةً آمنةً لنقل المهام (functionality) ما بين الأصناف، وإنشاء أصناف جديدة وحماية تفاصيل عملية التنفيذ (implementation) من الوصول العام (public access)، وهذه التقنيات تشمل: نقل التابع (Move Method) المشكلة: استخدام التابع (method) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل: إنشاء تابعٍ جديدٍ في الصنف الأكثر استخدامًا لذلك التابع ونقل شيفرته إلى التابع الجديد، ثم تحويل الشيفرة ...

الأجزاء الفائضة (Dispensables)

وهي الأجزاء عديمة النفع في الشيفرة، وسيجعلُ التخلُّصُ منها الشيفرةَ نظيفةً يسيرة الفهم وأكثر فعاليّة، منها: التعليقات (comments) المشكلة: وجود الكثير من التعليقات في التوابع (methods) بهدف الشرح التفصيليّ للشيفرة. الحل: يكون الحل بناءً على الحالة المستعملة وهو: تقسيم التعبير الواحد إلى تعابيرَ فرعيّة (subexpressions) بالاعتماد على استخراج المتغيِّرات، أو عزل ذلك المقطع في تابعٍ (method) جديدٍ باسمٍ معبِّر، أو إعادة تسمية التابع (rename method) لاسمٍ يشرح ذاته بذاته، أو إضافة التأكيدات. تكرار  الشيفرة (duplicates) المشكلة: التشابه (أو التطابق المطلق) بين مقطعين من الشيفرة ...

المبالغة والإطالة (Bloaters)

قد يزداد حجم الشيفرات والتوابع (methods) والأصناف (classes) ازديادًا كبيرًا ليصل لمرحلةٍ يصعُب التعامل معها، ولا يحدث هذا بشكلٍ فجائيِّ دفعةً واحدةً، بل يكون ناتجًا عن تراكم الإضافات أثناء تطوير البرنامج (وخاصةً عندما لا يبذل أحدٌ جهدًا للحدِّ من ذلك التشعب)، ويبدو هذا التضخم واضحًا. التوابع الطويلة (long methods) المشكلة: تنتُج عن احتواء شيفرة التابع على الكثير من الأسطر. الحل: يشمل: إنشاء توابعَ جديدةٍ، أو تبديل المتغيَّرات المؤقَّتة إلى استداعاءات للدوال أو الاعتماد على كائن المعاملات، أو التعامل مع الكائن ككُلٍّ، أو ...

المبالغة والإطالة (Bloaters)

قد يزداد حجم الشيفرات والتوابع (methods) والأصناف (classes) ازديادًا كبيرًا ليصل لمرحلةٍ يصعُب التعامل معها، ولا يحدث هذا بشكلٍ فجائيِّ دفعةً واحدةً، بل يكون ناتجًا عن تراكم الإضافات أثناء تطوير البرنامج (وخاصةً عندما لا يبذل أحدٌ جهدًا للحدِّ من ذلك التشعب)، ويبدو هذا التضخم واضحًا. التوابع الطويلة (long methods) المشكلة: تنتُج عن احتواء شيفرة التابع على الكثير من الأسطر. الحل: يشمل: إنشاء توابعَ جديدةٍ، أو تبديل المتغيَّرات المؤقَّتة إلى استداعاءات للدوال أو الاعتماد على كائن المعاملات، أو التعامل مع الكائن ككُلٍّ، أو ...

الحفاظ على الكائن كاملًا (Preserve Whole Object)

المشكلة جلب عدة قيم من أحد الكائنات، ثم تمريرها كمعاملات إلى أحد التوابع. الحل حاول تمرير الكائن بالكامل بدلًا من ذلك. مثال قبل إعادة التصميم جلب قيمة درجة الحرارة المنخفضة low والمرتفعة high من الكائن daysTempRange ثم تمريرهما إلى التابع ()withinTange: في لغة Java: int low = daysTempRange.getLow(); int high = daysTempRange.getHigh(); boolean withinPlan = plan.withinRange(low, high); في لغة C#‎: int low = daysTempRange.GetLow(); int high = daysTempRange.GetHigh(); bool withinPlan = plan.WithinRange(low, high); في لغة PHP: $low = $daysTempRange->getLow(); $high = $daysTempRange->getHigh(); $withinPlan = $plan->withinRange($low, $high); في لغة Python: ...

الدالة itertools.compress()‎ في بايثون

تعيد الدّالة itertools.compress()‎ مُكرّرًا يُرشّح العناصر المتواجدة داخل الكائن القابل للتّكرار المُعطى مُعيدًا فقط تلك التي تملك عنصرًا مُحدّدًا يُساوي القيمة المنطقيّة True. ويتوقّف المُكرّر عندما تنتهي قيم البيانات المُعطاة أو قيم المُحدّدات. البنية العامة itertools.compress(data, selectors) المعاملات data البيانات التي ستُرشّح. selectors المُحدّدات التي تُحدّد ما إذا كانت البيانات ستنضم إلى المُكرّر المُعاد أو لا. القيمة المعادة مُكرّر يحتوي على عناصر الكائن data التي تُساوي مُحدّداتها القيمة المنطقيّة True. أمثلة المثال التّالي يوضّح كيفيّة عمل هذه الدّالة: >>> data ...

الدالة attr()‎

الدالة attr()‎ في CSS تُستعمَل للحصول على قيمة إحدى خاصيات العنصر المُحدَّد واستخدامها في أنماط CSS، ويمكن استعمالها أيضًا على العناصر الزائفة (pseudo-elements) وفي هذه الحالة ستُستخدَم قيمة خاصية العنصر الأصل. /* استخدام بسيط */ attr(data-count); attr(title); /* تحديد نوع البيانات */ attr(src url); attr(data-count number); attr(data-width px); /* توفير قيمة افتراضية */ attr(data-count number, 0); attr(src url, ''); attr(data-width px, inherit); attr(data-something, 'default'); لاحظ أنَّ الدالة attr()‎ يمكن استخدامها مع أيّ خاصية CSS، لكن دعم استخدامها مع جميع الخاصيات باستثناء content ما يزال تجريبيًا. أمثلة لاحظ كيف خزّنا السلسلة النصية hello ...

الدالة zlib.adler32()‎ في بايثون

تحسب الدالة مجموع التحقق checksum من نوع Adler-32 للبيانات المعطاة. البنية العامة zlib.adler32(data[, value]) ‎ المعاملات data البيانات المراد حساب مجموع التحقق لها. value إن كان المعامل value موجودًا، فإنّه يستخدم كقيمة بادئة لمجموع التحقق، وفي حال غيابه تكون القيمة الافتراضية هي 1. يؤدي تمرير قيمة إلى المعامل value إلى السماح بإجراء عمليات جمع تحقق مستمرّة على مجموعة من المدخلات المترابطة بعضها ببعض. القيمة المعادة تحسب الدالة مجموع التحقق checksum من نوع Adler-32 للبيانات المعطاة. (مجموع التحقق من نوع Alder-32 ...

الدالة bisect.bisect_left()‎ في بايثون

تحدّد الدالة موقع إدراج العنصر المحدد في المصفوفة المعطاة. البنية العامة ‎bisect.bisect_left(a, x, lo=0, hi=len(a)) المعاملات يمكن استخدام المعاملين lo و hi لتحديد جزء من القائمة، ولكن السلوك الافتراضي لهذه الدالة هو التعامل مع القائمة بأكملها. إن كان العنصر x موجودًا من قبل في القائمة a، فإنّ موقع الإدراج سيكون قبل (إلى يسار) العناصر الموجودة أصلًا. يمكن استخدام القيمة المعادة كأول معامل في التابع list.insert()‎ على افتراض أنّ القائمة a مفروزة أصلًا. القيمة المعادة يقسم موقع الإدراج المعاد i المصفوفة ...

التابع ‎‎.removeData()‎‎ في jQuery

‎.removeData( [name ] )‎ القيم المعادة يعيد كائنًا من النوع jQuery. الوصف يحذف هذا التابع جزءًا من البيانات المخزَّنة مسبقًا. ‎.removeData( [name ] )‎ أُضيف مع الإصدار: 1.2.3. name سلسلة نصيِّة تمثِّل اسم جزء البيانات المراد حذفها. ‎.removeData( [list ] )‎ أُضيف مع الإصدار: 1.7. list مصفوفة أو سلسلة نصية تحتوي على أسماء أجزاء البيانات المراد حذفها، وتفصل الأسماء في السلسلة النصية بفراغ. يسمح لنا التابع ‎.removeData()‎ بحذف القيم التي ضُبطت مسبقًا باستعمال التابع ‎.data()‎. إن مرِّر إلى التابع اسم ...

هوس الحقول الأساسية (Primitive Obsession)

توصيف المشكلة تظهر المشكلة بعدَّة جوانب: استخدام الحقول الأساسيّة (primitives) بدلًا من الكائنات (objects) لأداء المهامّ البسيطة (مثل: عمليات العملة [currency] والمجالات [ranges] والسلاسل النصية [strings] المُخصَّصة للأرقام الهاتفية، …إلخ.). استخدام الثوابت (constants) لترميز المعلومات (مثل استخدام الثابت USER_ADMIN_ROLE = 1 للدلالة على المستخدمين ذوي الصلاحيّات الإداريّة). استخدام الثوابت النصيّة (string constants) كأسماءٍ للحقول (fields) في مصفوفات البيانات (data arrays). أسبابها تنشأ هذه المشكلة بسبب العبارة المُدمِّرة التي يفكّر بها المبرمجون بلحظة ضعفٍ: "حقلٌ واحدٌ فقط، ولتخزين معلومةٍ بسيطةٍ وحسب!"ولأنهم ...

تبديل المعاملات باستدعاءات التوابع (Replace Parameter with Method Call)

المشكلة استدعاء تابع استعلام (query method) وتمرير نتائجه كمعاملات لتابع آخر، في حين أنه يمكن لهذا التابع استدعاء الاستعلام مباشرة. الحل بدلًا من تمرير القيمة من خلال المعامل، حاول وضع استدعاء الاستعلام داخل متن التابع. مثال قبل إعادة التصميم تخزين القيمة التي يعيدها كلٌّ من التابعين ()getSeasonalDiscount و ()getFees في متغير ثم تمريرها إلى التابع ()discountedPrice: في لغة Java: int basePrice = quantity * itemPrice; double seasonDiscount = this.getSeasonalDiscount(); double fees = this.getFees(); double finalPrice = discountedPrice(basePrice, seasonDiscount, fees); في لغة C#‎: int basePrice ...

الدالة ‎‎jQuery.post()‎‎ في jQuery

jQuery.post( url [, data ] [, success ] [, dataType ] )‎ القيم المعادة تعيد كائنًا من النوع jqXHR. الوصف تجلب هذه الدالة بياناتٍ من الخادم باستعمال طلب HTTP عبر الطريقة POST. jQuery.post( url [, data ] [, success ] [, dataType ] )‎ أُضيف مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية ترسل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR ...

الدالة ‎‎jQuery.get()‎‎ في jQuery

jQuery.get( url [, data ] [, success ] [, dataType ] )‎ القيم المعادة يعيد كائنًا من النوع jqXHR. الوصف يجلب هذا التابع بياناتٍ من الخادم باستعمال طلب HTTP عبر الطريقة GET. jQuery.get( url [, data ] [, success ] [, dataType ] )‎ أُضيفت مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية ترسل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR ...

الدالة ‎‎jQuery.get()‎‎ في jQuery

jQuery.get( url [, data ] [, success ] [, dataType ] )‎ القيم المعادة يعيد كائنًا من النوع jqXHR. الوصف يجلب هذا التابع بياناتٍ من الخادم باستعمال طلب HTTP عبر الطريقة GET. jQuery.get( url [, data ] [, success ] [, dataType ] )‎ أُضيفت مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية ترسل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR ...

الدالة ‎‎jQuery.post()‎‎ في jQuery

jQuery.post( url [, data ] [, success ] [, dataType ] )‎ القيم المعادة تعيد كائنًا من النوع jqXHR. الوصف تجلب هذه الدالة بياناتٍ من الخادم باستعمال طلب HTTP عبر الطريقة POST. jQuery.post( url [, data ] [, success ] [, dataType ] )‎ أُضيف مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية ترسل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR ...

التابع URLopener.open_unknown()‎‎ في بايثون

واجهة قابلة للتعديل لفتح عناوين URL مجهولة النوع. البنية العامة URLopener.open_unknown(fullurl, data=None) ‎المعاملات ‎data يحمل المعامل data المعنى نفسه لنظيره في الدالة urlopen()‎. القيمة المعادة يعيد التابع كائن urllib.response.addinfourl. انظر أيضًا الدالة URLopener.open()‎: يفتح التابع عنوان URL الكامل المعطى باستخدام البروتوكول المناسب. مصادر صفحة Extensible library for opening URLs في توثيق بايثون الرسمي.

العمل مع JavaScript في ريلز

يغطي هذا الدليل وظيفة Ajax/JavaScript المضمّنة في ريلز (والمزيد)؛ وسوف يمكنك من إنشاء تطبيقات Ajax غنية وديناميكية بكل سهولة! ستتعلم بعد قراءة هذا الدليل: أساسيات Ajax. جافاسكربت الواضحة (Unobtrusive JavaScript). كيف يساعدك مساعدو ريلز المدمجون (built-in helpers). كيفية التعامل مع Ajax من طرف الخادم. الجوهرة Turbolinks. مقدمة لفهم Ajax لفهم أجاكس، يجب أولًا فهم ما يفعله متصفّح الويب بشكل طبيعي. عندما تكتب http://localhost:3000 في شريط عنوان المتصفّح وتضغط على "Go" ، يقدّم المتصفح ("العميل") طلبًا للخادم، ويفرز الاستجابة ثم يجلب ...

التابع ‎‎jQuery.parseXML()‎‎ في jQuery

jQuery.parseXML( data )‎ القيم المعادة يعيد كائن مستند من النوع XMLDocument. الوصف يفسِّر هذا التابع سلسلة نصية بصيغة XML إلى مستند XML. jQuery.parseXML( data )‎ أُضيف مع الإصدار: 1.5. data سلسلة نصية بصيغة XML يراد تفسيرها. يستعمل التابع jQuery.parseXML()‎ دالة التفسير الأساسيَّة التي يوفِّرها المتصفح لإنشاء مستند XML صالح. يمكن أن يُمرَّر هذا المستند إلى jQuery لإنشاء كائن jQuery اعتيادي الذي يمكن تعديله أو نقله. أمثلة إنشاء كائن jQuery باستعمال سلسلة XML نصية وجلب قيمة العقدة title: <!doctype html> <html lang="en"> <head> ...

التابع ‎‎jQuery.parseXML()‎‎ في jQuery

jQuery.parseXML( data )‎ القيم المعادة يعيد كائن مستند من النوع XMLDocument. الوصف يفسِّر هذا التابع سلسلة نصية بصيغة XML إلى مستند XML. jQuery.parseXML( data )‎ أُضيف مع الإصدار: 1.5. data سلسلة نصية بصيغة XML يراد تفسيرها. يستعمل التابع jQuery.parseXML()‎ دالة التفسير الأساسيَّة التي يوفِّرها المتصفح لإنشاء مستند XML صالح. يمكن أن يُمرَّر هذا المستند إلى jQuery لإنشاء كائن jQuery اعتيادي الذي يمكن تعديله أو نقله. أمثلة إنشاء كائن jQuery باستعمال سلسلة XML نصية وجلب قيمة العقدة title: <!doctype html> <html lang="en"> <head> ...

الدالة ‎‎jQuery.getJSON()‎‎ في jQuery

jQuery.getJSON( url [, data ] [, success ] )‎ القيم المعادة تعيد كائنًا من النوع jqXHR. الوصف تجلب هذه الدالة بياناتٍ مرمَّزة بصيغة JSON من الخادم باستعمال طلب HTTP عبر الطريقة GET. jQuery.get( url [, data ] [, success ] )‎ أُضيفت مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسَل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية تُرسَل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR jqXHR )‎ يراد ...

الدالة ‎‎jQuery.getJSON()‎‎ في jQuery

jQuery.getJSON( url [, data ] [, success ] )‎ القيم المعادة تعيد كائنًا من النوع jqXHR. الوصف تجلب هذه الدالة بياناتٍ مرمَّزة بصيغة JSON من الخادم باستعمال طلب HTTP عبر الطريقة GET. jQuery.get( url [, data ] [, success ] )‎ أُضيفت مع الإصدار: 1.0. url سلسلة نصية تحتوي على الرابط URL الذي سيُرسَل الطلب إليه. data كائنٌ مجرَّد أو سلسلة نصية تُرسَل إلى الخادم مع الطلب. success دالةٌ من الشكل Function( Object data, String textStatus, jqXHR jqXHR )‎ يراد ...

العنصر
يُمثِّل العنصر <object> موردًا خارجيًا، والذي يمكن أن يُعامل كصورة، أو كمورد سيُعالَج عبر إضافة خارجية. مثال عن استخدام العنصر <object> لتضمين مقطع بصيغة فلاش (flash، بصيغة swf): <object data="movie.swf" type="application/x-shockwave-flash"></object> مثال آخر عن تضمين مقطع فلاش، لكن مع تمرير معاملات له عبر العنصر <param>: <object data="movie.swf" type="application/x-shockwave-flash"> <param name="foo" value="bar"> </object> بطاقة العنصر تصنيفات المحتوى عنصر تنظيمي أو عنصر عادي أو عنصر يحتوي وسائط مضمّنة أو عنصر تفاعلي. المحتوى المسموح يجوز استخدام العنصر <param> صفر مرة أو أكثر، ثم أي ...

المولدات Generators في بايثون

المولّدات هي أداة بسيطة وقوية لإنشاء المكرِّرات. تأخذ المولِّدات صيغة الدوال العادية ولكنّها تستخدم عبارة yield عند إعادة البيانات. في كلّ مرة تستدعى فيها الدالة next()‎ على المولّدات تعود الأخيرة إلى المكان الذي تركته (تتذكر المولّدات جميع القيم والعبارات التي نفّذت أخيرًا). يوضح المثال التالي كيفية إنشاء المولّدات وآلية عملها: def reverse(data):     for index in range(len(data)-1, -1, -1):         yield data[index] >>> >>> for char in reverse('golf'): ...     print(char) ... f l o g يمكن إنجاز كل ما تقوم به المولّدات باستخدام مكرِّرات صنفية (class-based ...

التابع URLopener.open()‎‎ في بايثون

يفتح التابع عنوان URL الكامل المعطى باستخدام البروتوكول المناسب. يهيّئ هذا التابع الذاكرة المخبئية ومعلومات الوسيط، ثم يستدعي تابع الفتح الملائم مع وسائط الإدخال الخاصة به. إن لم يتمكن التابع من التعرّف على المخطّط يُستدعى التابع open_unknown()‎. البنية العامة URLopener.open(fullurl, data=None) ‎المعاملات ‎data يحمل المعامل data المعنى نفسه لنظيره في الدالة urlopen()‎. القيمة المعادة يعيد التابع كائن urllib.response.addinfourl. أمثلة يقرأ المثال التالي أول 300 بايت من موقع Python: >>> from urllib import request >>> opener = request.URLopener() >>> result = opener.open("https://www.python.org") >>> print(result.read(300)) b'<!doctype ...

الدالة lzma.compress()‎ في بايثون

تضغط الدالة البيانات المعطاة (كائن bytes) وتعيد البيانات المضغوطة على هيئة كائن bytes. البنية العامة lzma.compress(data, format=FORMAT_XZ, check=-1, preset=None, filters=None) المعاملات ‎data البيانات المراد ضغطها. راجع الكائن LZMACompressor للاطلاع على وصف مفصّل للمعاملات format و check و preset و filters. القيمة المعادة تعيد الدالة كائن bytes يتضمّن البيانات المضغوطة. أمثلة يبين المثال التالي طريقة ضغط البيانات في الذاكرة: import lzma data_in = b"Insert Data Here" data_out = lzma.compress(data_in) انظر أيضًا الدالة lzma.decompress()‎: تفكّ الدالة الضغط عن البيانات المعطاة (كائن bytes) وتعيد البيانات ...

الدالة session_decode()‎ في PHP

(PHP 4, PHP 5, PHP 7) تفك الدالة session_decode()‎ ترميز بيانات الجلسة مِن سلسلة نصية مُرمَّزة للجلسة. الوصف bool session_decode ( string $data ) تفك الدالة session_decode()‎ ترميز بيانات الجلسة المُسلسلة المُتوافرة في المعامل ‎$data وتقوم بنشرها في المُتغير ‎$_SESSION العام (superglobal) مع النتيجة. تُستخدم طريقة داخلية في PHP افتراضيًا لفك التسلسل، وهي تختلف عن الدالة unserialize()‎. طريقة التسلسل المُستخدمة تُحدد بواسطة session.serialize_handler. المعاملات data البيانات المُرمَّزة التي ستُخزَّن. القيم المعادة تُعيد الدالة session_decode()‎ القيمة TRUE في حالة نجاح عملها، أو القيمة FALSE في ...

array_multisort()‎

(PHP 4, PHP 5, PHP 7) تُرتِّب الدالة array_multisort()‎ عدة مصفوفات أو المصفوفات متعددة الأبعاد. الوصف bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed$array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) يمكن استخدام الدالة array_multisort()‎ لترتيب عدة مصفوفات دفعةً واحدةً، أو بُعد واحد أو أكثر في حالة المصفوفة متعددة الأبعاد. ويُحتَفَظ بالمفاتيح المقترنة من النوع string، ولكن ستُعاد فهرسة المفاتيح الرقمية. ملاحظة: إذا تساوت مقارنة عنصرين في المصفوفة، فإن ترتيبهما النسبي في المصفوفة المُرتّبة يكون غير محدد. ...

array_multisort()‎

(PHP 4, PHP 5, PHP 7) تُرتِّب الدالة array_multisort()‎ عدة مصفوفات أو المصفوفات متعددة الأبعاد. الوصف bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed$array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) يمكن استخدام الدالة array_multisort()‎ لترتيب عدة مصفوفات دفعةً واحدةً، أو بُعد واحد أو أكثر في حالة المصفوفة متعددة الأبعاد. ويُحتَفَظ بالمفاتيح المقترنة من النوع string، ولكن ستُعاد فهرسة المفاتيح الرقمية. ملاحظة: إذا تساوت مقارنة عنصرين في المصفوفة، فإن ترتيبهما النسبي في المصفوفة المُرتّبة يكون غير محدد. ...

التابع ‎‎.one()‎‎ في jQuery

‎.one( events [, data ], handler )‎ القيم المعادة يعيد كائنًا من النوع jQuery. الوصف يربط هذا التابع دالة معالج حدث لحدثٍ واحدٍ أو أكثر  بالعناصر المحدَّدة. يُنفَّذ معالج الحدث مرةً واحدةً لكل عنصر ولكل نوع من الأحداث المرتبطة. ‎.one( events [, data ], handler )‎ أُضيف مع الإصدار: 1.1. events سلسلة نصية تحتوي على نوع حدث واحد أو عدَّة أنواع من أحداث JavaScript مثل "click" أو "submit,‎". data كائن مجرَّد (Object) يحتوي على البيانات التي ستُمرَّر إلى مُعالِج الحدث ...

الوحدة Marshal في روبي

تحوّل المكتبة Marshal مجموعات من كائنات روبي إلى مجرى من البايتات (byte stream)، مما يسمح بتخزينها خارج البرنامج النصي النشط حاليًا. يمكن بعد ذلك قراءة تلك البيانات وإعادة إنشاء الكائنات الأصلية أنشئت منها. تحتوي البيانات المرصوفة (Marshaled data) على أرقام الإصدار الرئيسية والثانوية مخزنةً مع معلومات الكائن. في الاستخدام العادي، تُحمّل فقط البيانات التي لها نفس رقم الإصدار الرئيسي، ورقم الإصدار الثانوي المساوي أو الأقل منه. وفي حال ضبط قيمة الراية "verbose" (عادةً باستخادم ‎-d أو ‎-v أو ‎-w أو ...

Document.createComment()‎

يُنشئُ التّابع Document.createComment()‎ عقدةَ تعليق جديدةً ويُعيدها. البنية العامة CommentNode = document.createComment(data) data سلسلةٌ نصيّة تحتوي على التعليق المرغوب إضافته. مثال var docu = new DOMParser().parseFromString('<xml></xml>', "application/xml"); var comment = docu.createComment('هذا تعليق'); docu.getElementsByTagName('xml')[0].appendChild(comment); alert(new XMLSerializer().serializeToString(docu)); // تعرض // <xml><!--هذا تعليق--></xml> مصادر ومواصفات مواصفة createComment

عرض (50 السابقة | 50 التالية) (20 | 50 | 100 | 250 | 500).

قائمة التصفح