التصنيف (علوم الحاسوب)

في لغات البرمجة ، يُعدّ الوسم سلسلة من الأحرف تُحدّد موقعًا داخل الشيفرة المصدرية . في معظم اللغات، يأخذ الوسم شكل مُعرّف ، غالبًا ما يتبعه حرف ترقيم (مثل النقطتين ). في العديد من لغات البرمجة عالية المستوى ، يُستخدم الوسم كوجهة لعبارة برمجية GOTO. [ 1 ] [ 2 ] في لغة التجميع ، يُمكن استخدام الوسوم في أي مكان يُمكن استخدام عنوان فيه (على سبيل المثال، كمعامل لتعليمات ` JMPor` MOV). [ 3 ] وينطبق الأمر نفسه على لغة باسكال ومشتقاتها. تدعم بعض اللغات، مثل فورتران وبيسك ، الوسوم الرقمية. [ 4 ] تُستخدم الوسوم أيضًا لتحديد نقطة دخول إلى سلسلة من العبارات المُجمّعة (مثلًا، أثناء تصحيح الأخطاء ).

ج

في لغة C ، يُشير المُلصق إلى عبارة في الكود. يمكن أن تحتوي العبارة الواحدة على عدة ملصقات. تُشير الملصقات فقط إلى مواقع في الكود، ولا يؤثر الوصول إلى ملصق على التنفيذ الفعلي.

تسميات الوظائف

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

void foo ( int number ) { if ( number < 0 ) goto error ; bar ( number ); return ; error : fprintf ( stderr , "رقم غير صالح! \n " ); }

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

تبديل الملصقات

يمكن وضع نوعين من التسميات في عبارة switch. تتكون تسمية الحالة من الكلمة المفتاحية case case، متبوعةً بتعبير يُقيّم إلى قيمة عددية ثابتة. أما تسمية القيمة الافتراضية (default) فتتكون من الكلمة المفتاحية default default. تُستخدم تسميات الحالة case لربط قيمة عددية بعبارة في الكود. عند الوصول إلى عبارة switch، يستمر تنفيذ البرنامج بالعبارة التي تلي تسمية الحالة case والتي تطابق قيمتها القيمة الموجودة بين قوسَي عبارة switch. إذا لم تكن هناك تسمية حالة case، ولكن توجد تسمية default، يستمر تنفيذ البرنامج بالعبارة التي تلي تسمية default. أما إذا لم تكن هناك تسمية default، فيستمر تنفيذ البرنامج بعد عبارة switch.

switch ( die ) { default : printf ( "غير صالح \n " ); break ; }الحالة 1 : الحالة 3 : الحالة 5 : printf ( "فردي \n " ); break ;الحالة 2 : الحالة 4 : الحالة 6 : printf ( "زوجي \n " ); break ; }

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

أمثلة

جافا سكريبت

في لغة جافا سكريبت، قد تسبق عبارات بناء الجملة بالعلامة التالية:

أعلى : // تسمية حلقة التكرار الخارجية. for ( var i = 0 ; i < 4 ; i ++ ) { for ( var j = 0 ; j < 4 ; j ++ ) { if ( j === 3 && i === 2 ) { alert ( "i=" + i + ", j=" + j ); //i=2, j=3 break top ; } } }alert ( "i=" + i + ", j=" + j ); //i=2, j=3

من الممكن أيضاً استخدام breakعبارة للخروج من كتل التعليمات البرمجية:

أعلى : { console.log ( " foo " ) console.log ( " bar " ) break أعلى console.log ( " baz " )} // والذي سيُخرج: // > foo // > bar

لغة الشفرة الشائعة

