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.

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

int main() {
  greeting();
}

// Write the function's body after
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.

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

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    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.

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

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    vexcodeInit();
    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.

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

int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    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.

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

int main() {
  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.

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

int main() {
  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.

void onPressed() {
  Brain.Screen.print("Screen pressed!");
}

// Call onPressed whenever the screen is pressed
int main() {
  vexcodeInit();
  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.

// 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 (V5) and
    // use default value for repeatCount (1)
    greeting("V5");

    Brain.Screen.newLine();

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