ทำความเข้าใจไวยากรณ์เพื่อสร้างฟังก์ชันใน VEXcode Pro V5

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

คำจำกัดความของฟังก์ชัน

ตอนนี้เราได้ดูตัวอย่างบางส่วนแล้ว มาดูรูปแบบทั่วไปของนิยามฟังก์ชันกันดีกว่า:

void function-name() {

	การประกาศตัวแปร ฯลฯ
	นิพจน์...
	//ไม่จำเป็นต้องระบุค่าส่งคืนอย่างชัดเจน
}

ฟังก์ชันไม่ส่งกลับค่าพิเศษหรือไม่มีพารามิเตอร์ขาเข้า

void function-name(data-type variable) {

	การประกาศตัวแปร ฯลฯ
	นิพจน์...
	//ไม่จำเป็นต้องระบุค่าส่งคืนอย่างชัดเจน
}

ถ้าคุณต้องการตัวแปรหลายตัว คุณก็เพียงแค่ใช้ "," เป็นตัวคั่น:

ฟังก์ชันไม่ส่งคืนค่าพิเศษ แต่มีพารามิเตอร์เดียว

void function-name(data-type variable, data-type variable, etc.) {

	การประกาศตัวแปร ฯลฯ
	นิพจน์...
	//ไม่จำเป็นต้องระบุค่าส่งคืนอย่างชัดเจน
}

ฟังก์ชันไม่ส่งคืนค่าพิเศษ แต่มีพารามิเตอร์มากกว่าหนึ่งตัว

void function-name(data-type variable, data-type variable, etc.) {

	การประกาศตัวแปร ฯลฯ
	นิพจน์...
	ส่งคืนค่า
}

ฟังก์ชันส่งคืนค่าของประเภทข้อมูลเฉพาะและมีพารามิเตอร์มากกว่าหนึ่งพารามิเตอร์

ประเภทข้อมูลของฟังก์ชันที่ส่งคืนจะต้องเหมือนกับประเภทข้อมูลของค่าที่ฟังก์ชันนั้นส่งคืน ค่าส่งคืนอาจเป็นค่าคงที่หรือตัวแปรก็ได้ ต้องนำหน้าด้วยคีย์เวิร์ด “return”

กฎต่อไปนี้ควบคุมประเภทการคืนสินค้า:

  • แทบไม่มีข้อจำกัดเกี่ยวกับประเภทการส่งคืน ยกเว้นอาร์เรย์ (อาร์เรย์เป็นหัวข้อขั้นสูงอีกหัวข้อหนึ่งเกี่ยวกับวิธีสร้างข้อมูลของคุณ อยู่นอกเหนือขอบเขตของบทความนี้ และไม่ครอบคลุมในที่นี้
  • การระบุว่าประเภทการส่งคืนเป็น "โมฆะ" หมายความว่าไม่จำเป็นต้องมีค่าส่งคืน คำว่า "การกลับมา" นั้นเป็นนัย นั่นหมายความว่าคุณต้องระบุอย่างชัดเจนว่า "return" ที่ส่วนท้ายของฟังก์ชัน "void"

ควรสร้างฟังก์ชันก่อนหรือหลังฟังก์ชัน main() ดี?

คอมไพเลอร์จะอ่านไฟล์ของคุณจากบนลงล่าง ดังนั้นคำสั่งซื้อจึงมีความสำคัญ

ลองใช้ฟังก์ชันตัวส่วนร่วมมาก (GCD) แบบธรรมดาเป็นตัวอย่าง คุณจะได้รับข้อผิดพลาด:การใช้งานตัวระบุที่ไม่ได้ประกาศ 'getGCD'

 โปรแกรมแก้ไขโค้ด VEXcode Pro V5 แสดงการเรียกใช้ฟังก์ชัน main โดยใช้ getGCD ก่อนที่จะมีการกำหนดนิยามของฟังก์ชันนั้น โดย getGCD ถูกไฮไลต์เป็นข้อผิดพลาดตัวระบุที่ไม่ได้ประกาศไว้

จริงๆ แล้วสิ่งนี้เป็นจริงไม่ว่าจะมาจาก main( ) หรือบล็อกฟังก์ชันการเรียกอื่นๆ กล่าวคือ "บล็อกฟังก์ชันที่ถูกเรียก" จะต้องอยู่หน้า "บล็อกฟังก์ชันการเรียกใช้"

สองวิธีที่เป็นไปได้:

int getGCD(int a, int b) {
  int remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return 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 remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return a;
}
	

วางต้นแบบ (หรือที่เรียกว่าลายเซ็นต์) ของฟังก์ชันไว้หน้า "บล็อกฟังก์ชันการเรียก"


แล้วถ้าคุณต้องการแบ่งฟังก์ชันออกเป็นโมดูลในไฟล์ต่างๆ ล่ะ?

ขั้นตอนที่ 1: สร้างไฟล์ส่วนหัว และใส่ต้นแบบของฟังก์ชันลงในไฟล์นี้

เช่น สร้างไฟล์ชื่อ “myFuncs.h”

คุณต้อง "เพิ่ม" ไฟล์ส่วนหัวนี้ในโครงการของคุณก่อนที่จะรวบรวมโค้ดของคุณ ซึ่งช่วยให้ VEXcode Pro V5 IDE “รับรู้” การรวมไฟล์ส่วนหัวใหม่นี้ก่อนที่จะเริ่มสร้างโปรเจ็กต์ของคุณ

นี่คือวิธีการ:

อินเทอร์เฟซของ VEXcode Pro V5 พร้อมเมนูบริบทโฟลเดอร์ include ที่เปิดอยู่ และตัวเลือก "สร้างไฟล์ใหม่" ที่เลือกตัวเลือกไว้ เพื่อสร้างไฟล์เฮดเดอร์

หน้าต่าง "สร้างไฟล์ใหม่" แสดงว่าได้เลือกตัวเลือกไฟล์ส่วนหัว C++ แล้ว และป้อนชื่อไฟล์ common.h

โปรแกรมแก้ไขโค้ด VEXcode Pro V5 แสดงฟังก์ชัน getGCD ที่ถูกกำหนดไว้ในไฟล์ common.cpp แยกต่างหาก

ในไฟล์ส่วนหัวนี้ “common.h” (คุณสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ ตราบใดที่เป็นตัวอักษรและตัวเลขโดยไม่มีช่องว่าง)

ขั้นตอนที่ 2: สร้างไฟล์ .cpp แยกต่างหาก เช่น ตั้งชื่อว่า common.cpp

หน้าต่าง "สร้างไฟล์ใหม่" แสดงว่าได้เลือกตัวเลือกไฟล์ซอร์สโค้ด C++ แล้ว และป้อนชื่อไฟล์ common.cpp

//นี่คือไฟล์ common.cpp

int getGCD(int a, int b) {
  int remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return a;
}

ย้ายฟังก์ชัน getGCD(...) ลงในไฟล์นี้

#include "vex.h"
#include "common.h"
using namespace 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

หัวข้อในอนาคตจะกล่าวถึงในส่วนขั้นสูงของ VEX Library ในอนาคต:

  • ส่งผ่านตามค่าเทียบกับส่งผ่านโดยการอ้างอิง
  • ผ่านในอาร์เรย์
  • ผ่านเข้าไปในโครงสร้าง

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

Last Updated: