Variáveis#
Introdução#
As variáveis armazenam dados e permitem reutilizá-los e manipulá-los em todo o seu programa. C++ é uma linguagem estaticamente tipada, o que significa que tem de declarar o tipo de uma variável explicitamente quando a cria. O tipo não pode ser alterado após a declaração. Por exemplo:
int angle = 90; // angle is an integer
char dist[] = "Distance"; // dist is an array of characters
double steps = 2.5; // steps is a double
O C++ também é fortemente tipado, o que significa que não pode realizar operações em tipos incompatíveis sem conversão explícita. Por exemplo:
int blocks = 2; // blocks is an integer
char rings[] = "4"; // rings is a string
int result = blocks + rings; // Creates a compilation error
Esta API explica os tipos de variáveis comuns em C++. Embora não seja uma lista exaustiva, abrange os tipos que provavelmente irá utilizar na prática.
Variáveis locais — Declaradas dentro de uma função e utilizadas apenas dentro desse âmbito; melhor para valores temporários ou isolados.
Variáveis globais — Declaradas fora de qualquer função e utilizadas em todo o projeto; boas para partilhar dados entre funções.
Inteiro — Números inteiros utilizados para contagem, distâncias ou qualquer coisa sem decimais.
Duplo — Números decimais de alta precisão para cálculos matemáticos que exigem exatidão.
Float — Números decimais de precisão padrão, úteis para medições ou cálculos.
String estilo C — Valores de texto, utilizados para mensagens, etiquetas ou visualização de saída legível.
Booleano (bool) —
trueoufalsevalores para lógica e tomada de decisão.Arrays — Colecções de tamanho fixo de elementos do mesmo tipo.
Matrizes 2D — Matrizes de matrizes; ideal para representar linhas, grelhas ou dados sob a forma de tabela.
Const — Uma variável declarada com
constnão pode ser modificada.
Declarar e atribuir um valor a uma variável#
Para criar uma variável em C++, deve declarar o seu tipo seguido do nome da variável e, opcionalmente, atribuir um valor utilizando o operador =:
int distance = 100;
Ao nomear uma variável, devem ser observadas as seguintes regras:
O nome não pode conter caracteres especiais (por exemplo, um ponto de exclamação).
O nome não pode começar por um número.
O nome não pode conter espaços.
O nome não pode entrar em conflito com os objetos VEXcode predefinidos (por exemplo,
Drivetrain).O nome não pode ser uma palavra-chave reservada do C++ (por exemplo,
int,for, etc.).Os nomes das variáveis diferem entre maiúsculas e minúsculas (por exemplo,
Distanceedistancesão variáveis diferentes).
Local Variables#
As variáveis locais são definidas dentro de uma função ou bloco de código. Só são acessíveis no âmbito dessa função ou bloco e não são visíveis fora dele.
Defina a função (fora de
int main())void show_local() { // This variable only exists inside this function int angle = 90; Brain.Screen.print("%d", angle); }Chame a função dentro de
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_local(); }
As variáveis locais são normalmente utilizadas para armazenar valores temporários que são relevantes apenas dentro de uma função específica ou parte do programa.
Global Variables#
As variáveis globais são definidas fora de qualquer função ou bloco. Podem ser acedidas e lidas em qualquer lugar do programa, incluindo dentro de funções.
Nota: As variáveis globais são acessíveis a partir de qualquer ponto do programa, o que pode ser conveniente para partilhar dados entre funções. No entanto, depender demasiado das variáveis globais pode levar a efeitos secundários indesejados, uma vez que alterações na variável numa parte do programa podem afetar outras partes de forma imprevisível. Por este motivo, as variáveis locais são geralmente preferidas sempre que possível, uma vez que limitam o âmbito de uma variável à função específica onde é definida. Isto reduz a probabilidade de conflitos e facilita a depuração.
Defina a função (fora de
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(); }Chame a função dentro de
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); }
Em C++, as variáveis globais podem ser acedidas e modificadas diretamente a partir do interior das funções sem a necessidade de palavras-chave especiais. No entanto, se tiver uma variável local com o mesmo nome, pode utilizar o operador de resolução de âmbito :: para aceder à variável global.
Defina a função (fora de
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(); }Chame a função dentro de
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(); }
Tipos de dados#
O C++ suporta diversos tipos de dados que podem ser armazenados em variáveis. Alguns tipos podem ser reatribuídos, enquanto outros permitem que elementos individuais sejam modificados. Abaixo estão os tipos mais utilizados:
Integer#
Um número inteiro (int) é um número inteiro.
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#
Um double é um número decimal de alta precisão (normalmente 64 bits).
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#
Um float armazena números decimais. Na maioria dos projetos VEX, doubles são preferidos em relação a floats, a menos que a utilização de memória seja uma preocupação.
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#
Uma string no estilo C (char variable_name[]) é uma sequência de caracteres armazenada num vetor de caracteres. As strings do estilo C devem ser suficientemente grandes para armazenar o texto e um terminador nulo.
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#
Um Booleano (bool) representa true ou 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...");
}
}
Os valores booleanos podem ser alterados em qualquer ponto do projeto.
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#
Arrays são coleções de tamanho fixo de elementos do mesmo tipo, começando no índice 0. É uma boa prática saber o comprimento do array e declará-lo no momento da sua criação.
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#
Uma matriz 2D é normalmente utilizada para representar grelhas, tabelas ou arrays. Cada linha representa um agrupamento específico de dados.
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();
}
}
Pode modificar elementos específicos dentro de uma matriz 2D:
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#
Uma variável declarada com const não pode ser modificada após ser inicializada.
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);
}