Fonksiyonlar#

giriiş#

Fonksiyonlar, C++ programlamanın temel bir bileşenidir ve kod parçacıklarını belirli bir görevi yerine getirmek üzere tasarlanmış, yeniden kullanılabilir ve verimli kod bölümlerine dönüştürür. Fonksiyonlar bir program içinde birden fazla kez çağrılabilir, bu da kod organizasyonunu kolaylaştırır ve tekrarlanan kodlardan kaçınmaya yardımcı olur. Fonksiyonlar ayrıca kodun hata ayıklamasını da kolaylaştırır.

Bu sayfa, C++’da fonksiyon kullanımının temellerini kapsamaktadır; bunlar arasında şunlar yer almaktadır:

Fonksiyon Yapısı ve Sözdizimi#

C++’da fonksiyonlar, dönüş türü, adı ve parametreleriyle birlikte tanımlanmalıdır. Temel sözdizimi şöyledir:

return_type function_name(parameters) {
  // Code to execute when the function is called
  return result;  // Optional, used to return a value
}

Fonksiyonel Parçalar

Tanım

return_type

Fonksiyonun döndürdüğü veri türü, bazı yaygın seçenekler şunlardır:

  • void — Hiçbir şey döndürmez
  • int — Bir tamsayı değeri döndürür
  • double — Bir ondalık sayı döndürür
  • bool — true veya false
  • char — Tek bir karakter döndürür
  • const char* — Bir metin dizesi döndürür
  • kullanıcı tanımlı türler — Bir struct struct
döndürür

function_name

Fonksiyonun adı.

parameters

İsteğe bağlı. Virgülle ayrılmış, type nameşeklinde yazılmış, tür belirtilmiş parametrelerin listesi; burada type parametrenin veri türünü, name ise fonksiyon içinde bu değere erişmek için kullanılan tanımlayıcıyı belirtir. Parametreler, fonksiyon çağrıldığında giriş değerleri alır.

result

İsteğe bağlı. Fonksiyon tarafından döndürülen değer. Eğer fonksiyonun return_type değeri voiddeğilse, bu değer sağlanmalı ve türü belirtilen return_type ile tam olarak eşleşmelidir.

Not: Bir fonksiyon, çağrılmadan önce* mutlaka bildirilmelidir veya bir fonksiyon prototipi sağlamanız gerekir.

Fonksiyon Prototipleri#

C++’da kod yukarıdan aşağıya doğru okunur. Bu, bir fonksiyonun çağrılabilmesi için derleyici tarafından bilinmesi gerektiği anlamına gelir.

Bir fonksiyon prototipi, tam kodunu yazmadan önce bir fonksiyonu kullanmanıza olanak tanır. Bu, fonksiyon tanımlarını daha sonra, düzenlenmesi ve okunması daha kolay olacak şekilde yerleştirirken, main() kodları programınızın en üstünde tutmanıza olanak tanır.

Prototip olmadan, yukarıdaki her fonksiyonu main()) tanımlamanız gerekir ki bu da projeler büyüdükçe takip edilmesini zorlaştırabilir.

Fonksiyon prototipini tanımlayın ( int main() dışında).

// The function's prototype
void greeting();

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

  greeting();
}

Fonksiyonun gövdesini yazdıktan sonra…

void greeting() {
  Brain.Screen.print("Hello!");
}

Fonksiyonları Tanımlama ve Çağırma#

Functions with No Parameters#

Bir fonksiyon girdi gerektirmiyorsa, onu parametresiz olarak tanımlayabilirsiniz. Fonksiyon değer döndürmüyorsa, dönüş türü olarak void kullanın.

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

// Define a function to display a message
void greeting() {
    Brain.Screen.print("Hello!");
}

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

  // Call the function to display the message
  greeting();
}

Functions with Parameters#

Fonksiyonlara parametreler de ekleyebilirsiniz; bu parametreler, fonksiyonun kullanacağı bilgileri iletmenizi sağlar.

Not: Metin, C tarzı dizeler (const char*) veya C++ dizeleri (std::string ) kullanılarak iletilebilir.

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

// Define a function with a parameter
void namedGreeting(const char* name) {
    Brain.Screen.print("Hello, %s!", name);
}

Fonksiyonu parametreyle çağırın int main()

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

  // Call the function to display the message
  namedGreeting("Stranger");
}

Dönüş Değerleri#

Fonksiyonlar, return anahtar kelimesini kullanarak çağırana veri gönderebilir. Bu, çıktıyı yakalamanıza ve projenizde kullanmanıza olanak tanır.

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

// Define a function that multiplies numbers by 2
int timesTwo(int number) {
    return number * 2;
}

Fonksiyonu parametreyle çağırın int main()

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

  // Display the return value
  Brain.Screen.print("%d", timesTwo(2));
}

Referansla Geçmek#

Varsayılan olarak, C++ fonksiyon parametrelerini değer olarak geçirir; yani fonksiyon orijinal değişkenin bir kopyasını alır. Fonksiyon içinde yapılan değişiklikler orijinal değeri etkilemez.

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

// Add 1 to the number
void addOne(int number) {
  number++;
}

Fonksiyonu parametreyle çağırın int main()

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

  int value = 5;
  addOne(value);
  // "value" will still be 5
}

Bir fonksiyonun orijinal değişkeni değiştirmesine izin vermek için, parametreler & sembolleri kullanılarak referans yoluyla geçirilebilir.

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

// Add 1 to the number
void addOne(int& number) {
  number++;
}

Fonksiyonu parametreyle çağırın int main()

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

  int value = 5;
  addOne(value);
  // "value" will now be 6
}

Referans yoluyla geçirme, fonksiyonların bir değer döndürmeden fonksiyonun dışında tanımlanan değişkenleri güncellemesine olanak tanır.

Geri Çağrı Fonksiyonları#

Geri çağırma fonksiyonu, başka bir fonksiyona aktarılan ve belirli bir olay gerçekleştiğinde otomatik olarak çağrılan bir fonksiyondur.

Geri çağrı fonksiyonları genellikle düğme basma veya sensör güncellemeleri gibi olaylar için kullanılır.

Proje, olayı gerçekleştirdiğinde fonksiyonu kendiniz çağırmak yerine, sizin yerinize çağırır.

Geri çağırma fonksiyonunu tanımlayın ( int main() dışında)

// Create a callback function
void onPressed() {
  Brain.Screen.print("Screen pressed!");
}

Geri çağrıyı main() fonksiyonunun içine kaydedin int main()

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

  // Call onPressed whenever the screen is pressed
  Brain.Screen.pressed(onPressed);
}

Callback Signatures#

Her geri çağırma fonksiyonu, aşağıdakileri tanımlayan belirli bir imzaya uymalıdır:

  • Dönüş türü

  • Parametre sayısı

  • Parametre türleri

Gerekli imza, API tarafından belirlenir. Geri çağrı fonksiyonu bu imzayla birebir eşleşmelidir.

// This callback function cannot include any parameters
void callback(void);

// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);

Parametre adları açıklayıcıdır ve değişiklik gösterebilir, ancak dönüş türü, parametre sırası ve parametre türleri tam olarak eşleşmelidir.

Varsayılan Argümanlara Sahip Fonksiyonlar#

Fonksiyonlar, bir veya daha fazla parametre için varsayılan değerler tanımlayabilir. Fonksiyon çağrıldığında o parametre için hiçbir değer sağlanmadığında varsayılan bir argüman kullanılır.

Varsayılan argümanlar için kurallar:

  • Varsayılan argümanlar, fonksiyon tanımındaki son parametreler olmalıdır.

  • Bir parametreye varsayılan değer atandıktan sonra, ondan sonra gelen tüm parametrelerin de varsayılan değerlere sahip olması gerekir.

  • Bir fonksiyon, prototipinde varsayılan argümanlar belirtiyorsa, bu varsayılan değerler fonksiyon tanımında tekrar belirtilmemelidir.

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

// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {

    for (int i = 0; i < repeatCount; i++) {
        Brain.Screen.print("Hello, %s!", name);
        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();

  // Say what name to greet (EXP) and
  // use default value for repeatCount (1)
  greeting("EXP");

  Brain.Screen.newLine();

  // Overrides the default value to 3
  greeting("EXP", 3);
}

// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {

    for (int i = 0; i < repeatCount; i++) {
        Brain.Screen.print("Hello, %s!", name);
        Brain.Screen.newLine();
    }
}

int main() {
    vexcodeInit();

    // Say what name to greet (EXP) and
    // use default value for repeatCount (1)
    greeting("EXP");

    Brain.Screen.newLine();

    // Overrides the default value to 3
    greeting("EXP", 3);
}