Modüller ve Organizasyon
BERK'te modül sistemi, kodunuzu organize etmek, yeniden kullanılabilirliği artırmak ve büyük projeleri yönetmeyi kolaylaştırmak için tasarlanmıştır.
Modül Temelleri
Her BERK dosyası bir modül olarak değerlendirilir. Modüller, ilgili fonksiyonları, yapıları ve sabitleri bir araya getirmenizi sağlar.
Basit Modül Örneği
// matematik.berk
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
dışa_aktar sabit PI = 3.14159
Modül Kullanımı
Kullan İfadesi (Yerel Modüller)
kullan ifadesi ile yerel modüllerden sembol içe aktarabilirsiniz:
// Tek fonksiyon içe aktarma
kullan matematik::topla;
// Birden fazla öğe içe aktarma
kullan matematik::{topla, çarp, PI};
// Tüm dışa aktarılanları içe aktarma
kullan matematik::*;
// Takma ad ile içe aktarma
kullan matematik::PI olarak pi_sayısı;
İçe_aktar İfadesi (Harici Paketler)
içe_aktar ifadesi harici paketleri yüklemek için kullanılır:
// Harici paket içe aktarma
içe_aktar "serde" olarak json;
// Seçici içe aktarma
içe_aktar "http"::{get, post, İstek};
Modül Organizasyonu
Dizin Yapısı
Modüller dosya sistemi yapısını takip eder:
proje/
├── ana.berk
├── matematik/
│ ├── temel.berk
│ ├── geometri.berk
│ └── istatistik.berk
└── metin/
├── işlemler.berk
└── biçimlendir.berk
Modül Yolları
// Alt modül kullanımı
kullan matematik::geometri::alan_hesapla;
// İç içe modüller
kullan matematik::geometri::{alan, çevre};
Dışa Aktarma
Tek Öğe Dışa Aktarma
dışa_aktar fonksiyon hesapla() -> sayı
yap
dön 42
son
Birden Fazla Öğe Dışa Aktarma
// Gruplama sözdizimi
dışa_aktar { fonk1, fonk2, YapıAdı };
// Her birini ayrı ayrı
dışa_aktar fonksiyon fonk1() yap son
dışa_aktar fonksiyon fonk2() yap son
dışa_aktar yapı YapıAdı yap son
Görünürlük Kuralları
BERK'te görünürlük varsayılan olarak özeldir (private):
- Dışa aktarılan öğeler diğer modüller tarafından kullanılabilir
- Dışa aktarılmayan öğeler yalnızca modül içinde kullanılabilir
// Bu fonksiyon dışa aktarıldı - dışarıdan erişilebilir
dışa_aktar fonksiyon genel_işlev() yap son
// Bu fonksiyon dışa aktarılmadı - yalnızca modül içinde
fonksiyon özel_işlev() yap son
Modül Çözümleme
Arama Yolları
BERK derleyicisi modülleri şu sırayla arar:
- Geçerli dizin (
.) ./src/dizini./stdlib/dizini- Harici paket yolları (
~/.berk/packages/)
Sembol Önceliği
İsim çakışmaları durumunda öncelik sırası:
- Yerel kapsam değişkenleri
- İçe aktarılan semboller
- Modül global'leri
En İyi Uygulamalar
Modül Organizasyon Önerileri
- ✅ İlgili kodu grupla: Aynı fonksiyonaliteyi sağlayan kod aynı modülde olmalı
- ✅ Açık isimler kullan: Modül isimleri içeriği net bir şekilde belirtmeli
- ✅ Gereksiz dışa aktarma yapma: Sadece API'nin parçası olması gereken öğeleri dışa aktar
- ✅ Döngüsel bağımlılıklardan kaçın: A -> B -> A şeklinde bağımlılıklar sorun yaratır
İçe Aktarma Stilleri
// ✅ İyi: Açık ve okunabilir
kullan matematik::geometri::{alan, çevre};
// ⚠️ Dikkatli kullan: Tüm içe aktarmalar isim çakışmasına neden olabilir
kullan matematik::*;
// ✅ İyi: Uzun isimler için takma ad
kullan matematik::trigonometri olarak trig;
Gelişmiş Özellikler
Modül Tanımı
Bir dosya içinde satır içi modül tanımlayabilirsiniz:
modül yardımcılar yap
dışa_aktar fonksiyon yardımcı() yap
yazdır("Yardımcı fonksiyon")
son
son
kullan yardımcılar::yardımcı;
Yeniden Dışa Aktarma
Bir modülden içe aktardığınız öğeleri kendi modülünüzden dışa aktarabilirsiniz:
// matematik/index.berk
kullan matematik::temel::*;
kullan matematik::geometri::*;
// Tüm alt modül fonksiyonlarını dışa aktar
dışa_aktar *;
Paket Yönetimi (BPM)
BERK Paket Yöneticisi (BPM) ile harici paketleri yönetebilirsiniz:
berk.toml Yapılandırması
[package]
name = "projemiz"
version = "1.0.0"
[dependencies]
serde = "1.0"
http = "0.2"
Paket Kullanımı
içe_aktar "serde" olarak json;
fonksiyon ana() yap
değişken veri = json::serileştir({isim: "Ali", yaş: 30})
yazdır(veri)
son
Örnek Proje Yapısı
// src/matematik/temel.berk
dışa_aktar fonksiyon topla(a: sayı, b: sayı) -> sayı yap
dön a + b
son
// src/matematik/geometri.berk
dışa_aktar fonksiyon alan(r: kesir) -> kesir yap
kullan matematik::temel::çarp;
dön 3.14159 * r * r
son
// src/ana.berk
kullan matematik::temel::topla;
kullan matematik::geometri::alan;
fonksiyon ana() yap
değişken sonuç1 = topla(5, 3)
değişken sonuç2 = alan(2.5)
yazdır("Toplam: " + sonuç1)
yazdır("Alan: " + sonuç2)
son
Özet
- Her dosya bir modüldür
kullanyerel modüller için,içe_aktarharici paketler içindışa_aktaröğeleri diğer modüllere açar- Modüller dizin yapısını takip eder
- Görünürlük varsayılan olarak özeldir
- BPM ile paket yönetimi desteklenir