İşi adlandır
Fonksiyon yaz, şartları birleştir — && ile || arasındaki fark
Kendi fonksiyonunu yazmak ve birden fazla şartı birleştirmek.
Fonksiyon — hatırlatma
Bir işe ad verip tek satırla çağırmak. Kodun dili Görev 8'de void, parametre ve return ile birlikte anlatıldı.
Burada fonksiyonun iki farklı işini ayırıyoruz, çünkü sistem kurarken ikisi farklı yerlerde duruyor:
Cevap veren fonksiyon
Bazı fonksiyonlar iş yapar, bazıları soru cevaplar:
bool susuzMu(int deger) {
return deger > 600;
}
Baştaki void yerine bool var — bu fonksiyon geriye bir doğru/yanlış döndürecek demek. return o cevabı gönderiyor.
Parantez içindeki int deger ise parametre: fonksiyona dışarıdan verdiğin bilgi. susuzMu(720) dediğinde deger içeride 720 oluyor.
İki şartı birleştirmek
Sulaması için iki şeyin birden doğru olması gerekiyor: toprak susuz olacak ve depoda su olacak. && ve || farkı Kodun dili Görev 5'te; burada o farkın bedeli var.
Yanlışını seçersen kod yine derlenir. Fark, depo boşaldığı gün ortaya çıkar: || yazdıysan pompa kuru döner ve yanar. Dalgıç pompa suyla soğuyor; susuz kalan pompanın ömrü dakikalarla ölçülüyor.
Kod
const int SUSUZ_ESIGI = 600;
const int DEPO_BOS_ESIGI = 200;
void sula() {
Serial.println(" >>> SULUYORUM");
}
// ŞİMDİ SEN YAZ:
// sulanmaliMi adinda bir fonksiyon yaz.
// Iki parametre alsin: toprak ve depo.
// Toprak susuzsa VE depoda su varsa true dondursun.
void setup() {
Serial.begin(9600);
Serial.println("Iki sayi gir: once toprak, sonra depo");
}
void loop() {
if (Serial.available() > 0) {
int toprak = Serial.parseInt();
int depo = Serial.parseInt();
while (Serial.available()) Serial.read();
Serial.print("toprak=");
Serial.print(toprak);
Serial.print(" depo=");
Serial.println(depo);
if (sulanmaliMi(toprak, depo)) {
sula();
} else {
Serial.println(" sulamiyorum");
}
}
}
Serial Monitor'e iki sayıyı arada boşlukla yazacaksın: 720 500 gibi.
Şimdi sen yaz
🔍 İpucu 1
Fonksiyon bool döndürecek ve iki int parametre alacak:
bool sulanmaliMi(int toprak, int depo) {
return ...;
}
return'ün sağına iki şartı && ile birleştirerek yaz.
✅ Cevap
bool sulanmaliMi(int toprak, int depo) {
return toprak > SUSUZ_ESIGI && depo > DEPO_BOS_ESIGI;
}
Karşılaştırmalar zaten doğru/yanlış üretiyor, && de onları birleştiriyor. Fazladan if yazmana gerek yok.
Buradaki en yaygın hata && yerine || yazmak. Öyle yazsaydın sistem depo bomboşken bile sulardı — ve kod hata vermezdi. Derleyici senin ne demek istediğini bilmiyor, sadece yazdığını yapıyor.
Bir de fonksiyonun adına bak: sulanmaliMi. Soru gibi. Çağırdığın yerde if (sulanmaliMi(...)) diye okunuyor, neredeyse Türkçe. İyi isim, yorum yazma ihtiyacını ortadan kaldırır.
📄 Görevin tam kodu
const int SUSUZ_ESIGI = 600;
const int DEPO_BOS_ESIGI = 200;
void sula() {
Serial.println(" >>> SULUYORUM");
}
bool sulanmaliMi(int toprak, int depo) {
return toprak > SUSUZ_ESIGI && depo > DEPO_BOS_ESIGI;
}
void setup() {
Serial.begin(9600);
Serial.println("Iki sayi gir: once toprak, sonra depo");
}
void loop() {
if (Serial.available() > 0) {
int toprak = Serial.parseInt();
int depo = Serial.parseInt();
while (Serial.available()) Serial.read();
Serial.print("toprak=");
Serial.print(toprak);
Serial.print(" depo=");
Serial.println(depo);
if (sulanmaliMi(toprak, depo)) {
sula();
} else {
Serial.println(" sulamiyorum");
}
}
}
Çalıştı mı?
Dört durumu da dene:
720 500 -> SULUYORUM (susuz + su var)
720 50 -> sulamiyorum (susuz ama depo bos)
300 500 -> sulamiyorum (depo dolu ama toprak iyi)
300 50 -> sulamiyorum
Sadece birinci satırda suluyor. && bunu yapıyor.
Şimdi &&'i || yap ve aynı testi tekrarla. İkinci ve üçüncü satırda da sulamaya başlayacak — gerçek bir sistemde pompanın yanması demek bu.
Olmadıysa
| Ne görüyorsun | Ne yap |
|---|---|
| Hep suluyor | && yerine \|\| yazmışsın |
| Hiç sulamıyor | İkinci sayıyı girmemişsin; 720 500 gibi ikisini birden yaz |
Derleme hatası: sulanmaliMi was not declared |
Fonksiyonu loop'un üstüne yaz — C yukarıdan aşağı okuyor |
| İkinci sayı hep 0 | Aralarına boşluk koydun mu? |
Kendini test et
Soru: sula() fonksiyonunun başında void yazıyor, sulanmaliMi'nin başında bool. Neden?
Cevabı gör
void "geriye bir şey döndürmüyorum" demek. sula() bir iş yapıyor — ekrana yazıyor, gerçek sistemde pompayı açıyor. Sana rapor vermesine gerek yok.
bool ise "geriye bir doğru/yanlış göndereceğim" demek. sulanmaliMi() iş yapmıyor, soru cevaplıyor.
Bu ayrım kodu okunur tutuyor: fonksiyonun ilk kelimesine bakarak ne tür bir şey olduğunu anlıyorsun.
İyi bir alışkanlık şu: bir fonksiyon ya iş yapsın ya soru cevaplasın, ikisini birden yapmasın. Soru cevaplayan bir fonksiyon aynı zamanda bir şeyi değiştiriyorsa, onu çağıran kişi bunu beklemez — ve hata tam oradan çıkar.
Takıldın, hata tablosu da yetmedi mi?
WhatsApp'tan sor — hangi görevdesin, ekranda ne yazıyor, devrenin fotoğrafı.