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.

さて、スコープ ルールについて知っておく必要があります - {... }による「スコープ」の概念を理解する

ローカル変数

サンプル コードから生成された出力を観察します。主な違いについては明らかであるはずです。これらはすべて「ローカル」変数であり、スコープ {...} 内にあります。

int main() {
int X = 10, Y = 15;
{
  int X = 20;
   {
     int X = 30, Y = 35;
     brain.Screen.printAt(4,30, "3rd one: %d, %d ", X, Y); 
   }
  	 brain.Screen.printAt(4, 60, "2nd one: %d, %d", X, Y); 
	}
	brain.Screen.printAt(4, 90, "1st one: %d, %d", X, Y);	
	return 0;
}

出力:

3番目: 30, 35 
2番目: 20, 15 
1番目: 10, 15

上記の例は、簡単に説明するために使用されています。ネストされたスコープ内で同一の垂直変数を使用しないでください。

変数を「main()」ブロックの外に置くのはどうでしょうか?

グローバル変数

変数を main( ) ブロックの外に配置し、他の関数内に配置しないと、プロジェクト内のすべての関数で変数をグローバルに使用できるようになります。これらはグローバル変数と呼ばれます。

int gValue = 90000; // これは他のすべてのスコープでグローバルです
  
int main() {

  Brain.Screen.setFont(fontType::mono30);
  int X = 10;
  {
      int X = 20, gValue = 8000;
      {
         int X = 30, gValue = 700;
         Brain.Screen.printAt(4, 30, " 3rd one: %d ", gValue + X); 
      }
      Brain.Screen.printAt(4, 60, " 2nd one: %d ", gValue + X); 
   }
   Brain.Screen.printAt(4, 90, " 1st one: %d ", gValue + X);
}

出力:

3番目: 730
2番目: 8020 
1番目: 90010

ベスト プラクティスは、グローバル変数とローカル変数の両方に同じ識別子名を使用しないことです。

注意: 「ファイル」ではなく「プロジェクト」と述べたことに注意してください。プロジェクトは複数のファイルで構成されます。ただし、1 つのプロジェクト内に複数の main( ) 関数を含めることはできません。これはこの記事の範囲外です。グローバル変数に関して「extern」を使用するなど、追加のルールがいくつかあります。これについては、VEXライブラリ内の単一プロジェクトにおける複数ファイルに関する別のセクションでさらに詳しく説明します。


「ネームスペースVEX」とは何ですか?

名前空間は変数ではないため、名前空間自体は必ずしも「ローカル」変数と「グローバル」変数の議論に該当するわけではありません。ただし、「namespace vex」には 独自のスコープが含まれます。これはすべての V5 プログラムに含める必要があるテンプレート コード ベースの一部であるため、名前空間のスコープ ルールについてはこの記事で簡単に説明します。

各ネームスペースは、個々の「スペース」に関連する変数や関数のセットを作成できるスペースのようなものです。この「スペース」内で定義されている、使用可能なすべての変数、関数、クラスなどにアクセスできるようになります。

名前空間は、オンラインで https://api.vexcode.cloud/v5/html/で検索できます。簡単に検索するには、「vex」を右クリックし、「定義に移動」をクリックすることもできます。名前空間「vex」から利用できるものについての豊富な情報が見つかります。

VEXcode Pro V5 のスクリーンショット。C++ プロジェクトの using namespace vex コマンドを右クリックした状態です。コンテキストメニューに「定義へ移動」というオプションが表示され、このオプションが選択されています。

次のコマンドを実行すると、それらのいずれかにアクセスできます: vex::

たとえば、テンプレート コードを参照してください。

名前空間 vex を使用します。
vex::brain 脳;

さらに、この「vex」空間内で宣言された変数、関数などを含む名前は、プログラム内の別の「空間」と競合しません。

たとえば、「myOwnNamespace」を作成し、変数に「Brain」というタイトルを付けることができます。そのようなことを行うことはお勧めできませんが、プログラムでは許可されています。これは、「myOwnNamespace」内で定義されているためです。

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

Last Updated: