Menu
Coddy logo textTech

Statik Fonksiyonlar

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 4 / 61.

Kodu birden fazla dosyaya böldüğünüzde, bir kaynak dosyada tanımlanan her fonksiyon varsayılan olarak diğer dosyalar tarafından görülebilir. Ancak bazen sadece dahili olarak kullanılması gereken yardımcı fonksiyonlara ihtiyaç duyarsınız; diğer dosyaların erişmemesi, hatta hakkında bilgi sahibi bile olmaması gereken fonksiyonlar.

static anahtar kelimesi, bir fonksiyona uygulandığında, görünürlüğünü tanımlandığı dosya ile sınırlandırır. Bu, birisi onu bildirmeye çalışsa bile diğer kaynak dosyalardan çağrılamayan özel bir fonksiyon oluşturur.

// math_utils.c
#include "math_utils.h"

// Özel yardımcı - sadece bu dosyada görünür
static int square(int x) {
    return x * x;
}

// Genel fonksiyon - main.c dosyasından çağrılabilir
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

Bu örnekte, sum_of_squares başlık dosyasında bildirilmiştir ve her yerde kullanılabilir. Ancak, square static olarak işaretlenmiştir, bu nedenle sadece math_utils.c içinde mevcuttur. Eğer main.c doğrudan square() fonksiyonunu çağırmaya çalışırsa, bağlayıcı (linker) bir hata üretecektir—fonksiyon basitçe dosyası dışında mevcut değildir.

Bu, C'nin dosya düzeyinde kapsülleme (encapsulation) sağlama yöntemidir. Static fonksiyonlar, uygulama detaylarını gizlemenize olanak tanıyarak, dahili olarak ihtiyaç duyduğunuz her türlü yardımcı mantığı kullanırken genel arayüzünüzü temiz tutmanızı sağlar.

challenge icon

Görev

Kolay

Bir sayının karesini hesaplamak için özel bir yardımcı fonksiyon kullanan bir mesafe hesaplayıcı oluşturalım; bu, programınızın geri kalanından gizli kalması gereken bir ayrıntıdır.

Üç dosya oluşturacaksınız:

  • distance.h: İki noktayı temsil eden dört tam sayı (x1, y1, x2, y2) alan ve bir tam sayı döndüren tek bir genel fonksiyon olan distance_squared fonksiyonunu bildiren başlık dosyanız. DISTANCE_H sembolünü kullanarak include guard yapılarını dahil edin.
  • distance.c: Uygulamayı içeren kaynak dosyanız. Bir tam sayı alan ve karesini döndüren square adında static bir yardımcı fonksiyon oluşturun. Bu yardımcı fonksiyon yalnızca distance.c içinde görünür olmalıdır. Ardından, (x2-x1)² + (y2-y1)² değerini hesaplamak için statik yardımcı fonksiyonunuzu kullanarak distance_squared fonksiyonunu uygulayın.
  • main.c: Başlık dosyasını dahil eden ve genel fonksiyonu kullanan ana dosyanız. square yardımcı fonksiyonuna buradan erişilememelidir; yalnızca distance_squared kullanılabilir olmalıdır.

distance_squared fonksiyonu, iki nokta arasındaki karesel Öklid mesafesini hesaplar. square fonksiyonunu statik tutarak, bu uygulama detayını distance.c dışındaki tüm kodlardan gizlemiş olursunuz.

Dört tam sayı girişi alacaksınız: x1, y1, x2 ve y2.

Karesel mesafeyi şu formatta yazdırın:

Squared distance: {result}

Örneğin, (0, 0) ve (3, 4) noktaları için çıktı şöyle olacaktır:

Squared distance: 25

Kopya kağıdı

static anahtar kelimesi, bir fonksiyonun görünürlüğünü tanımlandığı dosya ile sınırlandırarak, diğer kaynak dosyalardan çağrılamayan özel bir fonksiyon oluşturur.

// Özel yardımcı - sadece bu dosyada görünür
static int square(int x) {
    return x * x;
}

// Genel fonksiyon - diğer dosyalardan çağrılabilir
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

Statik fonksiyonlar dosya düzeyinde kapsülleme sağlayarak, genel arayüzünüzü temiz tutarken uygulama ayrıntılarını gizlemenize olanak tanır.

Kendin dene

#include <stdio.h>
#include "distance.h"

int main() {
    int x1, y1, x2, y2;
    scanf("%d", &x1);
    scanf("%d", &y1);
    scanf("%d", &x2);
    scanf("%d", &y2);
    
    // TODO: Giriş koordinatlarıyla distance_squared fonksiyonunu çağırın
    // ve sonucu şu formatta yazdırın: "Squared distance: {result}"
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler