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 — Dönüş tipleri, adları ve parametreleri de dahil olmak üzere fonksiyonların C++’da nasıl yazıldığı.
Fonksiyon Prototipleri — Prototip fonksiyonların ne olduğu ve neden kullanıldıkları.
Fonksiyon Tanımlama ve Çağırma — Fonksiyonları nasıl oluşturacağınız ve programınızdan nasıl çağıracağınız.
Dönüş Değerleri — Fonksiyonların çağırana nasıl veri gönderebileceği.
Referansla Geçirme — Fonksiyonlar, kendi kapsamlarının dışında değişkenleri nasıl değiştirebilir?
Geri Çağrı Fonksiyonları — Fonksiyonların diğer fonksiyonlara nasıl aktarılabileceği ve olaylara yanıt olarak otomatik olarak nasıl çağrılabileceği.
Varsayılan Argümanlı Fonksiyonlar — Hiçbir argüman sağlanmadığında parametrelere varsayılan değerlerin nasıl verilebileceği.
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 |
|---|---|
|
Fonksiyonun döndürdüğü veri türü, bazı yaygın seçenekler şunlardır:
|
|
Fonksiyonun adı. |
|
İsteğe bağlı. Virgülle ayrılmış, |
|
İsteğe bağlı. Fonksiyon tarafından döndürülen değer. Eğer fonksiyonun |
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ınint 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ınint 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ınint main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Say what name to greet (IQ) and // use default value for repeatCount (1) greeting("IQ"); Brain.Screen.newLine(); // Overrides the default value to 3 greeting("IQ", 3); }