قادم من

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

يتمثل أحد الفروق الرئيسية بين الأمر goto والأمر COMEFROM في أن goto يعتمد على البنية المحلية للبرنامج، بينما يعتمد COMEFROM على البنية العامة. ينقل الأمر goto التحكم عند وصوله إلى تلك النقطة، بينما يتطلب COMEFROM من المعالج (أي المفسر) البحث عن أوامر COMEFROM، بحيث يتمكن المعالج من الانتقال إلى تلك النقطة عند وصول التحكم إليها. يصعب فهم المنطق الناتج، إذ لا يوجد ما يشير قرب نقطة الانتقال إلى أن التحكم سينتقل بالفعل. لذا، يجب دراسة البرنامج بأكمله لمعرفة ما إذا كانت أي من أوامر COMEFROM تشير إلى تلك النقطة.

تختلف دلالات عبارة COMEFROM باختلاف لغات البرمجة . ففي بعض اللغات، يحدث الانتقال قبل تنفيذ العبارة عند النقطة المحددة، بينما يحدث في لغات أخرى بعد ذلك. وبحسب اللغة، قد تكون عبارات COMEFROM المتعددة التي تشير إلى النقطة نفسها غير صالحة، أو غير حتمية، أو تُنفذ بترتيب معين، أو تُؤدي إلى معالجة متوازية أو متزامنة، كما هو الحال في Threaded Intercal .

ظهرت عبارة COMEFROM لأول مرة في قوائم تعليمات لغة التجميع الفكاهية (تحت اسم 'CMFRM'). وقد تم شرحها بالتفصيل في مقال نُشر في مجلة Datamation بقلم ر. لورانس كلارك عام 1973، [ 1 ] ردًا على رسالة إدسكار ديكسترا بعنوان "عبارة Go To تُعتبر ضارة " . تم تطبيق COMEFROM لاحقًا في لغة البرمجة INTERCAL، وهي نسخة C-INTERCAL من لغة البرمجة المتخصصة INTERCAL، إلى جانب عبارة 'computed COMEFROM' الأكثر غموضًا. كما وُجدت مقترحات بلغة فورتران [ 2 ] لعبارة 'assigned COME FROM' وعبارة 'DONT' (لتكملة حلقة 'DO' الموجودة).

أمثلة

أساسي

الكود التالي خاص بلهجة BASICCOMEFROM افتراضية . يطلب اسمًا، ثم يرحب بالمستخدم بالاسم، ويكرر ذلك. السطر 40 هو نقطة الانتقال المحددة بواسطة COMEFROM، لذا عندما يصل التحكم إلى 40، ينتقل إلى 10.

10 COMEFROM 40 20 INPUT "ما اسمك؟" ; A$ 30 PRINT "مرحباً، " ; A$ 40 REM

بايثون

في الأول من أبريل عام 2004، نشر ريتشي هيندل تطبيقًا لدالة COMEFROM بلغة بايثون يستخدم أدوات تصحيح الأخطاء. ورغم أنه نُشر في يوم كذبة أبريل ولم يكن مُصممًا للاستخدام الجاد، إلا أن صيغته صحيحة ويعمل التطبيق بكفاءة تامة. [ 3 ]

يستخدم الكود أدناه، وهو قابل للتنفيذ بالفعل، تطبيق بايثون هذا.

من goto استورد comefrom ، و label comefrom . كررname : str = raw_input ( " ما اسمك؟" ) if name : print ( f " مرحباً، { name } " ) label.repeat print ( "مع السلامة!" )

روبي

هذا تطبيق بلغة روبي لعبارة Intercal COME FROM.

$come_from_labels = {}دالة التسمية ( l ) إذا كان $come_from_labels [ l ] $come_from_labels [ l ] .call نهاية نهايةدالة come_from ( l ) callcc do | block | $come_from_labels [ l ] = block end end

نظام التشغيل OS/360 فورتران جي

في حزمة تصحيح أخطاء مترجم لغة فورتران G لنظام التشغيل OS/360، ATتعمل العبارة مثل COMEFROM من حيث أنها تسلم تدفق التحكم إلى كتلة التصحيح - على غرار نقطة التوقف . [ 4 ]

في الكود التالي، يتم فحص قيم SOLONو GFARو EWELLكما كانت عند اكتمال العبارة 10. ATتشير العبارة إلى العبارة 11.

عدد صحيح SOLON ، GFAR ، EWELL ... 10 SOLON = GFAR * جذر ( عدد عشري ( EWELL ) ) 11 إذا ( SOLON ) 40 ، 50 ، 60 ... DEBUG UNIT ( 3 ) AT 11 عرض GFAR ، SOLON ، EWELL نهاية

في الكود التالي، يتم عرض قيم STOCKعند مواجهة العبارة 35.

الأبعاد: المخزون ( 1000 ) ، المخرجات ( 1000 ) ... كرر 30، I = 1 ، 1000، 25 المخزون ( I ) = المخزون ( I ) - المخرجات ( I 30 استمر ، 35 A = B + C ... تصحيح الأخطاء ، الوحدة ( 3 ) عند 35 ، عرض المخزون ، النهاية

في الكود التالي، يبدأ التتبع عند العبارة 10، وعند العبارة 20، ويتوقف التتبع أثناء تنفيذ الحلقة، ثم يستأنف بعد انتهائها. ويتوقف التتبع قبل تنفيذ العبارة 30 مباشرةً.

10 أ = 1.5 12 ل = 1 15 ب = أ + 1.5 20 كرر 22 ي = 1 ، 5 ... 22 استمر 25 ج = ب + 3.16 30 د = ج / 2 توقف ... تصحيح الوحدة ( 3 تتبع ج تصحيح حزمة رقم 1 عند 10 تتبع قيد التشغيل ج تصحيح حزمة رقم 2 عند 20 تتبع متوقف كرر 35 ي = 1 ، 3 ... 35 استمر تتبع قيد التشغيل ج تصحيح حزمة رقم 3 عند 30 تتبع متوقف نهاية

انظر أيضاً

مراجع

  1. كلارك، لورانس ، "لا نعرف إلى أين نذهب إن لم نعرف من أين أتينا. هذا الابتكار اللغوي يرقى إلى مستوى كل التوقعات." ، داتاماشن (مقال)، مؤرشف من الأصل بتاريخ 16 يوليو 2018 ، تم الاطلاع عليه بتاريخ 24 سبتمبر 2004.
  2. موديل، هوارد؛ سلاتر، ويليام (أبريل 1978). "البرمجة المهيكلة تُعتبر ضارة" . إشعارات ACM SIGPLAN . 13 (4): 76-79 . doi : 10.1145/953411.953418 . تاريخ الاسترجاع: 18 يوليو 2014 .
  3. هيندل، ريتشي (1 أبريل 2004)، goto for Python ، إنتريان.
  4. لغة فورتران 4 لنظامي IBM System/360 و System/370، GC28-6515-10، مايو 1974
  5. إف إكس ريد، حول الدلالات الرسمية لعبارة COMEFROM. حقائق FACS ، العدد 2006-1 ، الصفحات 18-20، مارس 2006.
  • صفحة معلومات COMEFROM
  • مقال داتاماشن
  • قائمة تعليمات برنامج تجميع النكات، بما في ذلك CMFRM
  • يأتي ذلك من دعم لغة بيرل