🚀 BAŞTAN SONA RUST DİLİ BÖLÜM-10: Modül Sistemi ve Proje Yönetimi 📦

Konu Özeti

Rust'ın modül sistemi; paketler, crate'ler, modüller ve yol yapılarıyla kodun düzenlenmesini sağlar. Varsayılan olarak özel olan öğelere erişim için `pub` anahtar kelimesi kullanılır. `use` ile kapsama dahil etme, `as` ile takma ad verme ve glob operatörüyle toplu içe aktarma yöntemleri açıklanır. Ayrıca modüllerin farklı dosyalara bölünmesi ve proje yönetimi ele alınır.

🚀 BAŞTAN SONA RUST DİLİ BÖLÜM-10: Modül Sistemi ve Proje Yönetimi 📦

Selamlar! Serimizin 10. bölümüne hoş geldiniz.

Önceki bölümde `Vector`, `String` ve `HashMap` gibi dinamik koleksiyon yapılarını detaylarıyla incelemiştik. Bu bölümde ise kodlarımız büyüdükçe onları nasıl düzenli tutacağımızı, bağımlılıkları nasıl yöneteceğimizi ve projelerimizi nasıl modüllere ayıracağımızı göreceğiz.

Rust'ın modül sistemi (Module System) şu yapılardan oluşur:
1. **Packages (Paketler):** Bir veya birden fazla Crate oluşturan ve bir `Cargo.toml` dosyasına sahip olan Cargo özelliği.
2. **Crates (Kasa/Kütüphane):** Çalıştırılabilir (binary) veya kütüphane (library) üreten ağaç yapısındaki kod blokları.
3. **Modules (Modüller) ve `use`:** Kodun okunabilirliğini, kapsamını (scope) ve gizliliğini/erişimini (privacy) yöneten yapılar.
4. **Paths (Yollar):** Bir öğeye (struct, function, enum vb.) erişmek için kullanılan isimlendirme yöntemi.

---

📦 1. Packages ve Crates Mantığı 🧱

• **Crate:** Rust derleyicisinin aynı anda değerlendirdiği en küçük kod birimidir. İki türü vardır:
- **Binary Crate:** `main()` fonksiyonu içerir ve çalıştırılabilir bir dosya (`.exe` / binary) üretir.
- **Library Crate:** `main()` içermez, diğer projelere fonksiyonellik/kütüphane sağlamak için yazılır.

• **Package:** Bir veya birden fazla Crate'i barındıran yapı kümesidir. İçinde ne olması gerektiğini bir `Cargo.toml` dosyası tanımlar.
- Bir Paket içinde istediğiniz kadar Binary Crate olabilir ancak **en fazla BİR adet Library Crate** bulunabilir.

Standart dizin yapısı:
- `src/main.rs`: Binary Crate'in kök (root) dosyasıdır.
- `src/lib.rs`: Library Crate'in kök (root) dosyasıdır.

---

📁 2. Modüller (`mod`) ve Erişim Kontrolü (`pub`) 🔒

Modüller, ilgili fonksiyonları, struct'ları ve enum'ları gruplamamızı sağlar.

**En Önemli Kural:** Rust'ta her şey varsayılan olarak **ÖZELDİR (PRIVATE)**! Dışarıdan erişilmesini istediğimiz her yapının önüne `pub` (public) anahtar kelimesini eklemeliyiz.

Örnek bir restoran yapısı kuralım (`src/lib.rs` veya `src/main.rs` içine):

mod ön_buro {
pub mod ev_sahipligi {
pub fn masaya_oturt() {
println!("Müşteri masaya oturtuldu.");
}

fn siparis_al() { // Private fonksiyon, dışarıdan çağrılamaz!
println!("Sipariş alındı.");
}
}

mod mutfak {
fn yemek_pisir() {}
}
}

pub fn restoranda_ye() {
// 1. Mutlak Yol (Absolute Path): Crate kökünden başlar
crate::ön_buro::ev_sahipligi::masaya_oturt();

// 2. Göreli Yol (Relative Path): Bulunduğumuz konumdan başlar
ön_buro::ev_sahipligi::masaya_oturt();
}

---

🛣️ 3. Paths (Yollar) ve `super` Kullanımı 🧭

Bir öğeye erişirken 2 yol kullanabiliriz:
- **Absolute Path:** `crate` kelimesi ile başlayarak en üst kökten hedefe iner.
- **Relative Path:** `self`, `super` veya mevcut modül ismiyle başlar.

`super` anahtar kelimesi, dosya sistemlerindeki `..` (üst klasöre çık) mantığıyla çalışır. Ebeveyn (parent) modüle erişmek için kullanılır.

mod mutfak {
fn ahci_siparis_verdi() {
siparis_teslim_et();
super::kasa_islemleri::fis_kes(); // Üst modüldeki kasa_islemleri'ne erişim
}

fn siparis_teslim_et() {}
}

mod kasa_islemleri {
pub fn fis_kes() {}
}

---

🏷️ 4. Struct ve Enum'larda `pub` Mantığı 🎭

Struct veya Enum'ları `pub` yapmak içindeki alanların (fields) otomatik olarak `pub` olacağı anlamına GELMEZ!

### Struct'larda `pub`:
Struct `pub` olsa bile her alanını (field) tek tek `pub` yapmak gerekir.

pub struct Kahvalti {
pub tost: String, // Dışarıdan erişilebilir ve değiştirilebilir
mevsim_meyvesi: String, // Özeldir, doğrudan erişilemez
}

impl Kahvalti {
pub fn yaz_kahvaltisi(tost_tipi: &str) -> Kahvalti {
Kahvalti {
tost: String::from(tost_tipi),
mevsim_meyvesi: String::from("Elma"),
}
}
}

### Enum'larda `pub`:
Enum'ın önüne `pub` koyarsanız, **tüm varyantları otomatik olarak public olur!**

pub enum SiparisDurumu {
Hazirlaniyor,
Yolda,
TeslimEdildi,
}

---

🔗 5. `use` Anahtar Kelimesi ve Takma İsimler (`as`) 🛠️

Her defasında `crate::ön_buro::ev_sahipligi::masaya_oturt()` yazmak kod kalabalığı yaratır. Bunun yerine `use` ile modülü/öğeyi mevcut kapsama (scope) dahil ederiz.

use crate::ön_buro::ev_sahipligi;
use std::collections::HashMap;
use std::fmt::Result;
use std:🇮🇴:Result as IoResult; // 'as' ile isim çakışmalarını önleme

fn main() {
ev_sahipligi::masaya_oturt();

let mut map = HashMap::new();
map.insert(1, 2);
}

### İç İe İçe Aktarma (Nested Paths) ve Glob Operatörü (`*`):

// Ayrı ayrı yazmak yerine:
// use std::cmp::Ordering;
// use std::io;

// Tek satırda birleştirme:
use std::{cmp::Ordering, io};

// Bir modüldeki TÜM public ögeleri içeri alma (Glob):
use std::collections::*;

---

🗂️ 6. Modülleri Farklı Dosyalara Bölme 📄

Projemiz büyüdükçe her şeyi tek bir `main.rs` dosyasına yazmak imkansız hale gelir. Modülleri dosyalara ayırmak oldukça basittir.

Proje Dizini:
src/
├── main.rs
└── bahce.rs <-- Modül dosyası

`src/bahce.rs` Dosyası İçeriği:
pub fn bitki_sula() {
println!("Bitkiler sulandı.");
}

`src/main.rs` Dosyası İçeriği:
mod bahce; // Rust'a 'bahce.rs' adında bir dosya olduğunu ve modül olarak yüklemesini söyler

fn main() {
bahce::bitki_sula();
}

---

📝 Bölüm Özeti ve Gelecek Bölüm 🔮

Bu bölümde Rust'ın paket, crate ve modül organizasyonunu, `pub` ile görünürlük kontrollerini ve projeleri temiz tutmak için dosyalaştırma tekniklerini inceledik.

👉 **Bölüm 11'de Bizi Ne Bekliyor?**
• Rust'ın Şablon Gücü: **Generics (Jenerikler)**
• `struct`, `enum` ve `
fn` yapılarında Generics kullanımı
• Bellek ve Performans Etkisi: Monomorphization

Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! 🦀✨

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
136,675Threads
3,307,515Messages
328,524Members
denLatest member
Top Bottom