فهم بناء الجملة لإنشاء وظائف في VEXcode Pro V5

تعريف الوظيفة

الآن وقد مررنا ببعض العينات ، دعنا نلقي نظرة على الشكل العام لتعريف الوظيفة:

void function-name () {

	تعريفات المتغيرات ، إلخ.
	تعبيرات ...
	// لا عودة صريحة ضرورية.
}

لا تقوم الدالة بإرجاع قيمة خاصة ، ولا توجد أية معلمات واردة.

اسم دالة باطلة (متغير نوع البيانات) {

	تعريفات المتغيرات ، إلخ.
	التعبيرات ...
	// لا عودة صريحة ضرورية.
}

إذا كنت تريد متغيرات متعددة ، فما عليك سوى استخدام "،" كمحدد:

لا ترجع الدالة أي قيمة خاصة ، ولكن بمعامل واحد.

اسم الوظيفة الفارغة (متغير نوع البيانات ، متغير نوع البيانات ، إلخ.) {

	تعريفات المتغيرات ، إلخ.
	تعبيرات ...
	// لا عودة صريحة ضرورية.
}

لا تُرجع الدالة أي قيمة خاصة ، ولكن مع أكثر من معلمة.

اسم الوظيفة الفارغة (متغير نوع البيانات ، متغير نوع البيانات ، إلخ.) {

	تعريفات المتغيرات ، إلخ.
	تعبيرات ...
	إرجاع القيمة
}

تقوم الدالة بإرجاع قيمة لنوع بيانات محدد ، ومع إدخال أكثر من معلمة واحدة.

ترجعيجب أن يكون نوع الوظيفة مطابقًا لنوع بيانات قيمة الإرجاع التي تعرضها الدالة . قيمة الإرجاعيمكن أن تكون قيمة ثابتة أو متغيرًا. يجب أن تسبق الكلمة الرئيسية "إرجاع.

القواعد التالية تحكم نوع الإرجاع:

  • لا توجد قيود تقريبًا على نوع الإرجاع ، باستثناء المصفوفة. (الصفيف هو موضوع آخر أكثر تقدمًا فيما يتعلق بكيفية إنشاء بياناتك. إنه خارج نطاق هذه المقالة ولم يتم تناوله هنا.
  • تحديد أن نوع الإرجاع "باطل" يعني عدم ضرورة وجود قيمة مرتجعة. عبارة "العودة" ضمنية. هذا يعني أنه يجب عليك ذكر "رجوع" بشكل صريح في نهاية دالة "باطلة".

إنشاء وظيفة قبل main () أو بعد؟

يقوم المترجم بقراءة ملفك من أعلى إلى أسفل. وبالتالي ، فإن الترتيب مهم.

لنأخذ دالة أكبر مقام مشترك (GCD) كمثال. سوف تحصل على خطأ:استخدام معرف غير معروف ' getGCD '

 VEXcode_V5_Text_xi2kumoPkA.png

في الواقع ، هذا صحيح سواء كان من main () أو من كتلة دالة استدعاء أخرى ، أي يجب أن تسبق "كتلة وظيفة تسمى" كتلة وظيفة الاستدعاء. "

حلان ممكنان:

int getGCD (int a، int b) {
  int باقي = 1؛
  بينما (الباقي > 0) {
    باقي = a٪ b ؛
    a = b؛
    b = باقي؛
  }
  إرجاع a؛
}


int main () {
	Brain.Screen.printAt (5،60، “GCD ( %d، %d ) = %d"، getGCD (60 ، 100)) ؛
}
	

انقل "الوظيفة التي تم استدعاؤها" فوق "كتلة وظيفة الاستدعاء" في مثال "main ()".

int getGCD (int ، int) ؛

int main () { 
	Brain.Screen.printAt (5،60، "GCD ( %d، %d ) = %d"، getGCD (60، 100))؛
}

int getGCD (int a، int b) {
  الباقي int = 1 ؛
  بينما (الباقي > 0) {
    باقي = a٪ b ؛
    a = b؛
    b = باقي؛
  }
  return a؛
}
	

ضع النموذج الأولي (ويسمى أيضًا التوقيع) للوظيفة قبل "كتلة وظيفة الاستدعاء".


ماذا لو كنت ترغب في توحيد الوظائف في ملفات مختلفة؟

الخطوة 1: قم بإنشاء ملف رأس ، ثم ضع النموذج الأولي للوظيفة في هذا الملف.

على سبيل المثال أنشئ ملفًا باسم "myFuncs.h"

تحتاج إلى "إضافة" ملف الرأس هذا إلى مشروعك قبل تجميع التعليمات البرمجية الخاصة بك. يتيح ذلك لـ VEXcode Pro V5 IDE "أن يكون على دراية" بتضمين ملف الرأس الجديد هذا قبل أن يبدأ في بناء مشروعك.

هنا هو كيف:

في ملف الرأس هذا "common.h" (يمكنك تسمية كل ما تريد ، طالما أنه أبجدي رقمي بدون مسافة.)

الخطوة 2: قم بإنشاء ملف cpp منفصل ، على سبيل المثال ، يسمى common.cpp

// هذا هو ملف common.cpp

int getGCD (int a، int b) {
  int باقي = 1؛
  بينما (الباقي > 0) {
    باقي = a٪ b ؛
    a = b؛
    b = باقي؛
  }
  إرجاع a؛
}

انقل الدالة getGCD (...) إلى هذا الملف

#include "vex.h"
#include "common.h"
باستخدام مساحة الاسم vex؛

int main () { 
  vexcodeInit ()؛
	Brain.Screen.printAt (5،60، "GCD ( %d، %d ) = %d"، getGCD (60، 100))؛
}

الآن ، سيتكون كل ما لديك في ملف cpp الرئيسي مما يلي

المرجع:https://api.vexcode.cloud /v5/html/namespacevex.html

سيتم تغطية الموضوعات المستقبلية في أقسام أكثر تقدمًا من قاعدة المعارف في المستقبل:

  • المرور بالقيمة مقابل المرور بالمرجع
  • تمر في مجموعة
  • مرر في هيكل

For more information, help, and tips, check out the many resources at VEX Professional Development Plus