نتائج البحث

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

الدالة staticmethod()‎ في بايثون

تُحوّل الدّالة staticmethod()‎ تابعًا إلى تابعٍ ساكن (static method). البنية العامة staticmethod(fun) @staticmethod المعاملات fun الدّالة أو التّابع المُراد تحويله إلى تابعٍ ساكن. القيمة المعادة يُحوّل التّابع المُزخرَف إلى تابعٍ ساكن لا يستقبل مُعاملًا أولًا صريحًا (المُعامل المعروف بالاسم self في التّوابع). أمثلة المثال التّالي يوضّح كيفيّة إنشاء تابع ساكن باستعمال الدّالة staticmethod كمُزخرِف: >>> class A: ... @staticmethod ... def hello(): # لاحظ أنّ التّابع السّاكن لا يستقبل أيّ مُعامل تلقائيّ كما في التّوابع ...

الوحدة functools‎ في بايثون

تُقدّم الوحدة functools دوال عاليّة الرّتبة (higher-order functions)، وهي دوال تستقبل دوالا أخرى، تُغيّرها، أو تُعيد دوال أخرى. وعلى العموم، يُمكن لأيّ كائن قابل للاستدعاء أن يُعامل مُعاملة الدّالة عند استخدام هذه الوحدة. تُعرّف الوحدة functools الدّوال التّاليّة: functools.cmp_to_key()‎ تُحوّل دالّةَ مُقارنة (comparison function) إلى دالّة مفتاح (key function). functools.partial()‎ تُستعمل لإنشاء دالّة جزئيّة من دالّة بتمرير قيم افتراضيّة ثابتة لها. functools.reduce()‎ تُطبّق دالّةً تأخذ مُعاملين بتراكب لعناصر الكائن القابل للتّكرار المُعطى، من اليسار إلى اليمين لتخفيض العناصر إلى قيمة ...

الدالة super()‎ في بايثون

تعيد الدّالة super()‎ كائنًا وسيطًا يُفوّض استدعاءات التّوابع إلى صنف أبٍ أو صنف شقيق للصّنف الذي استُدعيَت منه الدّالة. هذا مُفيد للوصول إلى التّوابع الموروثة التي أعيدت كتابتها في صنف مُعيّن. ترتيب البحث يكون هو نفسه التّرتيب المُستخدم من طرف الدّالة getattr()‎ لكنّ النّوع type‎ المُعطى يُتجاهَل. البنية العامة super([type[, object-or-type]]) المعاملات type النّوع الذي ستقوم الدّالة super()‎ بتفويض استدعاءات التّوابع إلى صنف أبٍ أو صنف شقيق له. تعرض الخاصيّة __mro__ الخاصّة بالصّنف type ترتيب البحث عن التوابع (method resolution ...

الدالة functools.partialmethod()‎ في بايثون

تعيد الدّالة functools.partialmethod()‎ واصفًا يتصرّف مثل كائنات partial، إلّا أنّه مُصمّم ليُستخدم كتعريف تابع (method definition) عوضًا عن أن يكون قابلا للاستدعاء (callable) مُباشرة. البنية العامة functools.partialmethod(func, *args, **keywords) المعاملات func واصفٌ أو كائن قابل للاستدعاء (تُعامل الكائنات التي تجتمع فيها الصّفتان على أنّها واصفات، مثل الدّوال). عندما يكون func واصفًا (مثل دالّة بايثون عاديّة، أو الدّالة classmethod()‎، أو الدّالة staticmethod()‎، أو نسخة أخرى من partialmethod)، فستُفوّض استدعاءات الخاصيّة ‎__get__‎ إلى الواصف المنشأ، وسيُعاد كائن partial كنتيجة. عندما يكون func ...

التابع ZipFile.writestr()‎‎ في بايثون

يكتب التابع البيانات النصية المعطاة في الأرشيف. البنية العامة ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None) ‎المعاملات ‎zinfo_or_arcname يأخذ هذا المعامل إحدى قيمتين، فإمّا أن يكون اسم الملف في الأرشيف، أو نسخة من الصنف ZipInfo. في حال كانت القيمة المعطاة هي نسخة من الصنف فيجب على الأقل تعيين قيمة للمعاملات filename و date و time على الأقل. أما إن كانت القيمة المعطاة هي اسم الملف، فسيعتمد التابع الوقت والتاريخ الحاليين. يجب أن يكون الأرشيف مفتوحًا في الوضع 'w' أو 'x' أو 'a'. compress_type ...

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

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

تبسيط استدعاءات التوابع (Simplifying Method Calls)

