Muuttujat#
Johdanto#
Muuttujat tallentavat dataa ja mahdollistavat sen uudelleenkäytön ja käsittelyn koko ohjelmassasi. C++ on staattisesti tyypitetty kieli, mikä tarkoittaa, että muuttujan tyyppi on määriteltävä eksplisiittisesti sitä luotaessa. Tyyppiä ei voi muuttaa määrittelyn jälkeen. Esimerkiksi:
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++ on myös vahvasti tyypitetty, mikä tarkoittaa, että yhteensopimattomille tyypeille ei voi suorittaa toimintoja ilman eksplisiittistä muunnosta. Esimerkiksi:
int blocks = 2; // blocks is an integer
char rings[] = "4"; // rings is a string
int result = blocks + rings; // Creates a compilation error
Tämä API selittää yleisiä muuttujatyyppejä C++:ssa. Vaikka luettelo ei olekaan tyhjentävä, se kattaa tyypit, joita todennäköisimmin käytät käytännössä.
Paikalliset muuttujat — Määritetään funktion sisällä ja käytetään vain sen laajuuden sisällä; parhaiten väliaikaisille tai yksittäisille arvoille.
Globaalit muuttujat — Ilmoitetaan minkä tahansa funktion ulkopuolella ja käytetään koko projektin ajan; hyvä tiedon jakamiseen funktioiden välillä.
Integer — Kokonaisluvut, joita käytetään laskemiseen, etäisyyksien määrittämiseen tai mihin tahansa ilman desimaaleja.
Double — Tarkat desimaaliluvut tarkkuutta vaativiin matemaattisiin laskelmiin.
Float — Vakiotarkkuuden desimaaliluvut, hyödyllisiä mittauksissa tai laskelmissa.
C-tyylinen merkkijono — Tekstiarvot, joita käytetään viesteissä, otsikoissa tai luettavan tulosteen näyttämisessä.
Totuusarvo (bool) —
truetaifalsearvoa logiikkaa ja päätöksentekoa varten.Taulukot — Kiinteän kokoiset kokoelmat saman tyyppisiä elementtejä.
2D-taulukot — Taulukoiden taulukot; ihanteellinen rivien, ruudukoiden tai taulukkomaisen datan esittämiseen.
Vakio — Muuttujaa, jonka vakion arvoksi on määritetty
constarvo, ei voida muokata.
Muuttujan määrittäminen ja sijoittaminen#
Muuttujan luomiseksi C++:ssa sinun on määriteltävä sen tyyppi ja sen jälkeen muuttujan nimi, ja sitten halutessasi annettava arvo operaattorilla =:
int distance = 100;
Muuttujaa nimettäessä on noudatettava seuraavia sääntöjä:
Nimessä ei saa olla erikoismerkkejä (esim. huutomerkkiä).
Nimi ei voi alkaa numerolla.
Nimessä ei saa käyttää välilyöntejä.
Nimi ei saa olla ristiriidassa ennalta määritettyjen VEXcode-objektien kanssa (esimerkiksi
Drivetrain).Nimi ei voi olla C++:n varattu avainsana (esim.
int,forjne.).Muuttujien nimissä kirjainkoko on merkitsevä (esim.
Distancejadistanceovat eri muuttujia).
Local Variables#
Paikalliset muuttujat määritellään funktion tai koodilohkon sisällä. Ne ovat käytettävissä vain kyseisen funktion tai lohkon sisällä, eivätkä ne ole näkyvissä sen ulkopuolella.
Määrittele funktio (
int main())void show_local() { // This variable only exists inside this function int angle = 90; Brain.Screen.print("%d", angle); }Kutsu funktiota
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code show_local(); }
Paikallisia muuttujia käytetään yleisesti sellaisten väliaikaisten arvojen tallentamiseen, jotka ovat merkityksellisiä vain tietyssä funktiossa tai ohjelman osassa.
Global Variables#
Globaalit muuttujat määritellään minkä tahansa funktion tai lohkon ulkopuolella. Niitä voi käyttää ja lukea mistä tahansa ohjelmassa, myös funktioiden sisältä.
Huomautus: Globaalit muuttujat ovat käytettävissä mistä tahansa ohjelman osasta, mikä voi tehdä niistä käteviä tiedon jakamisessa funktioiden välillä. Globaalien muuttujien liiallinen käyttö voi kuitenkin johtaa tahattomiin sivuvaikutuksiin, koska muuttujan muutokset yhdessä ohjelman osassa voivat vaikuttaa arvaamattomasti muihin osiin. Tästä syystä paikallisia muuttujia suositaan yleensä mahdollisuuksien mukaan, koska ne rajoittavat muuttujan soveltamisalan tiettyyn funktioon, jossa se on määritelty. Tämä vähentää ristiriitojen todennäköisyyttä ja helpottaa virheenkorjausta.
Määrittele funktio (
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(); }Kutsu funktiota
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++:ssa globaaleihin muuttujiin voi päästä käsiksi ja niitä voi muokata suoraan funktioiden sisältä ilman erityisiä avainsanoja. Jos sinulla kuitenkin on samanniminen paikallinen muuttuja, voit käyttää laajuusoperaattoria :: globaalin muuttujan käyttämiseen.
Määrittele funktio (
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(); }Kutsu funktiota
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(); }
Tietotyypit#
C++ tukee useita erityyppisiä tietoja, jotka voidaan tallentaa muuttujiin. Joitakin tyyppejä voidaan määrittää uudelleen, kun taas toiset sallivat yksittäisten elementtien muokkaamisen. Alla on lueteltu yleisimmin käytetyt tyypit:
Integer#
Kokonaisluku (int) on kokonaisluku.
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 on erittäin tarkka desimaaliluku (yleensä 64-bittinen).
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#
A float stores decimal numbers. In most VEX projects, doubles are preferred over floats unless memory usage is a concern.
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-tyylinen merkkijono (char variable_name[]) on merkkijono, joka on tallennettu merkkijonotaulukkoon. C-tyylisten merkkijonojen on oltava riittävän pitkiä tekstin ja null-terminaattorin tallentamiseen.
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#
Totuusarvo (bool) edustaa arvoja true tai 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...");
}
}
Totuusarvoja voidaan muuttaa missä tahansa projektin vaiheessa.
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#
Taulukot ovat kiinteän kokoisia kokoelmia samantyyppisistä elementeistä, alkaen indeksistä 0. On hyvä käytäntö tietää taulukon pituus ja määrittää se luomisen yhteydessä.
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#
2D-taulukkoa käytetään yleisesti ruudukoiden, taulukoiden tai matriisien esittämiseen. Jokainen rivi edustaa tiettyä tietoryhmää.
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();
}
}
Voit muokata tiettyjä elementtejä 2D-taulukossa:
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#
Muuttujaa, jonka vakioarvo on const ei voida muokata alustuksen jälkeen.
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);
}