Fungsi Statis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 4 dari 61.
Jika kamu memisahkan kode ke beberapa file, setiap fungsi yang didefinisikan dalam file sumber secara default dapat diakses oleh file lain. Namun, terkadang kamu memerlukan fungsi pembantu yang hanya digunakan secara internal: fungsi yang tidak boleh diakses atau bahkan diketahui oleh file lain.
Kata kunci static, jika diterapkan pada fungsi, membatasi visibilitasnya hanya pada file tempat fungsi tersebut didefinisikan. Ini membuat fungsi private yang tidak dapat dipanggil dari file sumber lain, bahkan jika seseorang mencoba mendeklarasikannya.
// math_utils.c
#include "math_utils.h"
// Fungsi pembantu privat, hanya terlihat di file ini
static int square(int x) {
return x * x;
}
// Fungsi publik, bisa dipanggil dari main.c
int sum_of_squares(int a, int b) {
return square(a) + square(b);
}
Dalam contoh ini, sum_of_squares dideklarasikan di header dan bisa digunakan di mana saja. Namun, square ditandai sebagai static, jadi fungsi ini hanya ada di dalam math_utils.c. Jika main.c mencoba memanggil square() secara langsung, linker akan menghasilkan error: fungsi ini memang tidak ada di luar filenya.
Ini adalah cara C menerapkan enkapsulasi di tingkat file. Fungsi static memungkinkan kamu menyembunyikan detail implementasi, menjaga antarmuka publik tetap bersih sambil menggunakan logika bantuan apa pun yang kamu perlukan secara internal.
Tantangan
MudahMari buat kalkulator jarak yang menggunakan fungsi pembantu privat untuk menghitung kuadrat suatu bilangan: detail yang seharusnya tersembunyi dari bagian lain programmu.
Kamu akan membuat tiga file:
distance.h: File header yang mendeklarasikan satu fungsi publikdistance_squaredyang menerima empat bilangan bulat (x1, y1, x2, y2) yang mewakili dua titik dan mengembalikan bilangan bulat. Sertakan pelindung header menggunakan simbolDISTANCE_H.distance.c: File sumber yang berisi implementasi. Buat fungsi pembantustaticbernamasquareyang menerima bilangan bulat dan mengembalikan kuadratnya. Fungsi pembantu ini hanya boleh terlihat di dalamdistance.c. Lalu implementasikandistance_squaredmenggunakan fungsi pembantu statismu untuk menghitung (x2-x1)² + (y2-y1)².main.c: File utama yang menyertakan header dan menggunakan fungsi publik. Fungsi pembantusquaretidak boleh diakses di sini: hanyadistance_squaredyang tersedia.
Fungsi distance_squared menghitung jarak Euclidean kuadrat antara dua titik. Dengan membuat fungsi square bersifat static, kamu menyembunyikan detail implementasi ini dari kode mana pun di luar distance.c.
Kamu akan menerima empat input bilangan bulat: x1, y1, x2, dan y2.
Cetak jarak kuadrat dengan format ini:
Squared distance: {result}Misalnya, untuk titik (0, 0) dan (3, 4), output-nya adalah:
Squared distance: 25Coba sendiri
#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: Panggil distance_squared dengan koordinat input
// dan cetak hasilnya dalam format: "Squared distance: {result}"
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online