مهمة مُعززة
يُطلق مصطلح "التخصيص المُعزز" (أو "التخصيص المُركب ") على بعض عوامل التخصيص في لغات برمجة مُعينة (خاصةً تلك المُشتقة من لغة C ). يُستخدم التخصيص المُعزز عادةً لاستبدال عبارة تأخذ فيها العامل متغيرًا كأحد وسائطها، ثم تُسند النتيجة إلى نفس المتغير. مثال بسيط على ذلك هو `______` ، والذي يُوسّع إلى `______` . تتوفر تركيبات مُشابهة للعديد من عوامل التشغيل الثنائية.x += 1x = x + 1
بشكل عام، في اللغات التي تقدم هذه الميزة، فإن معظم المعاملات التي يمكنها أخذ متغير كأحد وسائطها وإرجاع نتيجة من نفس النوع لها ما يعادلها من التعيين المعزز الذي يعيد النتيجة إلى المتغير في مكانه، بما في ذلك المعاملات الحسابية ومعاملات إزاحة البتات ومعاملات البتات .
مناقشة
على سبيل المثال، يمكن العثور على العبارة التالية أو بعض الاختلافات عنها في العديد من البرامج:
س = س + 1
هذا يعني "إيجاد العدد المخزن في المتغير x ، وإضافة 1 إليه، وتخزين نتيجة الجمع في المتغير x ". على الرغم من بساطة هذا التعبير ظاهريًا، إلا أنه قد ينطوي على بعض أوجه القصور، إذ يتطلب البحث عن موقع المتغير x مرتين إذا لم يتعرف المترجم على تطابق جزئي التعبير: فقد يكون x مرجعًا لعنصر في مصفوفة ما، أو قد يكون هناك تعقيد آخر. للمقارنة، إليك نسخة التعيين المُعزز:
x += 1
مع هذا الإصدار، لا يوجد عذر للمترجم لعدم توليد كود يبحث عن موقع المتغير x مرة واحدة فقط، ويعدله في مكانه، إذا كان كود الآلة يدعم مثل هذا التسلسل. على سبيل المثال، إذا كان x متغيرًا بسيطًا، فقد يكون تسلسل كود الآلة شيئًا مثل
تحميل x أضف 1 المتجر x
وسيتم توليد نفس الكود لكلا النموذجين. ولكن إذا كان هناك كود عملية خاص، فقد يكون
MDM x,1
يعني ذلك "تعديل الذاكرة" بإضافة 1 إلى x، وسيقوم المترجم المُحسِّن بتوليد نفس الكود لكلا الشكلين. بعض أكواد الآلة تُتيح عمليات INC وDEC (لإضافة أو طرح واحد)، بينما قد تسمح أكواد أخرى بثوابت أخرى غير الواحد.
وبشكل أعم، فإن الشكل هو
x ؟ = تعبير
where the ? stands for some operator (not always +), and there may be no special op codes to help. There is still the possibility that if x is a complicated entity the compiler will be encouraged to avoid duplication in accessing x, and of course, if x is a lengthy name, there will be less typing required. This last was the basis of the similar feature in the ALGOL compilers offered via the Burroughs B6700 systems, using the tilde symbol to stand for the variable being assigned to, so that
LongName:=x+sqrt(LongName)*7;would become
LongName:=x+sqrt(~)*7;and so forth. This is more general than just x:=~ + 1; Producing optimum code would remain the province of the compiler.
Semantics
In expression-oriented programming languages such as C, assignment and augmented assignment are expressions, which have a value. This allows their use in complex expressions. However, this can produce sequences of symbols that are difficult to read or understand, and worse, a mistype can easily produce a different sequence of gibberish that although accepted by the compiler does not produce desired results. In other languages, such as Python, assignment and augmented assignment are statements, not expressions, and thus cannot be used in complex expressions. For example, the following is valid C, but not valid Python:
a+=b+=cAs with assignment, in these languages augmented assignment is a form of right-associative assignment.
Unlike in C, the compound assignment expressions of C++ evaluate to an lvalue.[1] Being an lvalue allows it to be written on the left-hand-side of some other assignment statement:[2]
intx=11;(x*=2)+=3;// Sets x to 25Computed assignment locations
In languages such as C, C++ and Python, an augmented assignment where the assignment location includes function calls, is mandated to only call the functions once. I.e in the statement:
my_array[f1()]+=1The function f1 is mandated to only be called once.
If a language implements augmented assignment by macro expansion to:
my_array [ f1 ()] = my_array [ f1 ()] + 1ثم f1يتم استدعاؤه مرتين.
حسب اللغة
أحفاد سي
في لغات البرمجة C و C++ و C# ، يكون عامل التعيين هو =، والذي يتم توسيعه على النحو التالي:
| المشغل | وصف |
|---|---|
+= | إضافة |
-= | الطرح |
*= | الضرب |
/= | قسم |
%= | معامل |
<<= | إزاحة البتات اليسرى |
>>= | إزاحة البتات إلى اليمين |
&= | عملية AND الثنائية |
^= | عملية أو الحصرية الثنائية |
|= | أو الشاملة على مستوى البت |
يُطلق على كلٍّ من هذه العوامل اسم عامل التخصيص المركب في تلك اللغات. [ 1 ] [ 3 ] [ 4 ] [ 5 ]
اللغات المدعومة
القائمة التالية، على الرغم من أنها ليست كاملة أو شاملة، إلا أنها تسرد بعض لغات البرمجة الرئيسية التي تدعم عوامل التعيين المعززة.
انظر أيضاً
- مشغل مركب
- عملية مدمجة
- عوامل الزيادة والنقصان - حالة خاصة من التخصيص المُعزز، بمقدار 1
- عملية حسابية معززة وفقًا لمعيار IEEE 754
مراجع
- 1 2 "عوامل التخصيص" . cppreference.com . مرجع لغة C++ . تم الاطلاع عليه في 1 مارس 2021 .
- ↑ ستروستروب، بيارن (2013). لغة البرمجة سي++ ( الطبعة الرابعة). أديسون-ويسلي. ISBN 978-0-321-56384-2.
- ↑ "ISO/IEC 9899:201x مسودة اللجنة 12 أبريل 2011 N1570" .
- ↑ "عوامل التعيين والتعيين المركب" .
- ↑ "مواصفات لغة C#" . مايكروسوفت . تم الاطلاع عليه بتاريخ 17 مارس 2014 .
- المشغلون (البرمجة)
- الحساب الحاسوبي
- عمليات التخصيص
