ควบคุม#
การแนะนำ#
ส่วนควบคุมประกอบด้วยฟังก์ชันสำหรับการกำหนดเวลา การไหลของโปรแกรม ตรรกะแบบมีเงื่อนไข และการยุติโครงการ ส่วนควบคุมเหล่านี้ช่วยให้คุณสามารถหยุดการทำงานชั่วคราว สร้างลูป กำหนดเส้นทางตรรกะ และจบโปรแกรมได้
ฟังก์ชันและคำสำคัญ#
ด้านล่างนี้คือรายการของส่วนควบคุมที่มีให้ใช้งาน รวมถึงฟังก์ชัน API และคำสำคัญในภาษา C++:
wait– หยุดโปรเจกต์ชั่วคราวตามระยะเวลาที่กำหนดfor– ทำซ้ำบล็อกโค้ดตามจำนวนครั้งที่กำหนดif– รันบล็อกโค้ดหากเงื่อนไขเป็นจริงif/else– รันบล็อกโค้ดหนึ่งบล็อกหากเงื่อนไขเป็นจริง หรือรันบล็อกอื่นหากเงื่อนไขเป็นเท็จif/else if/else– ตรวจสอบเงื่อนไขหลายรายการตามลำดับและเรียกใช้บล็อกแรกที่เงื่อนไขเป็นจริงwhile– ทำซ้ำบล็อกโค้ดตราบใดที่เงื่อนไขยังคงเป็นจริงbreak– ออกจากลูปปัจจุบันทันทีprogramStop– ยุติโปรเจกต์ทันที
wait#
หยุดโปรเจ็กต์ชั่วคราวเป็นระยะเวลาหนึ่งก่อนที่จะดำเนินการต่อในบรรทัดโค้ดถัดไป
Available Functionsvoid wait(
double time,
timeUnits units );
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
ระยะเวลาที่ต้องรอ เป็นค่าบวก |
|
|
หน่วยที่ใช้แสดงเวลา: |
ฟังก์ชันนี้ไม่ส่งค่ากลับ
Examples// Stop driving after 1 second
Drivetrain.drive(forward);
wait(1, seconds);
Drivetrain.stop();
for#
ทำซ้ำบล็อกโค้ด รูปแบบการนับจะทำงานตามจำนวนครั้งที่กำหนด ส่วนรูปแบบตามช่วงจะทำงานหนึ่งครั้งสำหรับแต่ละรายการในคอลเลกชัน
Syntax1 — ลูปนับเวลา — ทำงานซ้ำตามจำนวนครั้งที่กำหนดไว้
for (int i = 0; i < count; i++) { // code block }
Parameters2 — ลูปแบบอิงช่วง — ทำงานหนึ่งครั้งสำหรับแต่ละรายการในคอลเลกชัน
for (type element : collection) { // code block }
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
จำนวนครั้งที่บล็อกโค้ดจะถูกทำซ้ำ |
|
ชื่อประเภท |
ประเภทข้อมูลของแต่ละรายการในคอลเลกชัน (เช่น |
|
|
ชื่อตัวแปรที่จะใช้เก็บค่าของรายการปัจจุบันในลูป |
|
|
อาร์เรย์ (หรือเวกเตอร์) ที่เก็บรายการที่จะวนลูปผ่าน |
โครงสร้างควบคุมนี้ไม่ส่งค่ากลับ
Examples// Drive in a square
for (int i = 0; i < 4; i++) {
Drivetrain.driveFor(forward, 100, mm);
Drivetrain.turnFor(right, 90, degrees);
}
// Drive forward different distances
int distances[] = {100, 150, 200};
for (int d : distances) {
Drivetrain.driveFor(forward, d, mm);
wait(0.5, seconds);
}
if#
เรียกใช้บล็อกโค้ดที่แนบมาหากเงื่อนไขเป็น true
if (condition) {
// code block
}
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
นิพจน์หรือตัวแปรที่จะถูกประเมินเมื่อคำสั่งทำงาน ถ้าเป็น |
โครงสร้างควบคุมนี้ไม่ส่งค่ากลับ
Exampleswhile (true) {
if (Brain.Screen.pressing()) {
// Display a message once the screen is pressed
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Screen pressed!");
break;
}
wait(5, msec);
}
if/else#
กำหนดว่าบล็อกโค้ดใดในกรอบจะทำงาน โดยพิจารณาจากเงื่อนไขว่าเป็น true หรือ false
if (condition) {
// code block if true
}
else {
// code block if false
}
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
นิพจน์หรือตัวแปรที่จะถูกประเมินเมื่อคำสั่งทำงาน ถ้าเป็น |
โครงสร้างควบคุมนี้ไม่ส่งค่ากลับ
Exampleswhile (true) {
if (Brain.Screen.pressing()) {
// Turn the screen green when pressed
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
}
if/else if/else#
เลือกบล็อกโค้ดที่อยู่ภายในกรอบให้ทำงานโดยพิจารณาจากเงื่อนไขหลายประการ
Syntaxif (condition) {
// code block if first condition is true
}
else if (condition) {
// code block if second condition is true
}
else {
// code block if no conditions are true
}
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
An expression or variable that is evaluated when the statement runs. The first condition that is |
โครงสร้างควบคุมนี้ไม่ส่งค่ากลับ
Notesifรันบล็อก ถ้าเงื่อนไขเป็นจริงtrueelse ifจะตรวจสอบเงื่อนไขเพิ่มเติมเฉพาะเมื่อเงื่อนไขก่อนหน้าทั้งหมดเป็นเท็จfalseเท่านั้นelse ifสามารถใช้คำสั่งหลายคำสั่งได้elseจะรันบล็อกเฉพาะเมื่อไม่มีเงื่อนไขก่อนหน้าใดเป็นจริงtrue
while (true) {
// Turn screen blue if pressed on the left half
if (Brain.Screen.pressing() && Brain.Screen.xPosition() < 240) {
Brain.Screen.clearScreen(blue);
// Turn screen green if pressed on the right half
} else if (Brain.Screen.pressing() && Brain.Screen.xPosition() > 240) {
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
wait(20, msec);
}
while#
รันโค้ดซ้ำ ๆ ตราบใดที่เงื่อนไขเป็น true
while (condition) {
// code block
}
พารามิเตอร์ |
พิมพ์ |
คำอธิบาย |
|---|---|---|
|
|
นิพจน์หรือตัวแปรที่จะถูกประเมินก่อนการวนซ้ำแต่ละครั้ง ถ้าเป็น |
โครงสร้างควบคุมนี้ไม่ส่งค่ากลับ
Notesนอกจากนี้ยังสามารถใช้ในลักษณะ “รอจนกว่า” โดยการเพิ่ม
!ไว้หน้าเงื่อนไข ดังตัวอย่างด้านล่าง
while (true) {
if (Brain.Screen.pressing()) {
// Turn the screen green whenever it's pressed
Brain.Screen.clearScreen(green);
} else {
Brain.Screen.clearScreen();
}
}
// Wait until the screen is pressed to turn it green
while (!Brain.Screen.pressing()) {
wait(20, msec);
}
Brain.Screen.clearScreen(green);
break#
ออกจากลูปปัจจุบันทันที หากอยู่ในลูปซ้อนกัน ให้ใช้คำสั่ง break ออกจากลูปชั้นในสุด
break;
คำสั่งนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesคำสั่งนี้ไม่ส่งค่าใดๆ กลับมา
Exampleswhile (true) {
// Press the screen to pause on a color
Brain.Screen.clearScreen(red);
wait(500, msec);
if (Brain.Screen.pressing()) {
break;
}
Brain.Screen.clearScreen(green);
wait(500, msec);
if (Brain.Screen.pressing()) {
break;
}
}
programStop#
ยุติโครงการทันที
SyntaxBrain.programStop();
คำสั่งนี้ไม่รับพารามิเตอร์ใดๆ
Return Valuesคำสั่งนี้ไม่ส่งค่าใดๆ กลับมา
Exampleswhile (true) {
// Press the screen to end the project
Brain.Screen.clearScreen(red);
wait(500, msec);
if (Brain.Screen.pressing()) {
Brain.programStop();
}
Brain.Screen.clearScreen(green);
wait(500, msec);
if (Brain.Screen.pressing()) {
Brain.programStop();
}
}