مهمة (علوم الحاسوب)

في برمجة الحاسوب ، تُستخدم عبارة الإسناد لتعيين أو إعادة تعيين القيمة المخزنة في موقع (مواقع) التخزين المشار إليه باسم المتغير ؛ أي أنها تنسخ قيمة إلى المتغير. في معظم لغات البرمجة الإجرائية ، تُعد عبارة الإسناد (أو التعبير ) بنية أساسية.

اليوم، يُعدّ الرمز الأكثر شيوعًا لهذه العملية هو [ 1 ] (الذي ظهر في الأصل في Superplan بين عامي 1949 و1951، وانتشر بفضل Fortran عام 1957 و C ). أما الرمز الثاني الأكثر شيوعًا فهو [ 1] (الذي ظهر في الأصل في ALGOL عام 1958، وانتشر بفضل Pascal ). [ 2 ] وهناك العديد من الرموز الأخرى المستخدمة أيضًا. في بعض اللغات، يُعتبر الرمز المستخدم عاملًا ( أي أن عبارة الإسناد ككل تُرجع قيمة). بينما تُعرّف لغات أخرى الإسناد كعبارة (أي أنه لا يمكن استخدامه في تعبير).x = exprx := expr

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

علم الدلالة

عملية الإسناد هي عملية في البرمجة الإجرائية يتم فيها ربط قيم مختلفة باسم متغير معين مع مرور الوقت. [ 1 ] يعمل البرنامج، في هذا النموذج، عن طريق تغيير حالته باستخدام عبارات إسناد متتالية. [ 2 ] [ 3 ] تعتمد أساسيات لغات البرمجة الإجرائية على الإسناد لإجراء التكرار . [ 4 ] على أدنى مستوى، يتم تنفيذ الإسناد باستخدام عمليات الآلة مثل MOVE`or` STORE. [ 2 ] [ 4 ]

المتغيرات عبارة عن حاويات للقيم. من الممكن وضع قيمة في متغير ثم استبدالها بقيمة جديدة. تُعدّل عملية الإسناد الحالة الحالية للبرنامج قيد التنفيذ. [ 3 ] وبالتالي، يعتمد الإسناد على مفهوم المتغيرات . في عملية الإسناد:

  • يتم تقييم ذلك expressionفي الوضع الحالي للبرنامج.
  • يتم variableتعيين القيمة المحسوبة، لتحل محل القيمة السابقة لهذا المتغير.

مثال: بافتراض أن aالمتغير عددي، فإن عملية الإسناد تعني أن محتوى المتغير يتضاعف بعد تنفيذ العبارة.a := 2*aa

مثال على جزء من كود لغة C :

int x = 10 ; float y ; x = 23 ; y = 32.4f ;

في هذا المثال، تم تعريف المتغير xأولاً كعدد صحيح (int)، ثم أُسندت إليه القيمة 10. لاحظ أن التعريف والإسناد يتمان في نفس العبارة. في السطر الثاني، yتم تعريف المتغير بدون إسناد. في السطر الثالث، xأُعيد إسناد القيمة 23 إليه. وأخيرًا، yأُسندت القيمة 32.4 إليه.

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

مهمة واحدة

أي عملية إسناد تُغيّر قيمة موجودة (مثلاً ) غير مسموحة في لغات البرمجة الوظيفية البحتة . [ 4 ] في البرمجة الوظيفية ، يُفضّل استخدام الإسناد الفردي، المعروف باسم التهيئة ، بدلاً من الإسناد المُنفرد . يُعدّ الإسناد الفردي مثالاً على ربط الأسماء ، ويختلف عن الإسناد الموصوف في هذه المقالة في أنه لا يُمكن إجراؤه إلا مرة واحدة، عادةً عند إنشاء المتغير؛ ولا يُسمح بإعادة إسناده لاحقاً.x := x + 1

لا يُحدث تقييم تعبير ما أي أثر جانبي إذا لم يُغير حالةً قابلةً للملاحظة في الآلة، [ 5 ] باستثناء إنتاج النتيجة، ويُنتج دائمًا القيمة نفسها لنفس المُدخل. [ 4 ] قد يُؤدي التخصيص الإجرائي إلى آثار جانبية عند إتلاف القيمة القديمة وجعلها غير متاحة أثناء استبدالها بقيمة جديدة، [ 6 ] ولذلك يُشار إليه بالتخصيص المُدمِّر في لغة ليسب والبرمجة الوظيفية ، على غرار التحديث المُدمِّر .

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

تُتيح لغات البرمجة الوظيفية غير النقية كلاً من التعيين الأحادي والتعيين الكامل (مع أن التعيين الكامل يُستخدم عادةً بشكل أقل تكرارًا من لغات البرمجة الإجرائية). على سبيل المثال، في لغة Scheme، يُمكن استخدام كل من التعيين الأحادي (باستخدام `<sup>1</sup> `) letوالتعيين الكامل (باستخدام `<sup>2</sup> set!`) على جميع المتغيرات، كما تُوفر أدوات أولية مُخصصة للتحديث المُتلف داخل القوائم والمتجهات والسلاسل النصية، إلخ. أما في لغة OCaml، فيُسمح فقط بالتعيين الأحادي للمتغيرات، عبر الصيغة `<sup>1</sup>`؛ ومع ذلك، يُمكن استخدام التحديث المُتلف على عناصر المصفوفات والسلاسل النصية باستخدام عامل منفصل، وكذلك على حقول السجلات والكائنات التي تم تعريفها صراحةً على أنها قابلة للتغيير (أي قابلة للتعديل بعد تعريفها الأولي) من قِبل المبرمج.let name = value<-

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

قيمة المهمة

في بعض لغات البرمجة، تُرجع عبارة الإسناد قيمة، بينما في لغات أخرى لا تفعل ذلك.

في معظم لغات البرمجة التعبيرية (مثل لغة C )، تُعيد عبارة الإسناد القيمة المُسندة، مما يسمح باستخدام تعابير مثل `$` x = y = a، حيث تُعيد عبارة الإسناد y = aقيمة `$` a، والتي تُسند بدورها إلى `$ x`. في عبارة مثل `$` ، تُستخدم القيمة المُعادة من دالة للتحكم في حلقة تكرارية مع إسناد نفس القيمة إلى متغير.while((ch=getchar())!=EOF){}

في لغات البرمجة الأخرى، مثل Scheme على سبيل المثال، تكون القيمة المرجعة لعملية الإسناد غير محددة، وتكون هذه الاصطلاحات غير صالحة.

في لغة هاسكل ، [ 8 ] لا يوجد إسناد للمتغيرات؛ لكن العمليات المشابهة للإسناد (مثل إسناد قيمة إلى حقل في مصفوفة أو حقل في بنية بيانات قابلة للتغيير) عادةً ما تُقيّم إلى النوع الأحادي ، والذي يُرمز له بـ (). هذا النوع له قيمة واحدة فقط، وبالتالي لا يحتوي على أي معلومات. وهو عادةً نوع التعبير الذي يُقيّم فقط لآثاره الجانبية.

أشكال مختلفة من التعيين

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

مهمة مُعززة

إن الحالة التي تعتمد فيها القيمة المُسندة على قيمة سابقة شائعة جدًا لدرجة أن العديد من لغات البرمجة الإجرائية، وأبرزها لغة C ومعظم اللغات المشتقة منها، توفر عوامل خاصة تُسمى التعيين المُعزز ، مثل *=، وبالتالي a = 2*aيمكن كتابتها على النحو التالي a *= 2: . [ 3 ]a بالإضافة إلى التسهيلات النحوية، يُساعد هذا في مهمة المُترجم من خلال توضيح إمكانية تعديل المتغير في مكانه .

التعيين المتسلسل

w = x = y = zتُسمى عبارة مثل هذه "تعيينًا متسلسلًا"z حيث تُسند قيمة المتغير إلى عدة متغيرات w, x,و y. تُستخدم التعيينات المتسلسلة غالبًا لتهيئة عدة متغيرات، كما في

a = b = c = d = f = 0

لا تدعم جميع لغات البرمجة التعيين المتسلسل. التعيين المتسلسل هو عبارة عن سلسلة من عمليات التعيين، لكن استراتيجية التقييم تختلف بين اللغات. في التعيينات المتسلسلة البسيطة، مثل تهيئة عدة متغيرات، لا تؤثر استراتيجية التقييم، ولكن إذا كانت القيم المستهدفة (قيم l) في عملية التعيين مرتبطة بطريقة ما، فإن استراتيجية التقييم تؤثر على النتيجة.

في بعض لغات البرمجة ( مثل لغة C )، تُدعم عمليات الإسناد المتسلسلة لأن عمليات الإسناد عبارة عن تعابير، ولها قيم. في هذه الحالة، يمكن تنفيذ الإسناد المتسلسل من خلال استخدام إسناد ترابطي من اليمين ، حيث تتم عمليات الإسناد من اليمين إلى اليسار. على سبيل المثال، i = arr[i] = f()يُكافئ arr[i] = f(); i = arr[i]. في لغة C++، تتوفر هذه العمليات أيضًا لقيم أنواع الفئات من خلال تحديد نوع الإرجاع المناسب لمعامل الإسناد.

في لغة بايثون ، لا تُعتبر عبارات الإسناد تعبيرات، وبالتالي لا تحمل قيمة. بدلاً من ذلك، تُمثل عبارات الإسناد المتسلسلة سلسلة من العبارات ذات أهداف متعددة لتعبير واحد. تُنفذ عبارات الإسناد من اليسار إلى اليمين، بحيث i = arr[i] = f()تُقيّم العبارة f()، ثم تُسند النتيجة إلى الهدف الأيسر، iثم تُسند النتيجة نفسها إلى الهدف التالي، arr[i]باستخدام القيمة الجديدة لـ i. [ 9 ] وهذا يُعادل تقريبًا ، على tmp = f(); i = tmp; arr[i] = tmpالرغم من عدم إنشاء متغير فعلي للقيمة المؤقتة.

مهمة متوازية

تسمح بعض لغات البرمجة، مثل APL و Common Lisp و [ 10 ] Go و [ 11 ] JavaScript (منذ الإصدار 1.7) [ 12 ] و Julia و PHP و Maple و Lua و occam 2 و [ 13 ] Perl و [ 14 ] Python و [ 15 ] REBOL و Ruby و [ 16 ] و PowerShell ، بتعيين عدة متغيرات بالتوازي، باستخدام صيغة مثل:

أ، ب := 0، ​​1

والتي تُسند في آنٍ واحد القيمة 0 إلى المتغير aو1 إلى المتغير b. يُعرف هذا غالبًا باسم الإسناد المتوازي ؛ وقد طُرح في لغة CPL عام 1963 تحت اسم الإسناد المتزامن ، [ 17 ] ويُطلق عليه أحيانًا اسم الإسناد المتعدد ، مع أن هذا المصطلح قد يُسبب التباسًا عند استخدامه مع "الإسناد الفردي"، إذ إنهما ليسا متضادين. إذا كان الجانب الأيمن من الإسناد متغيرًا واحدًا (مثل مصفوفة أو بنية)، تُسمى هذه الخاصية فك التغليف [ 18 ] أو إسناد التفكيك : [ 19 ]

var list := {0, 1} أ، ب := قائمة

سيتم فك القائمة بحيث يتم تعيين القيمة 0 لـ aو1 لـ b. علاوة على ذلك،

أ، ب := ب، أ

يُبدّل هذا الكود قيم المتغيرين `x` aو`y` b. في اللغات التي لا تدعم التعيين المتوازي، يجب كتابة الكود باستخدام متغير مؤقت.

var t := a أ := ب ب := ت

لأن يترك كلاً من و بالقيمة الأصلية لـ .a := b; b := aabb

تجمع بعض اللغات، مثل Go و F# و Python ، بين التعيين المتوازي والصفوف وفك الصفوف التلقائي للسماح بقيم إرجاع متعددة من دالة واحدة، كما هو الحال في مثال Python هذا.

def f () -> tuple [ int , int ]: return 1 , 2a : int b : int a , b = f ()

بينما تتطلب لغات أخرى، مثل C# و Rust ، الموضحة هنا، إنشاء وتفكيك المجموعات بشكل صريح باستخدام الأقواس:

