Переменные#
Введение#
Переменные хранят данные и позволяют повторно использовать и изменять их во всей программе. C++ — это статически типизированный язык, а это значит, что тип переменной необходимо явно указывать при её создании. Тип нельзя изменить после объявления. Например:
int angle = 90; // angle is an integer
char dist[] = "Distance"; // dist is an array of characters
double steps = 2.5; // steps is a double
C++ также является строго типизированным языком, что означает, что вы не можете выполнять операции над несовместимыми типами без явного преобразования. Например:
int blocks = 2; // blocks is an integer
char rings[] = "4"; // rings is a string
int result = blocks + rings; // Creates a compilation error
В этом API описаны распространенные типы переменных в C++. Хотя это не исчерпывающий список, он охватывает типы, которые вы, скорее всего, будете использовать на практике.
Локальные переменные — Объявляются внутри функции и используются только в пределах этой области видимости; лучше всего подходят для временных или изолированных значений.
Глобальные переменные — Объявляются вне любой функции и используются во всем проекте; удобны для обмена данными между функциями.
Целое число — Целые числа, используемые для подсчета, определения расстояний или чего-либо без десятичных знаков.
Double — Десятичные числа высокой точности для математических вычислений, требующих точности.
Float — Десятичные числа стандартной точности, полезные для измерений или вычислений.
Строка в стиле C — Текстовые значения, используемые для сообщений, меток или отображения читаемого вывода.
Boolean (bool) —
trueилиfalseзначения для логики и принятия решений.Массивы — Коллекции элементов одного типа фиксированного размера.
Двумерные массивы — Массивы массивов; идеально подходят для представления строк, сеток или табличных данных.
Const — Переменная, объявленная с
constне может быть изменена.
Объявление и присваивание переменной#
Для создания переменной в C++ необходимо объявить её тип, затем указать имя переменной и, при необходимости, присвоить ей значение, используя оператор =:
int distance = 100;
При именовании переменной необходимо соблюдать следующие правила:
Имя не может содержать специальные символы (например, восклицательный знак).
Имя не может начинаться с цифры.
В имени нельзя использовать пробелы.
Имя не должно конфликтовать с предопределенными объектами VEXcode (например,
Drivetrain).Имя не может быть зарезервированным ключевым словом C++ (например,
int,forи т. д.).Названия переменных чувствительны к регистру (например,
Distanceиdistance— это разные переменные).
Local Variables#
Локальные переменные определяются внутри функции или блока кода. Они доступны только в пределах этой функции или блока и не видны за его пределами.
Определите функцию (вне
int main())void show_local() { // This variable only exists inside this function int angle = 90; Brain.Screen.print("%d", angle); }Вызов функции внутри
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_local(); }
Локальные переменные обычно используются для хранения временных значений, которые актуальны только в рамках конкретной функции или части программы.
Global Variables#
Глобальные переменные определяются вне какой-либо функции или блока. Доступ к ним и их чтение возможны в любом месте программы, включая функции.
Примечание: Глобальные переменные доступны из любой части программы, что делает их удобными для обмена данными между функциями. Однако чрезмерное использование глобальных переменных может привести к непредвиденным побочным эффектам, поскольку изменения переменной в одной части программы могут непредсказуемо повлиять на другие части. По этой причине, как правило, предпочтительнее использовать локальные переменные, поскольку они ограничивают область видимости переменной конкретной функцией, в которой она определена. Это снижает вероятность конфликтов и упрощает отладку.
Определите функцию (вне
int main())// The variable is defined outside a function int angle = 90; void show_global() { // You can access 'angle' inside a function Brain.Screen.print("%d", angle); Brain.Screen.newLine(); }Вызов функции внутри
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_global(); Brain.Screen.print("%d", angle); }
В C++ глобальные переменные можно напрямую получать доступ и изменять из функций без каких-либо специальных ключевых слов. Однако, если у вас есть локальная переменная с тем же именем, вы можете использовать оператор разрешения области видимости :: для доступа к глобальной переменной.
Определите функцию (вне
int main())// Define the global variable int count = 0; void increase_count() { // Global variables can be accessed directly count = count + 1; Brain.Screen.print("Count: %d", count); Brain.Screen.newLine(); }Вызов функции внутри
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code increase_count(); increase_count(); }
Типы данных#
В C++ поддерживаются несколько типов данных, которые можно хранить в переменных. Некоторые типы данных можно переназначать, в то время как другие позволяют изменять отдельные элементы. Ниже перечислены наиболее часто используемые типы:
Integer#
Целое число (int) — это число без знаков после запятой.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
int distance = 100;
// Move the robot forward for the variable value in mm
Drivetrain.driveFor(forward, distance, mm);
// Add to the variable and move forward the new value,
// for 200mm total
wait(1, seconds);
distance = distance + 100;
Drivetrain.driveFor(forward, distance, mm);
}
Double#
Число типа double — это десятичное число с высокой точностью (обычно 64-битное).
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Store a value with decimal points
double raw_value = 0.88;
// Print the decimal value as a percentage
Brain.Screen.print("%.1f%%", raw_value * 100);
}
Float#
Тип данных float хранит десятичные числа. В большинстве проектов VEX предпочтение отдается типам данных doubles, а не float, если только использование памяти не является проблемой.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Store a value with decimal points
float raw_value = 0.88;
// Print the decimal value as a percentage
Brain.Screen.print("%.1f%%", raw_value * 100);
}
String#
Строка в стиле C (char variable_name[]) — это последовательность символов, хранящаяся в символьном массиве. Строки в стиле C должны быть достаточно большими, чтобы вместить текст и нулевой символ-терминатор.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Set the variable to a string then print the string
char message[] = "Ready!";
Brain.Screen.print(message);
}
Boolean#
Логическое значение (bool) представляет собой true или false значений.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Set the state of the variable
bool delivered = false;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
}
Логические значения можно изменять на любом этапе проекта.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Print the value of the delivered variable
bool delivered = false;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
wait(2, seconds);
// Clear the screen and print the value of the variable again
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1,1);
delivered = true;
// Print different messages depending on the Boolean.
if (delivered) {
Brain.Screen.print("Package delivered!");
} else {
Brain.Screen.print("Delivering...");
}
}
Arrays#
Массивы — это коллекции элементов одного типа фиксированного размера, начинающиеся с индекса 0. Рекомендуется знать длину массива и объявлять её при создании.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Declare an array of 5 integers
int distances[5] = {100, 200, 150, 300, 250};
// Drive and turn 4 times to move the distance of the first four distances of the array
for (int i = 0; i < 4; i++) {
Drivetrain.driveFor(forward, distances[i], mm);
Drivetrain.turnFor(right, 90, degrees);
}
}
2D Arrays#
Двумерный массив обычно используется для представления сеток, таблиц или матриц. Каждая строка представляет собой определенную группу данных.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Assign the values in the matrix 2D array
int matrix[3][3] = {
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 }
};
// Loop through each row
for (int i = 0; i < 3; i++) {
// Loop through each column in the row
for (int j = 0; j < 3; j++) {
Brain.Screen.print("%d, ", matrix[i][j]);
}
Brain.Screen.newLine();
}
}
Вы можете изменять отдельные элементы в двумерном массиве:
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
// Assign the values in the matrix 2D array
int matrix[3][3] = {
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 }
};
// Modify the color (in column 2) in row 0
matrix[0][1] = 200;
// Print the modified row from the matrix 2D array
for (int j = 0; j < 3; j++) {
Brain.Screen.print("%d, ", matrix[0][j]);
}
}
Constant Variables#
Переменная, объявленная с помощью const не может быть изменена после инициализации.
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
const int maxSpeed = 100;
// maxSpeed can be used like a normal variable
Drivetrain.setDriveVelocity(maxSpeed, percent);
}