Değişkenler#

giriiş#

Değişkenler veri depolar ve programınız boyunca bu verileri yeniden kullanmanıza ve manipüle etmenize olanak tanır. C++, statik olarak tiplendirilmiş bir dildir; yani bir değişkeni oluştururken türünü açıkça belirtmeniz gerekir. Tür, bildirimden sonra değiştirilemez. Örneğin:

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++ aynı zamanda kesinlikle tiplendirilmiş bir dildir; bu, uyumsuz türler üzerinde açık bir dönüştürme yapmadan işlem gerçekleştiremeyeceğiniz anlamına gelir. Örneğin:

int blocks = 2;              // blocks is an integer
char rings[] = "4";          // rings is a string
int result = blocks + rings; // Creates a compilation error

Bu API, C++’da yaygın olarak kullanılan değişken türlerini açıklamaktadır. Kapsamlı bir liste olmamakla birlikte, pratikte en çok kullanmanız muhtemel türleri kapsamaktadır.

  • Yerel değişkenler — Bir fonksiyonun içinde tanımlanır ve yalnızca o kapsam içinde kullanılır; geçici veya izole değerler için en iyisidir.

  • Küresel değişkenler — Herhangi bir fonksiyonun dışında tanımlanır ve proje boyunca kullanılır; fonksiyonlar arasında veri paylaşımı için uygundur.

  • Tamsayı — Sayma, mesafe veya ondalık basamak içermeyen her şey için kullanılan tam sayılar.

  • Çift — Doğruluk gerektiren matematiksel hesaplamalar için yüksek hassasiyetli ondalık sayılar.

  • Float — Ölçümler veya hesaplamalar için kullanışlı, standart hassasiyetli ondalık sayılar.

  • C-stili Dize — Mesajlar, etiketler veya okunabilir çıktı görüntülemek için kullanılan metin değerleri.

  • Mantıksal (bool) — true veya false mantık ve karar verme için değerler.

  • Diziler — Aynı türden öğelerin sabit boyutlu koleksiyonları.

  • 2B Diziler — Dizilerin dizileri; satırları, ızgaraları veya tablo benzeri verileri temsil etmek için idealdir.

  • Const — const ile tanımlanmış bir değişken değiştirilemez.

Değişken Tanımlama ve Değer Ataması#

C++’da bir değişken oluşturmak için, önce türünü, ardından değişken adını belirtmeli ve isteğe bağlı olarak = operatörünü kullanarak bir değer atamalısınız:

int distance = 100;

Bir değişkene isim verirken aşağıdaki kurallara uyulmalıdır:

  • İsim özel karakterler (örneğin, ünlem işareti) içeremez.

  • İsim bir rakamla başlayamaz.

  • İsimde boşluk kullanılamaz.

  • İsim, önceden tanımlanmış VEXcode nesneleriyle (örneğin, Drivetrain ) çakışmamalıdır.

  • Bu isim, C++’da ayrılmış bir anahtar kelime olamaz (örneğin, int, for, vb.).

  • Değişken adları büyük/küçük harf duyarlıdır (örneğin, Distance ve distance farklı değişkenlerdir).

Local Variables#

Yerel değişkenler, bir fonksiyonun veya kod bloğunun içinde tanımlanır. Yalnızca o fonksiyon veya bloğun kapsamı içinde erişilebilirler ve dışında görünmezler.

Fonksiyonu tanımlayın ( int main() dışında)

void show_local() {
  // This variable only exists inside this function
  int angle = 90;
  Brain.Screen.print("%d", angle);
}

int main() içindeki fonksiyonu çağırın

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Begin project code
  show_local();
}

Yerel değişkenler genellikle yalnızca belirli bir fonksiyon veya programın belirli bir bölümü içinde geçerli olan geçici değerleri saklamak için kullanılır.

Global Variables#

Küresel değişkenler, herhangi bir fonksiyon veya bloğun dışında tanımlanır. Fonksiyonların içi de dahil olmak üzere programın her yerinde erişilebilir ve okunabilirler.

Not: Global değişkenler, programın herhangi bir yerinden erişilebilir oldukları için fonksiyonlar arasında veri paylaşımını kolaylaştırabilirler. Ancak, global değişkenlere aşırı güvenmek, programın bir bölümündeki değişkende yapılan değişikliklerin diğer bölümleri öngörülemeyen şekilde etkileyebilmesi nedeniyle istenmeyen yan etkilere yol açabilir. Bu nedenle, mümkün olduğunca yerel değişkenler tercih edilir, çünkü bunlar bir değişkenin kapsamını tanımlandığı belirli fonksiyonla sınırlandırır. Bu, çakışma olasılığını azaltır ve hata ayıklamayı kolaylaştırır.

Fonksiyonu tanımlayın ( int main() dışında)

// 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() içindeki fonksiyonu çağırın

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++’da global değişkenlere, herhangi bir özel anahtar kelimeye gerek kalmadan fonksiyonlar içinden doğrudan erişilebilir ve değiştirilebilir. Ancak, aynı ada sahip yerel bir değişkeniniz varsa, global değişkene erişmek için :: kapsam çözümleme operatörünü kullanabilirsiniz.

Fonksiyonu tanımlayın ( int main() dışında)

// 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() içindeki fonksiyonu çağırın

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Begin project code
  increase_count();
  increase_count();
}

Veri Türleri#

C++, değişkenlerde saklanabilen çeşitli veri türlerini destekler. Bazı türler yeniden atanabilirken, diğerleri tek tek öğelerin değiştirilmesine izin verir. Aşağıda en yaygın kullanılan türler yer almaktadır:

Integer#

Bir tam sayı (int), tam sayıdır.

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, yüksek hassasiyete sahip (genellikle 64 bit) ondalıklı bir sayıdır.

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, ondalık sayıları saklar. Çoğu VEX projesinde, bellek kullanımı bir sorun teşkil etmediği sürece, float yerine double tercih edilir.

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 tarzı bir dize (char variable_name[]), bir karakter dizisinde saklanan bir karakter dizisidir. C tarzı dizeler, metni ve bir null sonlandırıcıyı saklayacak kadar büyük olmalıdır.

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#

Bir Mantıksal (bool) true veya false değerini temsil eder.

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...");
  }
}

Mantıksal değerler projenin herhangi bir aşamasında değiştirilebilir.

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#

Diziler, 0. indeksten başlayarak aynı türden elemanların sabit boyutlu koleksiyonlarıdır. Dizinin uzunluğunu bilmek ve oluşturma sırasında belirtmek iyi bir uygulamadır.

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#

2 boyutlu diziler, genellikle ızgaraları, tabloları veya matrisleri temsil etmek için kullanılır. Her satır, belirli bir veri grubunu temsil eder.

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();
  }
}

2 boyutlu bir dizideki belirli öğeleri değiştirebilirsiniz:

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 ile tanımlanmış bir değişken, başlatıldıktan sonra değiştirilemez.

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);
}