// صيغة صحيحة في لغة C# أو Rust ( a , b ) = ( b , a );
// في لغة C#، تُرجع الدالة ` f () ` قيمة من نوع tuple، حيث تُعيد سلسلة نصية وعددًا صحيحًا. ثم تُعيد الدالة `f()` القيمة " foo" و 1 . بعد ذلك، تُخزّن الدالة ` f ( )` القيمة في المتغير ` a` والمتغير `b`.
// دالة إرجاع مجموعة في لغة Rust let f : fn () -> ( & str , i32 ) = || ( "foo" , 1 ); let ( a , b ): ( & str , i32 ) = f ();

يُوفر هذا بديلاً لاستخدام مُعاملات الإخراج لإرجاع قيم مُتعددة من دالة. يعود تاريخ هذا إلى CLU (1974)، وقد ساهم CLU في نشر التخصيص المتوازي بشكل عام.

تسمح لغة C# أيضًا بتعيين التفكيك المعمم مع تحديد التنفيذ بواسطة التعبير الموجود على الجانب الأيمن، حيث يبحث المترجم عن مثيل مناسب أو طريقة امتدادDeconstruct في التعبير، والتي يجب أن تحتوي على معلمات إخراج للمتغيرات التي يتم تعيينها. [ 20 ] على سبيل المثال، إحدى هذه الطرق التي من شأنها أن تعطي الفئة التي تظهر فيها نفس سلوك القيمة المرجعة f()أعلاه هي

void Deconstruct ( out string a , out int b ) { a = "foo" ; b = 1 ; }

في لغتي C و C++، يُشابه عامل الفاصلة (.)a = 1, b = 2 التعيين المتوازي في السماح بإجراء عمليات تعيين متعددة ضمن عبارة واحدة، وذلك بكتابة a, b = 1, 2. يُستخدم هذا بشكل أساسي في حلقات for ، ويُستبدل بالتعيين المتوازي في لغات أخرى مثل Go. [ 21 ] مع ذلك، لا يضمن كود C++ المذكور أعلاه التزامن التام، حيث a = b, b = a+1يتم تقييم الجانب الأيمن من الكود التالي بعد الجانب الأيسر. في لغات مثل Python، a, b = b, a+1سيتم تعيين المتغيرين بشكل متزامن، باستخدام القيمة الأولية لـ a لحساب قيمة b الجديدة.

التخصيص مقابل المساواة

كثيرًا ما يُنتقد استخدام علامة المساواة =كعامل إسناد، نظرًا لتعارضها مع استخدامها للمقارنة. وينتج عن ذلك ارتباكٌ لدى المبتدئين في كتابة البرامج، وحتى لدى المبرمجين ذوي الخبرة عند قراءة البرامج. يعود استخدام علامة المساواة للإسناد إلى لغة هاينز روتشاوزر ، سوبربلان ، التي صُممت بين عامي 1949 و1951، وازدادت شعبيتها بشكل خاص مع لغة فورتران.

من الأمثلة الشهيرة على الأفكار السيئة استخدام علامة المساواة للدلالة على الإسناد. يعود هذا الاستخدام إلى لغة فورتران عام ١٩٥٧ [ أ ] ، وقد قلّده العديد من مصممي اللغات دون تفكير. لماذا يُعدّ هذا استخدامًا سيئًا؟ لأنه يُخالف تقليدًا راسخًا منذ قرن من الزمان، وهو استخدام علامة المساواة للدلالة على المقارنة، أي على شرط يكون إما صحيحًا أو خاطئًا. لكن فورتران جعلتها تعني الإسناد، أي فرض المساواة. في هذه الحالة، يكون المعاملان غير متساويين: يجب جعل المعامل الأيسر (متغير) مساويًا للمعامل الأيمن (تعبير). فـ x = y لا تعني نفس معنى y = x. [ ٢٢ ]

نيكلاوس ويرث ، أفكار جيدة، عبر المرآة

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

في بعض لغات البرمجة، مثل لغة BASIC ، تُستخدم علامة المساواة (= "=") لكلٍّ من عامل الإسناد وعامل المساواة العلائقي، ويُحدد السياق أيّهما المقصود. بينما تستخدم لغات أخرى رموزًا مختلفة لهذين العاملين. [ 23 ] على سبيل المثال:

  • في لغتي ALGOL و Pascal ، يكون عامل التعيين عبارة عن نقطتين رأسيتين وعلامة يساوي ( ":=") بينما يكون عامل المساواة عبارة عن علامة يساوي واحدة ( "=").
  • في لغة C ، يكون عامل التخصيص عبارة عن علامة يساوي واحدة ( "=") بينما يكون عامل المساواة عبارة عن زوج من علامات يساوي ( "==").
  • في لغة R ، يكون عامل التعيين بشكل عام <-، كما في ، ولكن يمكن أيضًا استخدام علامة يساوي واحدة في سياقات معينة.x <- value

قد يؤدي التشابه بين الرمزين إلى أخطاء إذا نسي المبرمج الصيغة المناسبة ( (" =", " ==", " :=")، أو أخطأ في كتابة " =" بدلًا من " ==". هذه مشكلة برمجية شائعة في لغات مثل C (بما في ذلك محاولة شهيرة لاختراق نواة لينكس)، [ 24 ] حيث يُعيد عامل الإسناد القيمة المُسندة إليه (بنفس طريقة إعادة الدالة للقيمة)، ويمكن تضمينه بشكل صحيح داخل التعبيرات. ifعلى سبيل المثال، إذا كان القصد هو مقارنة قيمتين في عبارة، فمن المرجح أن يُعيد الإسناد قيمة تُفسَّر على أنها منطقية صحيحة، وفي هذه الحالة thenسيتم تنفيذ العبارة، مما يؤدي إلى سلوك غير متوقع للبرنامج. يمكن لبعض معالجات اللغات (مثل gcc ) اكتشاف مثل هذه الحالات، وتنبيه المبرمج إلى الخطأ المحتمل. [ 25 ] [ 26 ]

الترميز

أكثر طريقتين شيوعًا لتمثيل عملية النسخ هما علامة المساواة ( ==) وعلامة المساواة مع النقطتين الرأسيتين (= ). قد تشير كلتا الطريقتين دلاليًا إما إلى عبارة:= إسناد أو إلى عامل إسناد (الذي له قيمة أيضًا)، وذلك حسب اللغة و/أو الاستخدام.

variable = expressionFortran و PL/I و C ( واللغات المنحدرة منها مثل C++ و Java وما إلى ذلك) و Bourne shell و Python و Go (التعيين للمتغيرات المعلنة مسبقًا) و R و PowerShell و Nim وما إلى ذلك.
variable := expressionALGOL (ومشتقاتها)، Simula ، CPL ، BCPL ، Pascal [ 27 ] (ومن نسلها مثل ModulaMary ، PL/M ، Ada ، Smalltalk ، Eiffel ، [ 28 ] [ 29 ] Oberon ، Dylan ، [ 30 ] Python (تعبير إسناد)، [ 31 ] Go (اختصار لإعلان وتعريف متغير)، [ 32 ] Io ، AMPL ، ML (إسناد قيمة مرجعية)، [ 33 ] AutoHotkey إلخ.

وتشمل الاحتمالات الأخرى سهمًا إلى اليسار أو كلمة مفتاحية، على الرغم من وجود متغيرات أخرى أقل شيوعًا:

variable << expressionماجيك
variable <- expressionF# ، OCaml ، R ، S
variable <<- expressionR
assign("variable", expression)R
variableexpressionلغة APL ، [ 34 ] لغة Smalltalk ، برمجة Atari 2600 BASIC
variable =: expressionج
LET variable = expressionأساسي
let variable := expressionXQuery
set variable to expressionأبل سكريبت
set variable = expressionسي شل
Set-Variable variable(expression)باور شيل
variable : expressionماكسيما، ماكسيما ، ك
variable: expressionريبول
var variableexpressionلغة برمجة mIRC
reference-variable :- reference-expressionمحاكاة

يتم تمثيل عمليات إسناد الرموز الرياضية الزائفة عمومًا بسهم متجه لليسار.

تضع بعض المنصات التعبير على اليسار والمتغير على اليمين:

MOVE expression TO variableكوبول
expressionvariableتي آي-بيسك ، كاسيو بيسك
expression -> variablePOP-2 ، بيتا ، R
put expression into variableهايبر توك ، لايف كود
PUT expression IN variableABC

تستخدم بعض اللغات الموجهة للتعبيرات، مثل Lisp [ 35 ] [ 36 ] وTcl، بشكل موحد صيغة البادئة (أو اللاحقة) لجميع العبارات، بما في ذلك التعيين.

(setf variableexpression)لغة الشفرة الشائعة
(set! variableexpression)المخطط [ 37 ] [ 38 ] [ 39 ]
set variableexpressionتي سي إل
expressionvariable !إلى الأمام

انظر أيضاً

ملحوظات

  1. استخدام هذا=المصطلح يسبق لغة فورتران، على الرغم من أن فورتران هي التي ساهمت في انتشاره.

مراجع

  1. 1 2 "2cs24 Declarative" . www.csc.liv.ac.uk. مؤرشف من الأصل بتاريخ 24 أبريل 2006. تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  2. 1 2 3 "البرمجة الإجرائية" . uah.edu . مؤرشف من الأصل في 4 مارس 2016. تم الاطلاع عليه في 20 أبريل 2018 .
  3. 1 2 3 روديجر-ماركوس فلايج (2008). برمجة المعلوماتية الحيوية بلغة بايثون: دورة عملية للمبتدئين . وايلي-في سي إتش. الصفحات 98-99 . ISBN  978-3-527-32094-3تم الاطلاع عليه بتاريخ 25 ديسمبر 2010 .
  4. ١ ٢ ٣ ٤ ٥ عبور الحدود: استكشف البرمجة الوظيفية باستخدام هاسكل. مؤرشف في ١٩ نوفمبر ٢٠١٠ على موقع Wayback Machine ، بقلم بروس تيت
  5. ميتشل، جون سي. (2003). مفاهيم في لغات البرمجة . مطبعة جامعة كامبريدج. ص 23. ISBN  978-0-521-78098-8تم الاطلاع عليه بتاريخ 3 يناير 2011 .
  6. "لغات البرمجة الإجرائية (IPL)" (ملف PDF) . gwu.edu . مؤرشف من الأصل (ملف PDF) بتاريخ 16 يوليو 2011. تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  7. جون سي. ميتشل (2003). مفاهيم في لغات البرمجة . مطبعة جامعة كامبريدج. الصفحات 81-82 . ISBN  978-0-521-78098-8تم الاطلاع عليه بتاريخ 3 يناير 2011 .
  8. هوداك، بول (2000). مدرسة هاسكل للتعبير: تعلم البرمجة الوظيفية من خلال الوسائط المتعددة . كامبريدج: مطبعة جامعة كامبريدج. ISBN 0-521-64408-9.
  9. "7. عبارات بسيطة — وثائق بايثون 3.6.5" . docs.python.org . تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  10. "CLHS: Macro SETF, PSETF" . Common Lisp Hyperspec . LispWorks . تم الاطلاع عليه بتاريخ 23 أبريل 2019 .
  11. مواصفات لغة البرمجة Go: التعيينات
  12. فيتزجيرالد، نيك؛ أوريندورف، جيسون. "ES6 بالتفصيل: التفكيك" . موزيلا هاكس . تم الاسترجاع في 3 ديسمبر 2025 .
  13. INMOS Limited، محرر. (1988). دليل مرجعي لأوكام 2. نيو جيرسي: برنتيس هول. ISBN 0-13-629312-3.
  14. وول، لاري ؛ كريستيانسن، توم؛ شوارتز، راندال سي. (1996). لغة برمجة بيرل ( الطبعة الثانية). كامبريدج: أورايلي. ISBN  1-56592-149-6.
  15. لوتز، مارك (2001). لغة برمجة بايثون ( الطبعة الثانية). سيباستوبول: أورايلي. ISBN  0-596-00085-5.
  16. توماس، ديفيد؛ هانت، أندرو (2001). برمجة روبي: دليل المبرمج العملي . أبر سادل ريفر: أديسون ويسلي. ISBN 0-201-71089-7.
  17. دي دبليو بارون وآخرون ، "السمات الرئيسية للغة CPL"، مجلة الكمبيوتر 6 :2:140 (1963). النص الكامل (اشتراك)
  18. "PEP 3132 -- فك التغليف الموسع للتكرارات" . legacy.python.org . تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  19. "تفكيك عملية التخصيص" . وثائق MDN على الويب . تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  20. "تفكيك الصفوف وأنواع أخرى" . مستندات مايكروسوفت . مايكروسوفت . تم الاطلاع عليه بتاريخ 29 أغسطس 2019 .
  21. لغة Go الفعالة : بالنسبة لـ "أخيرًا، لا تحتوي لغة Go على عامل الفاصلة، و++ و-- عبارة عن عبارات وليست تعبيرات. لذا، إذا كنت ترغب في تشغيل متغيرات متعددة في حلقة for، فيجب عليك استخدام التعيين المتوازي (على الرغم من أن ذلك يستبعد ++ و--)."
  22. نيكلاوس ويرث. "أفكار جيدة، من خلال المرآة" . CiteSeerX 10.1.1.88.8309 . 
  23. "لغة برمجة C++. الأساسيات" . ntu.edu.sg. 2013-06-01 . تم الاطلاع عليه بتاريخ 2024-06-21 .
  24. كوربيت (6 نوفمبر 2003). "محاولة لاختراق نواة النظام" . lwn.net . تم الاطلاع عليه بتاريخ 21 يونيو 2024 .
  25. "خيارات المحلل الثابت (باستخدام مجموعة مترجمات جنو (GCC))" . gcc.gnu.org . تم الاطلاع عليه بتاريخ 21-06-2024 .
  26. ديتيل، بول؛ ديتيل، هارفي (25-10-2022). "عبارات التحكم في لغة C++، الجزء 2" . Domyassignments . تم الاسترجاع في 21-06-2024 .
  27. مور، لوري (1980). أسس البرمجة باستخدام باسكال . نيويورك: جون وايلي وأولاده. ISBN 0-470-26939-1.
  28. ماير، برتراند (1992). إيفل اللغة . هيميل هيمبستيد: برنتيس هول إنترناشونال (المملكة المتحدة). ISBN 0-13-247925-7.
  29. وينر، ريتشارد (1996). مقدمة كائنية التوجه في علوم الحاسوب باستخدام لغة إيفل . أبر سادل ريفر، نيو جيرسي: برنتيس هول. ISBN 0-13-183872-5.
  30. فينبرغ، نيل؛ كين، سونيا إي؛ ماثيوز، روبرت أو؛ ويذينغتون، بي. تاكر (1997). برمجة ديلان . ماساتشوستس: أديسون ويسلي. ISBN 0-201-47976-1.
  31. "PEP 572 تعابير الإسناد" . python.org . 28 فبراير 2018. تم الاطلاع عليه في 4 مارس 2020 .
  32. "مواصفات لغة برمجة Go - لغة برمجة Go" . golang.org . تم الاطلاع عليه بتاريخ 20 أبريل 2018 .
  33. أولمان، جيفري د. (1998). عناصر برمجة ML: إصدار ML97 . إنجلوود كليفس، نيو جيرسي: برنتيس هول. ISBN 0-13-790387-1.
  34. إيفرسون، كينيث إي. (1962). لغة برمجة . جون وايلي وأولاده. ISBN 0-471-43014-5أُرشف من المصدر الأصلي بتاريخ 4 يونيو 2009. تم الاطلاع عليه بتاريخ 9 مايو 2010 .{{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة )
  35. غراهام، بول (1996). لغة ANSI Common Lisp . نيو جيرسي: برنتيس هول. ISBN 0-13-370875-6.
  36. ستيل، جاي ل. (1990). لغة ليسب الشائعة: اللغة . ليكسينغتون: دار النشر الرقمية. ISBN 1-55558-041-6.
  37. ديبفيج، ر. كينت (1996). لغة برمجة سكيم: ANSI Scheme . نيو جيرسي: برنتيس هول. ISBN 0-13-454646-6.
  38. سميث، جيري د. (1988). مقدمة إلى لغة سكيم . نيوجيرسي: برنتيس هول. ISBN 0-13-496712-7.
  39. أبيلسون، هارولد؛ سوسمان، جيرالد جاي؛ سوسمان، جولي (1996). بنية وتفسير برامج الحاسوب . نيوجيرسي: ماكجرو هيل. ISBN 0-07-000484-6.