Tìm hiểu cú pháp tạo hàm trong 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.

Định nghĩa hàm

Bây giờ chúng ta đã xem qua một số mẫu, hãy xem dạng tổng quát của định nghĩa hàm:

void function-name() {

	Khai báo biến, v.v.
	Biểu thức...
	//Không cần trả về giá trị rõ ràng.
}

Hàm không trả về giá trị đặc biệt cũng như không có tham số đầu vào.

void function-name(data-type variable) {

	Khai báo biến, v.v.
	Biểu thức... }
	//Không cần trả về giá trị rõ ràng.
Nếu bạn muốn sử dụng nhiều biến, chỉ cần dùng dấu phẩy (,") làm dấu phân

:

Hàm không trả về giá trị đặc biệt nào nhưng có một tham số.

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

	Khai báo biến, v.v.
	Biểu thức...
	//Không cần trả về giá trị rõ ràng.
}

Một hàm không trả về giá trị đặc biệt nào nhưng có nhiều hơn một tham số.

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

	Khai báo biến, v.v.
	Biểu thức...
	trả về giá trị trả về
}

Hàm trả về giá trị của một kiểu dữ liệu cụ thể và có nhiều hơn một tham số đầu vào.

Kiểu dữ liệu của một hàmreturnphải giống với kiểu dữ liệu của giá trị trả về mà hàm đó trả về. Giá trị trảcó thể là một hằng số hoặc một biến số. Trước nó phải có từ khóa “return.”

Các quy tắc sau đây chi phối kiểu trả về:

  • Hầu như không có hạn chế nào về kiểu trả về, ngoại trừ mảng. (Mảng là một chủ đề nâng cao khác liên quan đến cách tạo dữ liệu của bạn. Nó nằm ngoài phạm vi của bài viết này và không được đề cập ở đây.
  • Chỉ định rằng kiểu trả về “void” có nghĩa là không cần giá trị trả về. Mệnh đề “trở lại” là ngầm định. Điều đó có nghĩa là bạn phải nêu rõ ràng “return” ở cuối hàm “void”.

Nên tạo hàm trước hay sau hàm main()?

Trình biên dịch đọc tệp của bạn từ trên xuống dưới. Vì vậy, thứ tự không quan trọng.

Hãy lấy hàm Mẫu số chung lớn nhất (GCD) đơn giản làm ví dụ. Bạn sẽ nhận được lỗi:sử dụng định danh chưa được khai báo 'getGCD'

 Trình soạn thảo mã VEXcode Pro V5 hiển thị hàm main gọi getGCD trước khi nó được định nghĩa, với getGCD được đánh dấu là lỗi định danh chưa được khai báo.

Trên thực tế, điều này đúng cho dù nó đến từ khối chức năng gọi chính ( ) hay khối chức năng gọi khác, tức là “khối chức năng được gọi” phải đứng trước “khối chức năng gọi”.

Hai giải pháp khả thi:

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) );
}
	

Di chuyển “hàm được gọi” phía trên “khối hàm gọi” trong ví dụ "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;
}
	

Đặt nguyên mẫu (còn gọi là chữ ký) của hàm trước “khối hàm gọi”.


Nếu bạn muốn chia nhỏ các chức năng thành các module riêng biệt trong các tệp khác nhau thì sao?

Bước 1: Tạo một tập tin tiêu đề và đặt nguyên mẫu của hàm vào tập tin này.

ví dụ: tạo một tập tin có tên “myFuncs.h”

Bạn cần “thêm” tệp tiêu đề này vào dự án của mình trước khi biên dịch mã. Điều này cho phép VEXcode Pro V5 IDE “nhận biết” việc đưa vào tệp tiêu đề mới này trước khi nó bắt đầu xây dựng dự án của bạn.

Đây là cách thực hiện:

Giao diện VEXcode Pro V5 với menu ngữ cảnh thư mục bao gồm đang mở và tùy chọn "Tệp mới" được chọn để tạo tệp tiêu đề.

Cửa sổ Tạo Tệp Mới hiển thị tùy chọn tệp tiêu đề C++ đã được chọn với tên tệp common.h đã nhập.

Trình soạn thảo mã VEXcode Pro V5 hiển thị hàm getGCD được định nghĩa trong một tệp common.cpp riêng biệt.

Trong tệp tiêu đề này “common.h” (bạn có thể đặt tên bất cứ thứ gì bạn muốn, miễn là nó có chữ và số không có khoảng trắng.)

Bước 2: Tạo một tệp .cpp riêng biệt, ví dụ: có tên là common.cpp

Cửa sổ Tạo Tệp Mới hiển thị tùy chọn tệp nguồn C++ đã được chọn với tên tệp common.cpp đã nhập.

//Đây là tệp common.cpp

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

Di chuyển hàm getGCD(...) vào tệp này

#include "vex.h"
#include "common.h"
using namespace vex;

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

Bây giờ, tất cả những gì bạn có trong tệp cpp chính sẽ bao gồm những thứ sau

Tham khảo:https://api.vexcode.cloud/v5/html/namespacevex.html

Các chủ đề trong tương lai sẽ được đề cập trong các phần nâng cao hơn của Thư viện VEX trong tương lai:

  • Truyền theo giá trị so với truyền theo tham chiếu
  • Truyền vào một mảng
  • Truyền vào một cấu trúc

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

Last Updated: