ทำความเข้าใจขอบเขตใน 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

แนวทางปฏิบัติที่ดีที่สุดคืออย่าใช้ชื่อตัวระบุเดียวกันสำหรับทั้งตัวแปรส่วนกลางและตัวแปรท้องถิ่น

ข้อควรสนใจ: โปรดทราบว่าฉันพูดถึง: "โครงการ" ไม่ใช่ "ไฟล์" โครงการสามารถประกอบด้วยมากกว่าหนึ่งไฟล์ อย่างไรก็ตาม ภายในโปรเจ็กต์เดียว คุณไม่สามารถมีฟังก์ชัน main( ) ได้มากกว่าหนึ่งฟังก์ชัน สิ่งนี้อยู่นอกขอบเขตของบทความนี้ มีกฎเพิ่มเติมบางอย่าง เช่น การใช้ “extern” เกี่ยวกับตัวแปรโกลบอล เรื่องนี้จะกล่าวถึงเพิ่มเติมในหัวข้ออื่นเกี่ยวกับการจัดการไฟล์หลายไฟล์ภายในโปรเจกต์เดียวในไลบรารี VEX


“namespace vex” คืออะไร?

เนมสเปซไม่จำเป็นต้องอยู่ในการสนทนาระหว่างตัวแปร "ท้องถิ่น" กับ "ทั่วโลก" เนื่องจากเนมสเปซไม่ใช่ตัวแปร อย่างไรก็ตาม “เนมสเปซ vex” ไม่มี มีขอบเขตของตัวเอง เนื่องจากเป็นส่วนหนึ่งของโค้ดฐานเทมเพลตที่คุณต้องรวมไว้ในโปรแกรม V5 ทั้งหมดของคุณ กฎขอบเขตสำหรับเนมสเปซจึงควรกล่าวถึงโดยย่อในบทความนี้

แต่ละเนมสเปซเปรียบเสมือนช่องว่างที่คุณสามารถสร้างชุดตัวแปร ซึ่งเป็นฟังก์ชันที่เกี่ยวข้องกับ "ช่องว่าง" แต่ละรายการนั้น คุณสามารถเข้าถึงตัวแปร ฟังก์ชัน คลาส ฯลฯ ที่มีอยู่ทั้งหมดที่กำหนดไว้ภายใน “ช่องว่าง” นี้

คุณสามารถค้นหาเนมสเปซออนไลน์ได้ที่ https://api.vexcode.cloud/v5/html/ หากต้องการค้นหาอย่างรวดเร็ว คุณสามารถคลิกขวาที่ “vex” จากนั้นคลิกที่ “Go to Definition” คุณจะพบข้อมูลมากมายเกี่ยวกับสิ่งที่มีอยู่ในเนมสเปซ “vex”

ภาพหน้าจอของโปรเจ็กต์ C++ ใน VEXcode Pro V5 ที่คลิกขวาด้วยคำสั่ง `using namespace vex` เมนูบริบทแสดงตัวเลือก "ไปที่คำจำกัดความ" และตัวเลือกนี้ถูกเลือกไว้แล้ว

คุณสามารถเข้าถึงสิ่งเหล่านี้ได้โดยทำ: vex::

เช่น อ้างอิงกลับไปที่โค้ดเทมเพลต:

ใช้เนมสเปซรบกวน;
vex::สมอง สมอง;

นอกจากนี้ ชื่อใดๆ รวมถึงตัวแปร ฟังก์ชัน ฯลฯ ที่ประกาศไว้ภายในช่องว่าง "vex" นี้จะไม่ขัดแย้งกับ "ช่องว่าง" อื่นในโปรแกรม

ตัวอย่างเช่น คุณสามารถตัดสินใจสร้าง "myOwnNamespace" และตั้งชื่อตัวแปรว่า "Brain" ไม่แนะนำให้คุณทำแบบนั้น แต่โปรแกรมจะอนุญาต นั่นเป็นเพราะว่าสิ่งนี้ถูกกำหนดไว้ภายใน "myOwnNamespace"

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

Last Updated: