Import ve Export
BERK'te modüller arası kod paylaşımı kullan, içe_aktar ve dışa_aktar anahtar kelimeleri ile yapılır.
dışa_aktar (Export)
Temel Kullanım
dışa_aktar anahtar kelimesi, bir öğeyi diğer modüllerden erişilebilir yapar:
// Fonksiyon dışa aktarma
dışa_aktar fonksiyon topla(a: sayı, b: sayı) -> sayı yap
dön a + b
son
// Sabit dışa aktarma
dışa_aktar sabit MAKSIMUM = 100
// Yapı dışa aktarma
dışa_aktar yapı Nokta yap
x: sayı
y: sayı
son
// Enum dışa aktarma
dışa_aktar enum Renk yap
Kırmızı
Yeşil
Mavi
son
Grup Dışa Aktarma
// Birden fazla öğeyi birlikte dışa aktar
dışa_aktar { topla, çarp, böl, PI, Nokta };
// Veya tek tek
dışa_aktar fonksiyon topla(a: sayı, b: sayı) -> sayı yap dön a + b son
dışa_aktar fonksiyon çarp(a: sayı, b: sayı) -> sayı yap dön a * b son
Varsayılan Görünürlük
BERK'te varsayılan görünürlük özel (private)dir:
// Bu fonksiyon SADECE bu modülde kullanılabilir
fonksiyon dahili_fonksiyon() yap
// özel kod
son
// Bu fonksiyon DİĞER modüllerden erişilebilir
dışa_aktar fonksiyon genel_fonksiyon() yap
dahili_fonksiyon() // Modül içinde kullanılabilir
son
kullan (Use) - Yerel Modüller
Basit İçe Aktarma
// Tek bir fonksiyon
kullan matematik::topla;
// Birden fazla öğe
kullan matematik::{topla, çarp, böl};
// Tüm dışa aktarılanlar
kullan matematik::*;
Alt Modül Kullanımı
// İç içe modül yolları
kullan matematik::geometri::alan;
kullan matematik::geometri::{alan, çevre, hacim};
// Modülün kendisini içe aktar
kullan matematik::geometri;
// Kullanımı: geometri::alan(5.0)
Takma Ad (Aliasing)
// Fonksiyon için takma ad
kullan matematik::topla olarak toplama;
kullan matematik::çarp olarak çarpım;
// Modül için takma ad
kullan matematik::geometri olarak geo;
// Kullanım
değişken sonuç = toplama(5, 10)
değişken alan = geo::daire_alanı(3.0)
içe_aktar (Import) - Harici Paketler
Harici Paket Kullanımı
içe_aktar harici paketleri projeye dahil eder:
// Tüm paketi içe aktar
içe_aktar "serde" olarak json;
// Belirli öğeleri içe aktar
içe_aktar "http"::{get, post, İstek};
// Versiyon belirterek
içe_aktar "json@1.0.5";
Paket Yapılandırması
berk.toml dosyasında bağımlılıklar:
[dependencies]
serde = "1.0"
http = "0.2"
json = { version = "1.0", features = ["preserve_order"] }
kullan vs içe_aktar
| Özellik | kullan | içe_aktar |
|---|---|---|
| Kullanım | Yerel modüller | Harici paketler |
| Kaynak | Proje içi dosyalar | Dışarıdan paketler |
| Yol | Dosya sistemi | Paket yöneticisi |
| Örnek | kullan matematik::topla | içe_aktar "serde" |
Modül Yolu Örnekleri
Proje Yapısı
proje/
├── ana.berk
├── matematik/
│ ├── temel.berk
│ ├── geometri.berk
│ └── ileri/
│ ├── calculus.berk
│ └── linear.berk
└── io/
└── dosya.berk
İçe Aktarma Örnekleri
// ana.berk içinde:
// Temel matematik fonksiyonları
kullan matematik::temel::{topla, çarp};
// Geometri modülünün tamamı
kullan matematik::geometri;
// İç içe modül
kullan matematik::ileri::calculus::türev;
// IO modülü
kullan io::dosya::{oku, yaz};
Re-export (Yeniden Dışa Aktarma)
Bir modül, başka bir modülden içe aktardığı öğeleri tekrar dışa aktarabilir:
// matematik/index.berk
kullan matematik::temel::topla;
kullan matematik::geometri::alan;
// Yeniden dışa aktar
dışa_aktar { topla, alan };
// ana.berk
kullan matematik::{topla, alan}; // Her ikisi de kullanılabilir
Wildcard Import
// Tüm dışa aktarılanları içe aktar
kullan matematik::*;
// Kullanım
değişken sonuç = topla(5, 10) // matematik::topla çağrıldı
⚠️ Dikkat: Wildcard import isim çakışmalarına yol açabilir. Dikkatli kullanın!
Circular Dependencies (Döngüsel Bağımlılıklar)
BERK döngüsel bağımlılıklara izin vermez:
// ❌ YANLIŞ: A → B → A
// modül_a.berk
kullan modül_b;
// modül_b.berk
kullan modül_a; // HATA: Döngüsel bağımlılık!
✅ Çözüm: Ortak kodu üçüncü bir modüle taşıyın:
// ortak.berk
dışa_aktar fonksiyon paylaşılan() yap son
// modül_a.berk
kullan ortak;
// modül_b.berk
kullan ortak;
En İyi Uygulamalar
Açık İçe Aktarmalar
// ✅ İyi: Açık ve okunabilir
kullan matematik::{topla, çarp, PI};
// ❌ Kötü: Ne içe aktarıldığı belirsiz
kullan matematik::*;
Minimal Dışa Aktarma
// ✅ İyi: Sadece gerekli API
dışa_aktar fonksiyon işle() yap
dahili_yardımcı()
son
fonksiyon dahili_yardımcı() yap
// özel implementasyon
son
// ❌ Kötü: Gereksiz dışa aktarma
dışa_aktar fonksiyon dahili_yardımcı() yap son
Tutarlı İsimlendirme
// Modül isimleri: küçük harf, alt çizgi
matematik_ileri.berk
dosya_sistemi.berk
// Fonksiyon isimleri: küçük harf, alt çizgi
dışa_aktar fonksiyon hesaplama_yap() yap son
// Yapı/Enum isimleri: PascalCase
dışa_aktar yapı KullanıcıVerisi yap son
Özet
- ✅
dışa_aktar: Öğeleri dışarıya açar - ✅
kullan: Yerel modüllerden içe aktarır - ✅
içe_aktar: Harici paketleri yükler - ✅
olarak: Takma ad oluşturur - ✅
::: Modül yolu ayracı - ✅
*: Tüm öğeleri içe aktarır (dikkatli kullanın) - ❌ Döngüsel bağımlılıklardan kaçının
- ✅ Açık içe aktarmaları tercih edin