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) {

	変数の宣言など
	式...
	//明示的な戻り値は不要です。
}

複数の変数を指定したい場合は、区切り文字として「,」を使用します。

関数は特別な値を返しませんが、パラメータが 1 つあります。

void 関数名(データ型変数、データ型変数など) {

	変数宣言など
	式...
	//明示的な戻り値は不要です。
}

関数は特別な値を返しませんが、複数のパラメータを返します。

void 関数名(データ型変数、データ型変数など) {

	変数宣言など
	式...
	戻り値
を返す }

関数は、複数のパラメータを入力して、特定のデータ型の値を返します。

関数の戻りの型はその関数が返す戻り値のデータ型と同じでなければなりません。戻り値またはは、定数または変数のいずれかになります。先頭にキーワード「return」を付ける必要があります。」

戻り値の型は次の規則によって決まります。

  • 戻り値の型には、配列を除いてほとんど制限がありません。(配列は、データの作成方法に関するもう 1 つの高度なトピックです。これはこの記事の範囲外であるため、ここでは説明しません。
  • 戻り値の型を「void」に指定すると、戻り値が不要になります。「返却」条項は暗黙的です。つまり、「void」関数の最後に「return」を明示的に記述する必要があります。

main() の前に関数を作成するか、後に作成するか?

コンパイラはファイルを上から下に読み取ります。したがって、順序は重要です。

単純な最大公約数 (GCD) 関数を例として考えてみましょう。エラーが発生します:未宣言の識別子 'getGCD' の使用

 VEXcode Pro V5のコードエディタで、main関数が定義前にgetGCDを呼び出している様子を表示。getGCDは未宣言の識別子エラーとして強調表示されている。

実際、これは main() からのものであっても、他の呼び出し関数ブロックからのものであっても当てはまります。つまり、「呼び出される関数ブロック」は「呼び出し関数ブロック」より前になければなりません。

考えられる解決策は 2 つあります。

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のインターフェースで、インクルードフォルダのコンテキストメニューを開き、「新規ファイル」オプションを選択してヘッダーファイルを作成します。

「新規ファイル作成」ウィンドウが表示され、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 ライブラリのより高度なセクションで取り上げられる予定です。

  • 値渡しと参照渡し
  • 配列を渡す
  • 構造物を渡す

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

Last Updated: