-
Sadrazamv4
ig:sadrazam_v4 tg: Sadrazam.spy
🚀 BAŞTAN SONA RUST DİLİ BÖLÜM-3: Fonksiyonlar, Expressions vs Statements ve Akış Kontrolleri 🦀
Selamlar! Serimizin 3. bölümüne hoş geldiniz.
Önceki bölümde değişkenleri, mutability mantığını ve temel veri tiplerini öğrenmiştik. Bu bölümde ise programlarımızın mantıksal omurgasını oluşturan Fonksiyonlar, İfadeler (Expressions), Deyimler (Statements) ve Akış Kontrollerini (if/else, döngüler) inceleyeceğiz.
---
📌 1. Fonksiyonlar (Functions) ⚙️
Rust'ta fonksiyon tanımlamak için `fn` anahtar kelimesi kullanılır. Fonksiyon isimlerinde standart olarak **snake_case** (küçük harfler ve kelimeler arası alt çizgi) yazım kuralı benimsenmiştir.
fn main() {
println!("Ana fonksiyon çalışıyor...");
baska_fonksiyon(5, '🦀');
}
fn baska_fonksiyon(x: i32, birim_etiket: char) {
println!("Gelen parametreler: {} ve {}", x, birim_etiket);
}
⚠️ Önemli Kural: Fonksiyon parametrelerinin tiplerini (type annotation) açıkça belirtmek ZORUNDASINIZDIR.
---
📤 2. Geriye Değer Döndüren Fonksiyonlar 🔄
Geriye değer döndüren fonksiyonlarda, dönen veri tipini ok işareti (`->`) ile belirtiriz.
fn topla(a: i32, b: i32) -> i32 {
a + b // Noktalı virgül YOK!
}
fn main() {
let sonuc = topla(10, 20);
println!("Toplam: {}", sonuc);
}
---
💡 3. Statements (Deyimler) vs Expressions (İfadeler) 🧠
Rust, "Expression-based" (İfade tabanlı) bir dildir. Bu ayrımı anlamak Rust yazarken kritik önem taşır:
• Statement (Deyim): Bir eylem gerçekleştirir ancak geriye bir değer DÖNDÜRMEZ. Sonu noktalı virgül (`;`) ile biter.
Örnek: `let x = 6;` bir statement'tır.
• Expression (İfade): Değerlendirilir ve geriye bir değer DÖNDÜRÜR. Sonu noktalı virgül (`;`) ile BİTMEZ.
Örnek: `5 + 6` ifadesi `11` değerini döndürür.
Fonksiyonlarda son satıra noktalı virgül koymazsanız, Rust o ifadeyi fonksiyonun dönüş değeri (return value) olarak kabul eder. Eğer noktalı virgül eklerseniz, ifade statement'a dönüşür ve geriye `()` (unit tuple) döner!
fn kare_al(x: i32) -> i32 {
x * x // Expression -> Geriye x*x döndürür.
}
---
🔀 4. Akış Kontrolleri: `if / else` 🚦
Rust'ta `if` bir statement değil, bir **expression**'dır! Yani geriye değer döndürebilir.
fn main() {
let sayi = 6;
if sayi % 4 == 0 {
println!("Sayı 4'e tam bölünür");
} else if sayi % 3 == 0 {
println!("Sayı 3'e tam bölünür");
} else {
println!("Sayı koşulları sağlamıyor");
}
}
⚠️ Dikkat: `if` koşulundaki ifadenin kesinlikle `bool` olması gerekir. C veya Python'daki gibi `if sayi { ... }` yazamazsınız (implicit coercion yoktur).
#### `if` İfadesini Değişken Atamasında Kullanmak:
`if` bir expression olduğu için sonucu doğrudan bir değişkene atayabiliriz:
fn main() {
let kosul = true;
let sayi = if kosul { 5 } else { 6 }; // İki koldan dönen tipler aynı olmalıdır!
println!("Sayı: {}", sayi);
}
---
🔄 5. Döngüler (Loops) 🌀
Rust'ta 3 farklı döngü mekanizması vardır: `loop`, `while` ve `for`.
### A. `loop` (Sonsuz Döngü ve Değer Döndürme)
Siz `break` ile durdurana kadar sonsuza kadar çalışır. `break` ile birlikte döngüden değer döndürmek mümkündür!
fn main() {
let mut sayac = 0;
let sonuc = loop {
sayac += 1;
if sayac == 10 {
break sayac * 2; // Döngüyü bitir ve bu değeri döndür!
}
};
println!("Sonuç: {}", sonuc); // 20 yazar
}
### B. `while` (Koşullu Döngü)
Belirli bir koşul sağlandığı sürece çalışır.
fn main() {
let mut sayi = 3;
while sayi != 0 {
println!("{}!", sayi);
sayi -= 1;
}
println!("Ateşle! 🚀");
}
### C. `for` (Koleksiyon ve Aralık Döngüsü)
Güvenli ve performanslı olduğu için Rust'ta en çok tercih edilen döngü tipidir.
fn main() {
// 1'den 3'e kadar (4 dahil değil)
for eleman in 1..4 {
println!("Sayı: {}", eleman);
}
// Dizi üzerinde dönme
let dizi = [10, 20, 30, 40, 50];
for eleman in dizi {
println!("Değer: {}", eleman);
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde fonksiyon yapısını, Rust'ın kalbinde yatan Expression/Statement farkını ve program akış kontrollerini inceledik.
👉 Bölüm 4'te Bizi Ne Bekliyor?
• Rust'ın EN ÖNEMLİ konusu: **Ownership (Sahiplik Systemi)*
* 👑
• Stack vs Heap mantığı
• Move, Clone ve Copy kavramları
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! 🦀✨
Selamlar! Serimizin 3. bölümüne hoş geldiniz.
Önceki bölümde değişkenleri, mutability mantığını ve temel veri tiplerini öğrenmiştik. Bu bölümde ise programlarımızın mantıksal omurgasını oluşturan Fonksiyonlar, İfadeler (Expressions), Deyimler (Statements) ve Akış Kontrollerini (if/else, döngüler) inceleyeceğiz.
---
📌 1. Fonksiyonlar (Functions) ⚙️
Rust'ta fonksiyon tanımlamak için `fn` anahtar kelimesi kullanılır. Fonksiyon isimlerinde standart olarak **snake_case** (küçük harfler ve kelimeler arası alt çizgi) yazım kuralı benimsenmiştir.
fn main() {
println!("Ana fonksiyon çalışıyor...");
baska_fonksiyon(5, '🦀');
}
fn baska_fonksiyon(x: i32, birim_etiket: char) {
println!("Gelen parametreler: {} ve {}", x, birim_etiket);
}
⚠️ Önemli Kural: Fonksiyon parametrelerinin tiplerini (type annotation) açıkça belirtmek ZORUNDASINIZDIR.
---
📤 2. Geriye Değer Döndüren Fonksiyonlar 🔄
Geriye değer döndüren fonksiyonlarda, dönen veri tipini ok işareti (`->`) ile belirtiriz.
fn topla(a: i32, b: i32) -> i32 {
a + b // Noktalı virgül YOK!
}
fn main() {
let sonuc = topla(10, 20);
println!("Toplam: {}", sonuc);
}
---
💡 3. Statements (Deyimler) vs Expressions (İfadeler) 🧠
Rust, "Expression-based" (İfade tabanlı) bir dildir. Bu ayrımı anlamak Rust yazarken kritik önem taşır:
• Statement (Deyim): Bir eylem gerçekleştirir ancak geriye bir değer DÖNDÜRMEZ. Sonu noktalı virgül (`;`) ile biter.
Örnek: `let x = 6;` bir statement'tır.
• Expression (İfade): Değerlendirilir ve geriye bir değer DÖNDÜRÜR. Sonu noktalı virgül (`;`) ile BİTMEZ.
Örnek: `5 + 6` ifadesi `11` değerini döndürür.
Fonksiyonlarda son satıra noktalı virgül koymazsanız, Rust o ifadeyi fonksiyonun dönüş değeri (return value) olarak kabul eder. Eğer noktalı virgül eklerseniz, ifade statement'a dönüşür ve geriye `()` (unit tuple) döner!
fn kare_al(x: i32) -> i32 {
x * x // Expression -> Geriye x*x döndürür.
}
---
🔀 4. Akış Kontrolleri: `if / else` 🚦
Rust'ta `if` bir statement değil, bir **expression**'dır! Yani geriye değer döndürebilir.
fn main() {
let sayi = 6;
if sayi % 4 == 0 {
println!("Sayı 4'e tam bölünür");
} else if sayi % 3 == 0 {
println!("Sayı 3'e tam bölünür");
} else {
println!("Sayı koşulları sağlamıyor");
}
}
⚠️ Dikkat: `if` koşulundaki ifadenin kesinlikle `bool` olması gerekir. C veya Python'daki gibi `if sayi { ... }` yazamazsınız (implicit coercion yoktur).
#### `if` İfadesini Değişken Atamasında Kullanmak:
`if` bir expression olduğu için sonucu doğrudan bir değişkene atayabiliriz:
fn main() {
let kosul = true;
let sayi = if kosul { 5 } else { 6 }; // İki koldan dönen tipler aynı olmalıdır!
println!("Sayı: {}", sayi);
}
---
🔄 5. Döngüler (Loops) 🌀
Rust'ta 3 farklı döngü mekanizması vardır: `loop`, `while` ve `for`.
### A. `loop` (Sonsuz Döngü ve Değer Döndürme)
Siz `break` ile durdurana kadar sonsuza kadar çalışır. `break` ile birlikte döngüden değer döndürmek mümkündür!
fn main() {
let mut sayac = 0;
let sonuc = loop {
sayac += 1;
if sayac == 10 {
break sayac * 2; // Döngüyü bitir ve bu değeri döndür!
}
};
println!("Sonuç: {}", sonuc); // 20 yazar
}
### B. `while` (Koşullu Döngü)
Belirli bir koşul sağlandığı sürece çalışır.
fn main() {
let mut sayi = 3;
while sayi != 0 {
println!("{}!", sayi);
sayi -= 1;
}
println!("Ateşle! 🚀");
}
### C. `for` (Koleksiyon ve Aralık Döngüsü)
Güvenli ve performanslı olduğu için Rust'ta en çok tercih edilen döngü tipidir.
fn main() {
// 1'den 3'e kadar (4 dahil değil)
for eleman in 1..4 {
println!("Sayı: {}", eleman);
}
// Dizi üzerinde dönme
let dizi = [10, 20, 30, 40, 50];
for eleman in dizi {
println!("Değer: {}", eleman);
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde fonksiyon yapısını, Rust'ın kalbinde yatan Expression/Statement farkını ve program akış kontrollerini inceledik.
👉 Bölüm 4'te Bizi Ne Bekliyor?
• Rust'ın EN ÖNEMLİ konusu: **Ownership (Sahiplik Systemi)*
* 👑
• Stack vs Heap mantığı
• Move, Clone ve Copy kavramları
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