مشغل (برمجة حاسوبية)

في برمجة الحاسوب ، يُعدّ المُعامل بنيةً لغويةً تُوفّر وظائف قد لا يُمكن تعريفها كدالة مُعرّفة من قِبل المستخدم (مثل sizeof في لغة C )، أو قد يكون لها صيغة مختلفة عن صيغة الدالة (مثل الجمع الوسطيa+b ). وكغيره من مفاهيم لغات البرمجة، فإنّ للمُعامل معنىً مُتفقًا عليه عمومًا، وإن كان محلّ نقاش، بين المُبرمجين.

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

if gt(x, y) then return

يمكن أن يكون:

if x > y then return

تسمح بعض اللغات بتجاوز عامل التشغيل المحدد في اللغة بسلوك محدد من قبل المستخدم، وتسمح بعضها برموز عوامل التشغيل المحددة من قبل المستخدم.

قد تختلف المعاملات أيضًا عن الدوال من الناحية الدلالية. على سبيل المثال، لا تُقيّم عمليات الاختصار المنطقي الوسائط اللاحقة إلا إذا لم تكن الوسائط السابقة خاطئة.

الاختلافات عن الوظائف

بناء الجملة

تختلف العديد من المعاملات نحويًا عن الدوال المعرفة من قبل المستخدم. في معظم لغات البرمجة، تُكتب الدالة باستخدام صيغة البادئة مع مستوى أسبقية وترابط ثابتين، وغالبًا ما تتضمن أقواسًا إلزامية (مثل " Func(a)أو " (Func a)في لغة ليسب ). في المقابل، تُكتب العديد من المعاملات باستخدام صيغة الوسط، وتتضمن استخدامًا مختلفًا للفواصل مثل الأقواس.

بشكل عام، قد يكون المعامل بادئًا، أو وسطيًا، أو لاحقًا، أو مطابقًا ، أو محيطيًا، أو ثنائيًا، [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] ، ويعتمد بناء جملة التعبير الذي يتضمن معاملًا على عدد معاملاته ، وأسبقيته ، و(إن وُجد) ترابطيته . تدعم معظم لغات البرمجة المعاملات الثنائية وعددًا قليلًا من المعاملات الأحادية ، مع دعم بعضها لعدد أكبر من المعاملات، مثل المعامل ?: في لغة C، وهو معامل ثلاثي. توجد معاملات أحادية بادئة، مثل الطرح الأحادي ، ومعاملات أحادية لاحقة، مثل الزيادة اللاحقة ؛ والعمليات الثنائية وسطية، مثل أو . تتطلب العمليات الوسطية ذات العدد الأكبر من المعاملات رموزًا إضافية، مثل المعامل الثلاثي ?: في لغة C، والذي يُكتب على النحو التالي: - في الواقع، نظرًا لأن هذا هو المثال الشائع الوحيد، فإنه يُشار إليه غالبًا باسم المعامل الثلاثي. يمكن لعمليات البادئة واللاحقة دعم أي عدد من المعاملات المطلوبة، مثل .-xx++x + yx = y a ? b : c1 2 3 4 +

علم الدلالة

قد تختلف دلالات المعامل اختلافًا كبيرًا عن دلالات الدالة العادية. على سبيل المثال، تُقيّم عملية الجمع كما تُقيّم الدالة العادية. فمثلاً، x + yيمكن أن تكون عملية الجمع مكافئة للدالة add(x, y)من حيث تقييم الوسائط ثم تطبيق سلوك الدالة. مع ذلك، يختلف الإسنادa = b . فمثلاً، عند إعطاء قيمة للهدف ، aلا تُقيّم هذه القيمة، بل تُستبدل قيمتها بقيمة الهدف b. تعمل معاملات تحديد النطاق والوصول إلى العناصر (كما في ` resource` Foo::Barو` a.bresource` على التوالي، في حالة لغة C++ مثلاً ) على أسماء المعرفات، وليس على القيم.

في لغة C، على سبيل المثال، يمكن استخدام عامل فهرسة المصفوفات للقراءة والتخصيص. في المثال التالي، يقرأ عامل الزيادة قيمة عنصر من مصفوفة ثم يُسندها إلى قيمة العنصر.

++ a [ i ];

تتيح خاصية المعاملات في لغة C++ استخدام بنية سلسة من خلال دعم سلسلة من المعاملات التي تؤثر على وسيط واحد. على سبيل المثال:<<

cout << "Hello" << " " << "world!" << endl ;

متعدد الأشكال المخصص

توفر بعض اللغات عوامل تشغيل متعددة الأشكال مخصصة - أي أنها محملة بشكل زائد بطبيعتها. على سبيل المثال، في لغة جافا، يقوم عامل +التشغيل بجمع الأرقام أو دمج السلاسل النصية .

التخصيص

تدعم بعض لغات البرمجة خاصية التحميل الزائد المُعرّف من قِبل المستخدم (مثل C++ و Fortran ). يمكن تحميل عامل مُعرّف في اللغة بشكل زائد ليتصرف بشكل مختلف بناءً على نوع المُدخلات.

تُعرّف بعض لغات البرمجة (مثل C وC++ و PHP ) مجموعة ثابتة من المعاملات، بينما تسمح لغات أخرى (مثل Prolog وF# وOCaml وHaskell) بمعاملات يُعرّفها المستخدم. وتقتصر بعض لغات البرمجة على استخدام رموز المعاملات بأحرف خاصة مثل + أو : = ، بينما تسمح لغات أخرى باستخدام أسماء مثل ( مثل Pascal ) ، وحتى أسماء عشوائية (مثل Fortran حيث يُحاط اسم المعامل الذي يصل طوله إلى 31 حرفًا بنقطتين ) .div

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

إذا سمحت لغة ما بتعريف عوامل تشغيل جديدة، فقد تتضمن آليات القيام بذلك البرمجة الوصفية - تحديد عامل التشغيل بلغة منفصلة.

إكراه الفاعل

تقوم بعض لغات البرمجة بتحويل المعاملات ضمنيًا (أو ما يُعرف بالتحويل القسري ) لجعلها متوافقة. على سبيل المثال، في لغة بيرل ، تُحوّل القيمة النصية إلى 3.14 قبل إجراء عملية الجمع. علاوة على ذلك، تُعامل القيمة النصية كعدد عشري، لذا تكون النتيجة عددًا عشريًا حتى وإن كانت القيمة النصية عددًا صحيحًا. أما في جافا سكريبت، فتُحوّل القيمة النصية إلى 3.14، حيث تُحوّل القيمة النصية إلى سلسلة نصية ثم تُدمج مع المعامل الثاني.12 + "3.14"15.14"3.14"3.1412"123.14"12

بشكل عام، يجب أن يكون المبرمج على دراية بالقواعد المحددة المتعلقة بإجبار المعاملات لتجنب السلوك غير المتوقع وغير الصحيح.

أمثلة

المؤثرات الرياضية
عوامل بنية البرنامج
عوامل التشغيل الشرطية
عوامل التشغيل البارزة في لغتي C و C++

مشغلو المركبات

ميزات المشغل في لغات البرمجة

يوضح الجدول التالي خصائص المعامل في العديد من لغات البرمجة:

لغةالمؤثرات الرمزيةالمعاملات الأبجدية الرقمية
بادئة
أقحم
بوستفيكس
أسبقية
الترابط
التحميل الزائد
التحميل الزائد المحدد من قبل المستخدم
الرموز التي يحددها المستخدم
في لغة ALGOL 68، لكل عامل رمزي مكافئ أبجدي رقمي، وبعضها مكافئ غير ASCII+* ** * / % %* %× - + < <= >= > = /= & -:= +:= *:= /:= %:= %*:= +=: :=: :/=:

غير ASCII:¬ +× ⊥ ↑ ↓ ⌊ ⌈ × ÷ ÷× ÷* □ ≤ ≥ ≠ ∧ ∨ ×:= ÷:= ÷×:= ÷*:= %×:= :≠:

not abs arg bin entier leng level odd repr round shorten i shl shr up down lwb upb lt le ge gt eq ne and or over mod elem minusab plusab timesab divab overab modab plusto is isntنعمنعملانعم (معاملات البادئة لها الأولوية 10 دائمًا)المعاملات الوسطية ذات تجميع يساري، والمعاملات البادئة ذات تجميع يميني.نعمنعمنعم
APL+ - × ÷ ⌈ ⌊ * ⍟ | ! ○ ~ ∨ ∧ ⍱ ⍲ < ≤ = ≥ > ≠ . @ ≡ ≢ ⍴ , ⍪ ⍳ ↑ ↓ ? ⍒ ⍋ ⍉ ⌽ ⊖ ∊ ⊥ ⊤ ⍎ ⍕ ⌹ ⊂ ⊃ ∪ ∩ ⍷ ⌷ ∘ → ← / ⌿ \ ⍀ ¨ ⍣ & ⍨ ⌶ ⊆ ⊣ ⊢ ⍠ ⍤ ⌸ ⌺ ⍸(يتطلب بادئة ⎕)نعم (للدوال من الدرجة الأولى فقط)نعمنعم (للدوال ذات الرتبة العليا فقط)الدوال ذات الرتبة الأعلى تسبق الدوال ذات الرتبة الأولىالدوال ذات الرتبة العليا تكون تجميعية من اليسار، بينما الدوال ذات الرتبة الأولى تكون تجميعية من اليمين.نعمنعمنعم (للأحرف والأرقام فقط)
ب() [] ! ~ ++ -- + - * & / % << >> < <= > >= == != ^ | ?: = =+ =- =* =/ =% =& =^ =| =<< =>> === =|= =< => =<= =>=[ 8 ] [ 9 ]نعمنعمنعمنعمنعملالالا
ج() [] -> . ! ~ ++ -- + - * & / % << >> < <= > >= == != ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>=sizeofنعمنعمنعمنعمنعمنعملالا
لغة سي++(نفس الشيء بالنسبة لـ ج)(نفس الشيء بالنسبة لـ C+)typeidnewdeletethrowdecltypestatic_castdynamic castreinterpret_castconst_castنعمنعمنعمنعمنعمنعمنعملا
سي شارب(نفس الشيء بالنسبة لـ C+)?. ?[] ????=sizeof nameof new stackalloc await throw checked unchecked is as delegate default true falseرابط : from select where group...by group...by...into join...in...on...equals join...in...on...equals...into orderby orderby...descendingروزلين فقط:__makeref __refvalue __reftypeنعمنعمنعمنعمنعمنعمنعملا
جافا(نفس الشيء بالنسبة لـ ج)newthrowinstanceofنعمنعمنعمنعمنعمنعملالا
إيفل[] + - * / // = /= not and or implies "and then" "or else" نعمنعملانعمنعملانعمنعم
هاسكل+ - * / ^ ^^ ** == /= > < >= <= && || >>= >> $ $! . ++ !! :(وغيرها الكثير)(يجب وضع اسم الدالة بين علامتي اقتباس معكوسة)نعمنعملانعمنعمنعم، باستخدام فئات النوعنعم
mvBasic Databasic/Unibasic+ - * / ^ ** : = ! & [] += -= := # < > <= >= <> >< =< #> => #< AND OR NOT EQ NE LT GT LE GE MATCH ADDS() ANDS() CATS() DIVS() EQS() GES() GTS() IFS()نعمنعمنعمنعمنعمنعمنعملا
باسكال* / + - = < > <> <= >= :=notdivmodandor inنعمنعملانعمنعمنعملالا
بيرل-> ++ -- ** ! ~ \ + - . =~ !~ * / % < > <= >= == != <=> ~~ & | ^ &&|| ' ''// .. ... ?: = += -= *= , =>print sort chmod chdir rand and or not xor lt gt le ge eq ne cmp x نعمنعمنعمنعمنعمنعمنعملا
PHP[] ** ++ -- ~ @![10] * / % + - . << >> < <= > >= == != === !== <> <=> & ^ | && ||???: = += -= *= **= /= .= %= &= |= ^= <<= >>= clone new unset print echo isset instanceofandorxorنعمنعمنعمنعمنعملالالا
PL/I( ) -> + - * / ** > ¬> >= = ¬= <= < ¬< ¬ &|||نعمنعملانعمنعملالالا
مقدمة:- ?- ; , . =.. = \= < =< >= > == \== - + / *spy nospy not is modنعمنعمنعمنعمنعملالانعم
راكو++ -- ** ! ~ ~~ * / + - . < > <= >= == != <=> & | ^ &&|| //[ 11 ]print sort chmod chdir rand and or not xor lt gt le ge eq ne leg cmp x xxنعمنعمنعمنعمنعمنعمنعمنعم [ 12 ]
الصدأ() [] . ! + - * & ? / % << >> < <= > >= == != ^ | && || .. ..= = += -= *= /= %= &= ^= |= <<= >>=[ 13 ]&mut&raw const&raw mutas[ 13 ]نعمنعمنعمنعمنعمنعمنعملا
أحاديث قصيرة(حتى حرفين [ 14 ] )(تحتاج الرموز الأبجدية الرقمية إلى لاحقة نقطتين رأسيتين)لانعمنعملالانعمنعمنعم
سويفت(أي سلسلة رموز يونيكود باستثناء) .(بما في ذلك)! ~ + - * / % =+ =- =* =/ =% &+ &- &* =&+ =&- =&* && || << >> & | ^ == != < <= > >= ?? ... ..< is as as?نعمنعمنعمنعم (يُعرَّف بأنه ترتيب جزئي في مجموعات الأسبقية)نعم (معرّفة كجزء من مجموعات الأسبقية)نعمنعمنعم
فيجوال بيسك دوت نت() . ! ?() ?. ?! + - * / \ & << >> < <= > >= ^ <> = += -= *= /= \= &= ^= <<= >>=New Await Mod Like Is IsNot Not And AndAlso Or OrElse Xor If(...,...) If(...,...,...) GetXmlNamespace(...) GetType(...) NameOf(...) TypeOf...Is TypeOf...IsNot DirectCast(...,...) TryCast(...,...) رابط :From Aggregate...Into Select Distinct Where <Order By>...[Ascending|Descending] Take <Take While> Skip <Skip While> Let Group...By...Into Join...On <Group Join...On...Into>نعمنعمنعمنعمنعمنعمنعملا
زيج() [] {} . ! ~ + +% +| - -% -| * *% *| & / % << <<| >> < <= > >= == != ^ | ++ ** .* .? = += +%= +|= -= -%= -|= *= *%= *|= /= %= &= ^= |= <<= <<|= >>=[ 15 ]and or orelse catch[ 15 ]نعمنعمنعمنعمنعمنعملالا

انظر أيضاً

مراجع

  1. "نماذج إدخال المشغل - وثائق لغة Wolfram" . reference.wolfram.com .
  2. "دليل ماكسيما 5.42.0: 7. المشغلون" . maxima.sourceforge.net .
  3. "معاملات البادئة واللاحقة والمحيطة" . mythryl.org .
  4. "المعاملات" . doc.perl6.org .
  5. بريبافكينا، إيلينا ف.؛ رودارو، إيمانويل (2010). "تعقيد حالة عوامل البادئة واللاحقة والثنائية والوسطية في اللغات المنتظمة". تطورات في نظرية اللغة . سلسلة محاضرات في علوم الحاسوب. المجلد 6224. الصفحات 376-386 . doi : 10.1007/978-3-642-14455-4_34 . ISBN   978-3-642-14454-7.
  6. ^ "SWI-Prolog -- المرجع / 3" . www.swi-prolog.org .
  7. "العمليات المحددة" . إنتل . تم الاطلاع عليه بتاريخ 6 مايو 2025 .
  8. "مقدمة تعليمية للغة ب" . مؤرشف من الأصل بتاريخ 2017-04-03 . تم الاطلاع عليه بتاريخ 2024-08-03 .
  9. "دليل تومسون B" . www.bell-labs.com . مؤرشف من الأصل بتاريخ 17-09-2024 . تم الاطلاع عليه بتاريخ 04-02-2026 .
  10. "PHP: عوامل التحكم في الأخطاء - دليل المستخدم" . php.net .
  11. "المعاملات" . docs.perl6.org .
  12. "الدوال" . docs.perl6.org .
  13. 1 2 "تعبيرات المعاملات - مرجع Rust" . doc.rust-lang.org . تم الاسترجاع في 2026-02-04 .
  14. غولدبيرغ، أديل؛ روبسون، ديفيد (1983). سمول توك-80: اللغة وتطبيقها (ملف PDF) . ريدينغ، ماساتشوستس: أديسون-ويسلي. ISBN 0-201-11371-6.
  15. 1 2 "التوثيق - لغة برمجة Zig" . ziglang.org . تم الاطلاع عليه بتاريخ 2026-02-05 .