في لغة Common Lisp، توجد طريقتان لتعريف التسميات. الأولى تتضمن tagbodyالمعامل الخاص. وبتمييزها عن العديد من لغات البرمجة الأخرى التي تسمح بالتنقل الشامل، مثل لغة C ، فإن التسميات لا يمكن الوصول إليها إلا في سياق هذا المعامل. داخل هذا المعامل، tagbodyتُعرَّف التسميات على أنها صيغ تبدأ برمز؛ goوتسمح الصيغة الخاصة بنقل التحكم بين هذه التسميات. [ 5 ]

( let (( iteration NIL )) ( tagbody start ( print 'started ) ( setf iteration 0 ) increase ( print iteration ) ( incf iteration 1 ) ( go check ) check ( if ( >= iteration 10 ) ( go end ) ( go increase )) end ( print 'done )))

تستخدم طريقة ثانية وحدات الماكرو للقراءة ، حيث تُشير الأولى إلى الكائن الذي يليها مباشرةً، بينما تُشير الثانية إلى قيمته المُقَيَّمة. [ 6 ] تُشكل التسميات في هذا السياق بديلاً للمتغيرات، حيث يتم تعريف "متغير" وتهيئته والوصول إليه. يُشير العنصر النائب n إلى عدد صحيح عشري غير مُوَقَّع مُختار يُحدد التسمية.#n=#n##n=#n#

( progn #1= "hello" ( print #1# ))

إضافةً إلى ذلك، تسمح بعض النماذج أو تلزم بتحديد اسم للرجوع إليه لاحقًا، بما في ذلك النموذج الخاص blockالذي يحدد التسمية، والنموذج loopالماكرو الذي يمكن تحديده بواسطة namedبند. ويمكن الخروج مباشرةً من النموذج المُسمى باستخدام return-fromعامل التشغيل الخاص.

( كتلة myblock ( حلقة تكرار من 0 do ( إذا ( >= التكرار 10 ) ( العودة من myblock 'تم ) ( طباعة التكرار ) )))
( حلقة باسم myloop للتكرار من 0 do ( إذا كان ( > = التكرار 10 ) ( العودة من myloop 'تم ) ( طباعة التكرار )))

وبطريقة مشابهة للغة C، تُعرّف وحدات الماكرو , case, ccase, ecase[ 7 ] وtypecase عبارات التبديل. [ 8 ]ctypecaseetypecase

( let (( my-value 5 )) ( case my-value ( 1 ( print "واحد" )) ( 2 ( print "اثنان" )) (( 3 4 5 ) ( print "ثلاثة أربعة أو خمسة" )) ( otherwise ( print "أي قيمة أخرى" ))))
( let (( my-value 5 )) ( typecase my-value ( list ( print "a list" )) ( string ( print "a string" )) ( number ( print "a number" )) ( otherwise ( print "any other type" ))))

انظر أيضاً

مراجع

  1. "معيار لغة C، القسم 6.8.6.1: عبارة goto" . مؤرشف من الأصل بتاريخ 24-12-2007 . تم الاطلاع عليه بتاريخ 03-07-2008 .
  2. "GOTO Statement QuickSCREEN" . مايكروسوفت. 1988. مؤرشف من الأصل بتاريخ 25-07-2009 . تم الاطلاع عليه بتاريخ 03-07-2008 .
  3. أو. لولور. "لغة التجميع nasm x86" . تم الاسترجاع في 2008-07-03 .
  4. "الاختلافات بين GW-BASIC و QBasic" . مؤرشف من الأصل بتاريخ 2010-02-10.
  5. كينت بيتمان. "CLHS: المشغل الخاص TAGBODY" . تم الاسترجاع في 18 أغسطس 2020 .
  6. كينت بيتمان. "CLHS: القسم 2.4.8" . تم الاطلاع عليه بتاريخ 18 أغسطس 2020 .
  7. كينت بيتمان. "CLHS: Macro CASE, CCASE, ECASE" . تم الاسترجاع في 2020-08-20 .
  8. كينت بيتمان. "CLSH: Macro TYPECASE, CTYPECASE, ETYPECASE" . تم الاسترجاع في 2020-08-20 .