تجعل التقنيات التي سيشار إليها في هذا القسم استدعاءات التوابع أبسط وأسهل للفهم والاستيعاب. سيؤدي ذلك بدوره إلى تبسيط الواجهات للتفاعل بين الأصناف. هذه التقنيات هي: إعادة تسمية التوابع (Rename Method) المشكلة: لا يعبِّر اسم التابع عن ما يقوم به. الحل: إعادة تسمية التابع. إضافة المعاملات (Add Parameter) المشكلة: لا يملك التابع بيانات كافية لتنفيذ بعض الإجراءات. الحل: إنشاء معامل جديد لتمرير البيانات الضرورية. حذف المعاملات (Remove Parameter) المشكلة: لا يُستخدم معاملٌ ما في متن التابع. الحل: إزالة المعامل غير ...

دفع التابع لأسفل (Push Down Method)

المشكلة هل السلوك المُنفَّذ في الصنف الأب مُستخدمٌ في صنف فرعي واحد فقط (أو أكثر)؟ الحل نقل هذا السلوك إلى الأصناف الفرعية. مثال قبل إعادة التصميم التابع ()getFuel الموجود في الصنف Unit الأب مُستخدم في صنف فرعي واحد فقط الذي هو Tank: التابع الموجود في الصنف الأب مُستخدم في صنف فرعي واحد فقط. بعد إعادة التصميم نقل التابع ()getFuel من الصنف الأب إلى الصنف الفرعي المستخدم فيه: نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه. لم إعادة التصميم؟ في ...

سحب التابع لأعلى (Pull Up Method)

المشكلة تحتوي الأصناف الفرعية على توابع تؤدي نفس العمل. الحل جعل التوابع متطابقة ثم نقلها إلى الصنف الأعلى ذي الصلة. مثال قبل إعادة التصميم يحتوي الصنفان الفرعيان Soldier و Tank على التابع ()getHealth الذي يؤدي نفس العمل: تحتوي الأصناف الفرعية على التابع ()getHealth تؤدي نفس العمل. بعد إعادة التصميم نقل التابع ()getHealth إلى الصنف Unit الأب وإزالته من الأصناف الفرعية: نقل التابع ()getHealth إلى الصنف الأعلى. لم إعادة التصميم؟ تنمو الأصناف الفرعية وتتطور بشكل مستقل عن بعضها البعض، مما يتسبب ...

التابع call‎ الخاص بالصنف Method في روبي

يستدعي call كتلة التابع الذي استٌدعي معه، ويضبط وسائط الكتلة عند القيم المُمرَّرة إليه باستخدام صياغة مشابهة لصياغة استدعاء التوابع ثم يعيد قيمة آخر تعبير تم تقييمه في الكتلة. لاحظ أن ‎prc.()‎ يستدعي prc.call()‎ مع تمرير المعاملات المعطاة. وهي صياغة مختصرة لإخفاء التابع "call". بالنسبة للكائنات procs التي تم إنشاؤها باستخدام lambda أو ‎->()‎‎‎، سيُطلق خطأ إذا كان عدد المعاملات الممررة إلى proc غير صحيح. بالنسبة للكائنات proc التي تم إنشاؤها باستخدام Proc.new أو Kernel.proc ، سيتم تجاهل المعاملات الإضافية ...

الصنف urllib.request.Request‎‎ في بايثون

يعدّ هذا الصنف تجريدًا abstraction لطلب URL. البنية العامة urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None) المعاملات ‎url يجب أن يكون سلسلة نصية تحتوي على عنوان URL صالح للاستخدام. data يجب أن يكون كائنًا يحدّد المعلومات الإضافية التي ستُرسل إلى المخدّم، أو يحمل القيمة None في حال انتفاء الحاجة إلى إرسال مثل هذه المعلومات. يستخدم هذا المعامل من قبل طلبات HTTP فقط في الوقت الحاضر. أنواع الكائنات المدعومة هي كائنات bytes، والكائنات الشبيهة بالملفات file-like objects، والكائنات القابلة للتكرار iterables. في ...

الأصناف في بايثون

تعدّ الأصناف وسيلة لجمع البيانات والعمليات في بوتقة واحدة، ويؤدي إنشاء صنف جديد إلى تكوين نوع جديد من الكائنات، ما يتيح إنشاء نسخ (instances) من ذلك النوع. يمكن أن ترتبط بكلّ صنف مجموعة من الخاصيات (attributes) التي تساعد في متابعة حالة الصنف، إضافة إلى مجموعة من التوابع (methods) التي تساعد في تعديل حالة ذلك الصنف. لو أجرينا مقارنة بين بايثون ولغات البرمجة الأخرى، سنجد بأنّ بايثون تضيف قدرًا ضئيلًا من الصياغات الجديدة إلى الأصناف؛ إذ تعتمد بايثون الأساليب المتّبعة في ...

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

تعيد الدالة كائن ضغط يمكن استخدامه لضغط البيانات التي لا يمكن وضعها في الذاكرة دفعة واحدة. البنية العامة zlib.compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict]) ‎المعاملات level المعامل level هو عدد صحيح ضمن النطاق 0 إلى 9 أو ‎-1 ووظيفته هي التحكم في مستوى عملية الضغط، فالقيمة 1 تقابل المستوى(Z_BEST_SPEED) وهو الأسرع ويعطي أقل مقدار من الضغط، والقيمة 9تقابل المستوى(Z_BEST_COMPRESSION) وهو الأبطأ وينتج أكبر مقدار من الضغط. أما القيمة 0 فتقابل المستوى (Z_NO_COMPRESSION) فتعني عدم ضغط البيانات. القيمة الافتراضية لهذا المعامل ...

التابع float.hex()‎ في بايثون

يعيد التابع hex()‎ العدد العشري ذا الفاصلة العائمة كسلسلة نصية تتضمن التمثيل الست عشري لذلك العدد. هذا التابع هو تابع نسخة (instance method). الصيغة العامة x.hex() القيمة المعادة يعيد التابع hex()‎ العدد العشري ذا الفاصلة العائمة كسلسلة نصية تتضمن التمثيل الست عشري لذلك العدد. وتتضمن هذه السلسلة النصية - في حال تطبيق الدالة على عدد عشري محدّد - الرمز 0x في بدايتها والحرف p والأس (exponent) في نهايتها. أمثلة يوضّح المثال التالي القيمة المعادة عند استخدام هذا التابع مع الأعداد ...

تعريف الأصناف في بايثون

أبسط صيغة لتعريف الأصناف في بايثون هي: class ClassName:     <statement-1>     .     .     .     <statement-N> تعريف الأصناف كما هو الحال مع عبارات تعريف الدوال (عبارات def) يجب تنفيذ عبارات تعريف الأصناف حتى يكون لها الأثر المطلوب. يمكن تعريف الأصناف في بايثون ضمن عبارات if أو حتى داخل الدوال. عادة ما تستخدم الدوال داخل تعريف الصنف، ولكن من الممكن استخدام أنواع أخرى من العبارات، وتمتلك الدوال داخل الأصناف مجموعة من الوسائط الخاصّة بعملية استدعاء التوابع في بايثون. ...

تعريف الأصناف في بايثون

أبسط صيغة لتعريف الأصناف في بايثون هي: class ClassName:     <statement-1>     .     .     .     <statement-N> تعريف الأصناف كما هو الحال مع عبارات تعريف الدوال (عبارات def) يجب تنفيذ عبارات تعريف الأصناف حتى يكون لها الأثر المطلوب. يمكن تعريف الأصناف في بايثون ضمن عبارات if أو حتى داخل الدوال. عادة ما تستخدم الدوال داخل تعريف الصنف، ولكن من الممكن استخدام أنواع أخرى من العبارات، وتمتلك الدوال داخل الأصناف مجموعة من الوسائط الخاصّة بعملية استدعاء التوابع في بايثون. ...

Python/linecache/lazycache

التابع linecache.lazycache يحصل هذا التابع على المعلومات الكافية عن وحدة غير معتمدة على الملف" non-file-based" بحيث تكون جاهزة لقراءة أسطرها لاحقًا باستخدام التابع getline حتى لو كان المعامل module_globals غير مُسند ضمن معاملات getline، مما يسمح بتجنب عمليات الكتابة والقراءة إلى حين وجود حاجة حقيقية دون الحاجة إلى الاحتفاظ بالمعامل module_globals ضمن الشيفرة البرمجية. البنية العامة linecache.lazycache(filename, module_globals) المعاملات المعامل filename اسم الملف المُراد وضعه بالكاش بطريقة كسولة. المعامل module_globals قاموس (dict) يحتوي على مفتاحين __name__ و __loader__ يُستخدمان ضمن ...

الدالة classmethod()‎ في بايثون

الدّالة classmethod()‎ مُزخرفٌ يُحوّل تابعًا عاديًّا في صنف ما إلى تابع صنف (class method) ليُمكن الوصول إلى الصّنف الذي عُرّف فيه التّابع. يستقبل تابع الصّنفِ الصّنفَ كمُعاملٍ أول، تمامًا كما يستقبل التّابع العاديّ النّسخة (instance) كمُعامل أولٍ (أي الكائن الذي نُشير إليه عادةً بالاسم self). البنية العامة class C: @classmethod def f(cls, arg1, arg2, ...): ... المعاملات لا توجد مُعاملات. لكنّ الدّالة المُزخرَفَة f تستقبل المُعامل cls الذي يُشير إلى الصّنف الذي عُرّف عليه ...

التابع str.partition()‎ في بايثون

يقسم هذا التابع السلسلة النصية عند أول ظهور للقيمة التي يحدّدها المستخدم. البنية العامة x.partition() المعاملات sep يحدّد هذا المعامل الفاصل الذي سيعتمده التابع في تقسيم السلسلة النصية. القيمة المعادة يعيد هذا التابع صفًّا مكوّنًا من ثلاثة عناصر، الأول هو جزء السلسلة الذي يسبق الفاصل، والثاني هو الفاصل نفسه، والثالث هو الجزء الذي يلي الفاصل. في حال عدم العثور على الفاصل تعيد الدالة صفًّا مكوّنًا من ثلاثة عناصر، الأوّل هو السلسلة النصية نفسها، يليها سلسلتان فارغتان. أمثلة يبين المثال التالي ...

التابع str.rpartition()‎ في بايثون

يقسم هذا التابع السلسلة النصية عند آخر ظهور للقيمة التي يحدّدها المستخدم. البنية العامة x.rpartition() المعاملات sep يحدّد هذا المعامل الفاصل الذي سيعتمده التابع في تقسيم السلسلة النصية. القيمة المعادة يعيد هذا التابع صفًّا مكوّنًا من ثلاثة عناصر، الأول هو جزء السلسلة الذي يسبق الفاصل، والثاني هو الفاصل نفسه، والثالث هو الجزء الذي يلي الفاصل. في حال عدم العثور على الفاصل تعيد الدالة صفًّا مكوّنًا من ثلاثة عناصر، الأوّل هو السلسلة النصية نفسها، يليها سلسلتان فارغتان. أمثلة يبين المثال التالي ...

التابع float.fromhex()‎ في بايثون

هذا التابع هو تابع صنف (Class method) يعيد العدد العشري الذي يمكن تمثيله باستخدام السلسلة النصية التي تتضمن الصيغة الست عشرية. البنية العامة x.fromhex() المعاملات s وهو عبارة عن سلسلة نصية تتضمن القيمة الست عشرية المراد تمثيلها بصيغة العدد العشري، وتأخذ القيمة الست عشرية الصيغة التالية: [sign] ['0x'] integer ['.' fraction] ['p' exponent] الإشارة sign هنا اختيارية وتأخذ القيمتين + أو -، أما العدد الصحيح integer والكسر fraction فهما سلسلتان نصيتان تضمّان أعدادًا بالصيغة الست عشرية، والأس هو عدد عشري يمكن ...

الدالة functools.partial()‎ في بايثون

تعيد الدّالة functools.partial()‎ كائن partial يتصرّف كالدّالة المُعطاة عند استدعائها بما مُرّر من مُعاملات (arguments) ومُعاملات كلمات مفتاحيّة (keyword arguments، أي المُعاملات التي تُمرّر مع ذكر أسمائها إضافةً إلى قيمها). إن استُدعيَ الكائن بمُعاملات إضافيّة، فستُضاف إلى مُعاملات الدّالة، و إن استُدعيَ الكائن بمُعاملات كلمات مفتاحيّة إضافيّة، فستُوسّع وتُعوّض معاملات الكلمات المفتاحيّة السّابقة. تُستعمل لإنشاء دالّة جزئيّة من دالّة بتمرير قيم افتراضيّة ثابتة لها. البنية العامة functools.partial(func, *args, **keywords) المعاملات func الدّالة المرغوب إنشاء دالّة جزئيّة منها. args المُعاملات التي ...

الأعداد العشرية (ذات الفاصلة العائمة) float في بايثون

الأعداد العشرية (ذات الفاصلة العائمة floating point) هي الأعداد التي تتضمن فاصلة عشرية أو علامة أسية: >>> x = 2.5 >>> y = -1.609 >>> z = 3e4 >>> print(z) 30000.0 >>> a = 10. >>> b = .001 >>> c = 0e0 >>> print(a, b, c) 10.0 0.001 0.0 يمكن الحصول على معلومات حول دقّة الأعداد العشرية والتمثيل الداخلي لها في الحاسوب الذي يعمل عليه البرنامج عن طريق مكتبة sys.float_info: >>> import sys >>> sys.float_info sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1) التحويل إلى الأعداد العشرية ...

الأعداد العشرية (ذات الفاصلة العائمة) float في بايثون

الأعداد العشرية (ذات الفاصلة العائمة floating point) هي الأعداد التي تتضمن فاصلة عشرية أو علامة أسية: >>> x = 2.5 >>> y = -1.609 >>> z = 3e4 >>> print(z) 30000.0 >>> a = 10. >>> b = .001 >>> c = 0e0 >>> print(a, b, c) 10.0 0.001 0.0 يمكن الحصول على معلومات حول دقّة الأعداد العشرية والتمثيل الداخلي لها في الحاسوب الذي يعمل عليه البرنامج عن طريق مكتبة sys.float_info: >>> import sys >>> sys.float_info sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1) التحويل إلى الأعداد العشرية ...

تبديل المتغير المؤقت إلى استدعاء(Replace Temp with Query)

المشكلة تخزين نتيجة تعبيرٍ ما (expression) في متغيِّر محليٍّ (local variable) لاستخدامه لاحقًا في الشيفرة. الحل نقل التعبير بأكمله إلى تابعٍ (method) مستقلٍ يعيد نتيجته، وعندها سيكون استدعاء هذا التابع بديلًا عن استخدام المتغيِّر (variable)، ومن الممكن أيضًا دمج هذا التابع مع توابع أخرى عند الحاجة للقيام بذلك. مثال قبل إعادة التصميم نلاحظ في الشيفرة الآتية وجود متغيِّرٍ مؤقتٍ باسم basePrice لتخزين القيمة الناتجة عن تنفيذ التعبير الرياضيّ بمعامل الجداء (أي المعامل *)، وسيُستخدَم هذا المتغيِّر لاحقًا في الأجزاء الشرطيّة ...

الدالة functools.total_ordering()‎ في بايثون

يقوم مُزخرف الأصناف functools.total_ordering()‎ بزخرفة صنف يُعرّف تابعًا أو عدّة توابع ترتيب مُقارنة غنيّة (rich comparison ordering methods)، ويقوم بإضافة بقيّة توابع المُقارنة. يُبسّط هذا الجهد المبذول في تحديد جميع عمليّات المُقارنة الغنيّة المُمكنة. يجب على الصّنف أن يُعرّف التّابع الخاصّ ‎__lt__()‎، أو ‎__le__()‎، أو ‎__gt__()‎، أو ‎__ge__()‎. إضافة إلى التّابع الخاصّ ‎__eq__()‎. البنية العامة @functools.total_ordering المعاملات لا توجد مُعاملات. أمثلة المثال التّالي يوضّح كيفيّة استعمال المُزخرف للمُقارنة بين سياراتٍ حسب سُرعتها، تابع حالة التّساوي يُشير إلى أنّ نُسخةً من ...

الوحدة copy في بايثون

لا تنشئ عبارات الإسناد في بايثون نسخة من الكائنات، بل تربط بين الهدف والكائن. ولكن تظهر الحاجة إلى إنشاء نسخ من الكائنات في المجموعات التي تكون قابلة للتعديل أو التي تتضمّن عناصر قابلة للتعديل، بحيث يكون بالإمكان تغيير نسخة دون انتقال تلك التغييرات إلى الكائن الآخر. دوال الوحدة copy تقدّم هذه الوحدة مجموعة من عمليات النسخ السطحية والعميقة. copy.copy(x)‎ تعيد الدالة نسخة سطحية من الكائن المعطى. copy.deepcopy(x)‎ تعيد الدالة نسخة عميقة من الكائن المعطى. exception copy.error يُطلق هذا الاستثناء عند ...

استبدال المُنشئ بتابع التصميم (Replace Constructor with Factory Method)

المشكلة لديك مُنشئ (constructor) معقد يقوم بما هو أكثر من مجرد وضع قيم المعامل في حقول الكائن. الحل إنشاء تابع تصميم واستخدامه لاستبدال استدعاءات المُنشئ. مثال قبل إعادة التصميم وجود منشئ معقد للصنف Employee: في لغة Java: class Employee { Employee(int type) { this.type = type; } //... } في لغة C#‎: public class Employee { public Employee(int type) { this.type = type; } //... } في لغة PHP: class ...

توحيد التعبير الشرطي (Consolidate Conditional Expression)

المشكلة وجود عدة شروط تؤدي إلى نفس النتيجة أو الإجراء. الحل توحيد جميع هذه الشروط في تعبير وحيد. مثال قبل إعادة التصميم وجود عدة شروط يتم التحقق منها في الشيفرة: في لغة Java: double disabilityAmount() { if (seniority < 2) { return 0; } if (monthsDisabled > 12) { return 0; } if (isPartTime) { return 0; } // حساب مقدار العجز //... } في ...

الحفاظ على الكائن كاملًا (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: ...

دمج المتغير المؤقت (Inline Temp)

المشكلة وجود متغيِّرٍ مؤقَّت (temporary) لحفظ قيمة تعبيرٍ (expression) بسيطٍ ولا شيء آخر سواه. الحل تبديل كلُّ مرجعيّةٍ (reference) للمتغيِّر ليحلَّ محلَّها التعبيرُ نفسه. مثال قبل إعادة التصميم نلاحظ في الشيفرة الآتية وجود متغيِّرٍ مؤقتٍ باسم basePrice لتخزين القيمة الناتجة عن تعبير استدعاء التابع order.basePrice()‎، والذي سيُستخدَم في التعليمة التالية لتعريفه: في لغة Java: boolean hasDiscount(Order order) { double basePrice = order.basePrice(); return basePrice > 1000; } في لغة #C: bool HasDiscount(Order order) { double basePrice = order.BasePrice(); return ...

الدالة functools.singledispatch()‎ في بايثون

تُحوّل الدّالة functools.singledispatch()‎ دالّةً عاديّة إلى دالّة عموميّة وحيدة الإرسال (single-dispatch generic function). الدّالة العموميّة هي كلّ دالّة تتكوّن من عدّة دوال تُنفّذ نفس العمليّة لعدّة أنواع. تُحدّد الدّالة التي ستُنفّذ عبر خوارزميّة الإرسال (dispatch algorithm). تكون الدّالة العموميّة وحيدةَ إرسالٍ إذا كان نوع مُعامل واحد هو الذي يُحدّد الدّالة التي ستُنفَّذ. البنية العامة @functools.singledispatch المعاملات لا توجد مُعاملات القيمة المعادة دالّة عموميّة وحيدة الإرسال. أمثلة لإنشاء دالّة عموميّة، زخرِفها بالمُزخرِف ‎@singledispatch‎. لاحظ أنّ الإرسال يحدث عند نوع أوّل مُعامل: ...

وراثة الأصناف في بايثون

تدعم بايثون شأنها في ذلك شأن أي لغة برمجية كائنية التوجه مفهوم الوراثة، وأبسط صيغة لتعريف صنف مشتق أو موروث من صنف آخر هي: class DerivedClassName(BaseClassName):     <statement-1>     .     .     .     <statement-N> يجب أن يكون الاسم BaseClassName معرّفًا في النطاق الذي يحتوي تعريف الصنف المشتق. ويمكن استخدام أي تعبير محلّ اسم الصنف الأساسي، ويمكن لهذا أن يكون مفيدًا عندما يكون الصنف الأساسي معرّفًا في وحدة أخرى على سبيل المثال: class DerivedClassName(modname.BaseClassName): يجري تنفيذ تعريف الصنف المشتق بنفس الطريقة ...

Python/types

تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة إلى أنّها تعرّف أسماءً لبعض أنواع الكائنات التي يستخدمها مفسّر بايثون المعياري، ولكنّها ليست كائنات داخلية مثل int أو str، إلى جانب أنّ هذه الوحدة تقدم بعض الأصناف والدوال المساعدة الخاصة ببعض الأنواع، والتي لا تعدّ أساسية بما يكفي لتصبح أصنافًا ودوالّ داخلية. إنشاء الأنواع ديناميكيًا تقدّم هذه الوحدة ثلاث دوالّ تساعد في إنشاء أنواع البيانات ديناميكيًا: الدالة types.new_class()‎‎ تنشئ هذه الدالة ديناميكيًا كائن صنف باستخدام ...

إزالة الإسناد إلى المعاملات (Remove Assignments to Parameters)

المشكلة إسناد قيمةٍ ما إلى أحد المعاملات (parameter) داخل التابع (method body). الحل استخدام متغيِّرٍ محليٍّ (local variable) بدلًا من المعامل. مثال قبل إعادة التصميم نلاحظ وجود عمليّة إسنادٍ (من بعد الإنقاص بمقدار 2) إلى معامل التابع الوارد باسم inputVal: في لغة Java: int discount(int inputVal, int quantity) { if (inputVal > 50) { inputVal -= 2; } //... } في لغة #C: int Discount(int inputVal, int quantity) { if (inputVal > 50) ...

تجزئة المتغير المؤقت (Split Temporary Variable)

المشكلة وجود متغيِّرٍ محليّ يُستخدَم لتخزين عدّة قيمٍ مؤقتةٍ (مرحليّة) داخل التابع. الحل استخدام متغيِّراتٍ منفصلةٍ ومستقلّةٍ للقيم المختلفة، بحيث يكون كلَُ متغيِّرٍ مسؤولًا عن تخزين البيانات لمهمةٍ واحدةٍ فقط. مثال قبل إعادة التصميم نلاحظ في الشيفرة الآتية استخدام المتغيِّر temp لتخزين ناتج كلِّ من تعبيريّ المحيط والمساحة: في لغة Java: double temp = 2 * (height + width); System.out.println(temp); temp = height * width; System.out.println(temp); في لغة #C: double temp = 2 * (height + width); Console.WriteLine(temp); temp = height * width; Console.WriteLine(temp); في لغة PHP: $temp ...

Python/Topics

بنية اللغة بيان للبنية العامة للغة بايثون وبعض الأمور العامة مثل التعليقات وتسمية المعرّفات وغيرها. مفسر بايثون يستخدم مفسر بايثون لمعالجة الشيفرات المكتوبة بها، وهو يقبل عددًا من الخيارات، ويمكن تشغيله في الوضع التفاعلي. أنواع البيانات القيمة المنطقية (boolean) القيمتان المنطقيتان اللتان تدعمهما بايثون هما True و False وهما كائنان ثابتان (Constant objects) يعبران عن صحّة تعبير ما، فإمّا أن يكون صحيحًا True أو خطأً False. الأعداد الصحيحة (int) العدد الصحيح integer هو أي عدد موجب أو سالب لا يتضمن ...

if في بايثون

تقدّم بايثون عبارة if للتحكم المشروط بتدفق الشيفرة، وتأخذ الصيغة التالية: if expression: statement فعلى سبيل المثال: >>> x = int(input("Please enter an integer: ")) Please enter an integer: -16 >>> if x < 0: ...     x = 0 ...     print('Negative changed to zero') Negative changed to zero عبارة elif يمكن استخدام عبارة elif (وهي اختصار لعبارة 'else if' ) عند الحاجة إلى التحقق من شروط إضافية، وكما هو موضح في المثال التالي: >>> x = int(input("Please enter an integer: ")) Please ...

if في بايثون

تقدّم بايثون عبارة if للتحكم المشروط بتدفق الشيفرة، وتأخذ الصيغة التالية: if expression: statement فعلى سبيل المثال: >>> x = int(input("Please enter an integer: ")) Please enter an integer: -16 >>> if x < 0: ...     x = 0 ...     print('Negative changed to zero') Negative changed to zero عبارة elif يمكن استخدام عبارة elif (وهي اختصار لعبارة 'else if' ) عند الحاجة إلى التحقق من شروط إضافية، وكما هو موضح في المثال التالي: >>> x = int(input("Please enter an integer: ")) Please ...

for في بايثون

تختلف عبارة for قليلًا في بايثون عن نظيرتها في لغتي C أو Pascal، فبدلًا من تكرار الحلقة استنادًا إلى عملية حسابية (مثل لغة Pascal) أو منح المستخدم القدرة على تعريف عدد مرات التكرار والشرط الذي يؤدي إلى إيقاف عمل الحلقة (كما في لغة C)، فإنّ عبارة for في بايثون تمرّ على عناصر أي تسلسل (قائمة أو سلسلة نصية) معتمدة في ذلك على ترتيب تلك العناصر في ذلك التسلسل. بنية عبارة for >>> # معرفة أطوال السلاسل النصية: ... words = ['cat', ...

for في بايثون

تختلف عبارة for قليلًا في بايثون عن نظيرتها في لغتي C أو Pascal، فبدلًا من تكرار الحلقة استنادًا إلى عملية حسابية (مثل لغة Pascal) أو منح المستخدم القدرة على تعريف عدد مرات التكرار والشرط الذي يؤدي إلى إيقاف عمل الحلقة (كما في لغة C)، فإنّ عبارة for في بايثون تمرّ على عناصر أي تسلسل (قائمة أو سلسلة نصية) معتمدة في ذلك على ترتيب تلك العناصر في ذلك التسلسل. بنية عبارة for >>> # معرفة أطوال السلاسل النصية: ... words = ['cat', ...

استبدال الخوارزمية (Substitute Algorithm)

المشكلة الحاجة إلى استبدال خوارزميّة ما بخوارزميّة أخرى. الحل تعديل محتوى التابع (method body) الذي يُنفِّذ الخوارزمية السابقة ليُنفِّذ الخوارزمية الجديدة. مثال قبل إعادة التصميم تتلخَّص مهمة التابع foundPerson بالبحث عن الأشخاص ذوي الأسماء "Don" أو "John" أو "Kent" وذلك بالمرور بعناصر المصفوفة النصّيّة people باستخدام حلقة for كما في الشيفرة: في لغة Java: String foundPerson(String[] people){ for (int i = 0; i < people.length; i++) { if (people[i].equals("Don")){ return "Don"; ...

التابع Method.parameters‎ في روبي

يعيد التابع parameters معلومات عن معاملات الكائن Method الذي استُدعي معه. البنية العامة parameters → array‎ القيمة المعادة تعاد مصفوفة تحوي معلومات عن وسائط الكائن Method المعطى. أمثلة مثال على استخدام التابع parameters‎: def foo(bar); end method(:foo).parameters #=> [[:req, :bar]] def foo(bar, baz, bat, &blk); end method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:req, :bat], [:block, :blk]] def foo(bar, *args); end method(:foo).parameters #=> [[:req, :bar], [:rest, :args]] def foo(bar, baz, *args, &blk); end method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:rest, :args], [:block, :blk]]‎ انظر أيضا التابع owner: يعيد الصنف ...

الدوال المضمنة في لغة Python

abs()‎ القيمة المطلقة (absolute value) لعدد معيّن. all()‎ القيمة True إن كانت جميع عناصر الكائن القابل للتكرار (iterable) المعطى تُساوي القيمة True أو إن كان الكائن القابل للتكرار فارغًا. any()‎ القيمة True إن كان أحد عناصر الكائن القابل للتكرار (iterable) المعطى يساوي القيمة True أو إن كان الكائن القابل للتكرار فارغًا. ascii()‎ تمثيل (representation) نصي لكائن مُعيّنٍ يُمكن طباعته. bin()‎ تُحوّل عددًا صحيحًا (integer number) إلى سلسلةٍ نصيّةٍ ثنائيّة (binary string) مسبوقة بالمقطع النّصيّ "0b". bool()‎ قيمة منطقيّة تكون إمّا ...

التابع Object.method في روبي

يبحث التابع method عن تابعٍ باسمٍ محدَّد في الكائن المعطى بوصفه مستقبلًا (receiver)، ثمَّ يعيد كائنًا من النوع Method لذلك التابع (أو يرمي الاستثناء NameError). يتصرَّف الكائن Method كتعبيرٍ مغلق (closure) في نسخ الكائن الخاصة بالكائن الذي يبحث فيه؛ لذلك، تبقى متغيِّرات النسخة (instance variables) وقيمة self متاحةً. البنية العامة method(sym) → method المعاملات sym رمزٌ يشير إلى اسم التابع المراد البحث عنه. القيم المعادة يُعاد كائنًا من النوع Method يمثِّل التابع الموافق للاسم sym الموجود في الكائن المعطى، أو ...

التابع Method.to_proc‎ في روبي

يعيد التابع to_proc الكائن Proc المقابل للكائن Method الذي استُدعي معه. البنية العامة to_proc → proc‎ القيمة المعادة يعاد كائنٌ من النوع Proc الذي يقابل الكائن Method المعطى. انظر أيضا التابع super_method: يعيد كائنًا من النوع Method للصنف الأب (superclass) للكائن Method الذي استدعي معه. التابع to_s: يعيد اسم التابع الأصلي (underlying method). مصادر قسم التابع to_proc‎ في الصنف Method‎ في توثيق روبي الرسمي.

التابع Method.super_method‎ في روبي

يعيد التابع super_method كائنًا من النوع Method للصنف الأب (superclass) للكائن Method الذي استدعي معه لاستدعائه عند استخدام super، أو يعيد nil إن لم يكن هناك تابع في الصنف الأب. البنية العامة super_method → method‎ القيمة المعادة يعاد كائن من النوع Method للصنف الأب للكائن Method المعطى، أو تعاد القيمة nil إن لم يكن هناك تابع في الصنف الأب. انظر أيضا التابع source_location: يعيد اسم الملف المصدر لروبي ورقم السطر الذي يحتوي هذا التابع، التابع to_proc: يعيد كائنًا من النوع Proc المقابل ...

الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة

توصيف المشكلة التطابق بالمهام (function) ما بين صنفين (classes) ولكن بأسماءٍ مختلفةٍ لتوابعهما (methods). أسبابها عدم دراية المبرمج بوجود صنفٍ آخر يكافِئ بمهامّه مهامّ الصنف الحالي الذي ينشِئه. وما الحل؟ حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية: إعادة تسمية التوابع (methods) لتصبح متطابقةً بكافّة الأصناف البديلة (alternative) (أي الأصناف المتكافئة بالمهام). توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع، وذلك إمّا بنقل التابع (move method) أو إضافة المعاملات (add parameters) أو دمج التوابع عبر المعاملات (parameterize method). إن كان ...

التابع Object.define_singleton_method في روبي

يُعرِّف التابع define_singleton_method تابعًا منفردًا (singleton method) في المستقبل (receiver). البنية العامة define_singleton_method(symbol, method) → symbol define_singleton_method(symbol) { block } → symbol المعاملات symbol الرمز المُمرَّر إلى التابع والذي سيُعرِّف التابع المنفرد. method التابع المُمرَّر كمعامل. يمكن أن يكون هذا التابع كائنًا من النوع proc، أو Method، أو UnboundMethod. block وسيط اختياري يمثِّل الكتلة المُمرَّرة إلى التابع. إذا أعطي، فستُنفَّذ الكتلة المعطاة كما لو أنَّها من جسم التابع method. القيم المعادة يُعاد تابعٌ منفردٌ يمكن استدعائه في المستقبل. أمثلة مثالٌ عن ...

التابع InstructionSequence.of‎ في روبي

يُعيد التابع of سلسلة التعليمات التي تحوي الكائن Proc أو Method المعطى. البنية العامة of(p1) أمثلة مثال على استعمال التابع of باستخدام irb: # a proc > p = proc { num = 1 + 2 } > RubyVM::InstructionSequence.of(p) > #=> <RubyVM::InstructionSequence:block in irb_binding@(irb)> # for a method > def foo(bar); puts bar; end > RubyVM::InstructionSequence.of(method(:foo)) > #=> <RubyVM::InstructionSequence:foo@(irb)>‎ أو باستخدام compile_file: # /tmp/iseq_of.rb def hello puts "hello, world" end $a_global_proc = proc { str = 'a' + 'b' } # in irb > require '/tmp/iseq_of.rb' # first the method hello > RubyVM::InstructionSequence.of(method(:hello)) > #=> ...

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