Uygulamadaki (İşlevsel) program nedir Test 1

Soru 06 / 10

🎓 Uygulamadaki (İşlevsel) program nedir Test 1 - Ders Notu

Merhaba sevgili öğrenciler! Bu ders notu, "Uygulamadaki (İşlevsel) program nedir Test 1" sınavınızda karşılaşabileceğiniz Fonksiyonel Programlama temel kavramlarını, ilkelerini ve avantajlarını sade bir dille anlamanıza yardımcı olmak için hazırlandı.

📌 Fonksiyonel Programlama (FP) Nedir?

Fonksiyonel Programlama, bilgisayar bilimlerinde bir programlama yaklaşımıdır. Adından da anlaşılacağı gibi, programlamayı "matematiksel fonksiyonların" değerlendirilmesi olarak görür ve programın durumunu (state) ve değiştirilebilir verileri (mutable data) değiştirmekten kaçınır.

  • Ana Fikir: Programları, girdileri alıp çıktıları üreten bağımsız fonksiyonlar şeklinde oluşturmaktır.
  • Benzetme: Tıpkı matematikteki $f(x) = y$ gibi, belirli bir girdi (x) her zaman aynı çıktıyı (y) vermelidir ve bu işlem sırasında başka hiçbir şeyi etkilememelidir.

📌 Fonksiyonel Programlamanın Temel İlkeleri

FP'yi özel kılan bazı temel kurallar ve prensipler vardır. Bunları anlamak, FP mantığını kavramanız için çok önemlidir.

Saf Fonksiyonlar (Pure Functions)

Saf fonksiyonlar, FP'nin kalbidir. Bir fonksiyonun "saf" olması için iki temel kuralı vardır:

  • Aynı Girdi, Aynı Çıktı: Aynı girdileri verdiğinizde, her zaman aynı çıktıyı üretir.
  • Yan Etkisiz (No Side Effects): Fonksiyon, kendi kapsamı dışındaki hiçbir şeyi değiştirmez veya etkilemez (örneğin, global bir değişkeni değiştirmek, ekrana bir şey yazdırmak, bir dosyaya yazmak gibi). Sadece bir değer döndürür.

💡 İpucu: Bir hesap makinesindeki toplama işlemi gibi düşünün. $2+3$ her zaman $5$ verir ve bu işlem hesap makinesinin diğer ayarlarını değiştirmez.

Değişmezlik (Immutability)

Değişmezlik, bir veri oluşturulduktan sonra asla değiştirilemeyeceği anlamına gelir. Eğer bir veri üzerinde değişiklik yapmak isterseniz, aslında o verinin yeni, değiştirilmiş bir kopyasını oluşturursunuz.

  • Neden Önemli? Verilerin beklenmedik şekilde değişmesini engeller, bu da hataları azaltır ve kodu daha güvenilir yapar.
  • Örnek: Bir listedeki elemanı değiştirmek yerine, o elemanın değiştirilmiş olduğu yeni bir liste oluşturulur.

⚠️ Dikkat: Gerçek hayatta bir kağıda yazı yazıp sonra silip değiştirmek yerine, yeni bir kağıda baştan yazmaya benzetebiliriz.

Yan Etkisiz Olma (No Side Effects)

Bu ilke, saf fonksiyonlarla doğrudan ilişkilidir. Bir fonksiyonun "yan etkisi" olmaması, onun kendi kapsamı dışında hiçbir işlemi yapmaması demektir. Yani, global değişkenleri değiştirmemeli, bir veritabanına yazmamalı, kullanıcı arayüzünü güncellememeli veya konsola çıktı vermemelidir.

  • Faydası: Kodun daha öngörülebilir, test edilebilir ve paralel işlemlerde daha güvenli olmasını sağlar.

Birinci Sınıf Fonksiyonlar (First-Class Functions) ve Yüksek Mertebeli Fonksiyonlar (Higher-Order Functions)

Fonksiyonel programlamada fonksiyonlar, sayılar veya metinler gibi diğer verilerle aynı muameleyi görür.

  • Birinci Sınıf Fonksiyonlar: Fonksiyonlar bir değişkene atanabilir, başka bir fonksiyona argüman olarak gönderilebilir veya bir fonksiyon tarafından döndürülebilir.
  • Yüksek Mertebeli Fonksiyonlar: Başka fonksiyonları argüman olarak alan veya bir fonksiyonu çıktı olarak döndüren fonksiyonlardır. Örneğin, bir liste üzerinde işlem yapan `map`, `filter` gibi fonksiyonlar yüksek mertebeli fonksiyonlardır.

📝 Örnek: Bir fonksiyona "sayıları ikiyle çarp" fonksiyonunu verip, o fonksiyonun da her sayıyı ikiyle çarptığı yeni bir liste döndürmesi gibi.

Referans Şeffaflığı (Referential Transparency)

Bir ifadenin, programın davranışını değiştirmeden doğrudan değeriyle değiştirilebilmesi yeteneğidir. Bu, saf fonksiyonların bir sonucudur.

  • Anlamı: Eğer bir fonksiyon her zaman aynı girdilerle aynı çıktıyı veriyorsa, o fonksiyon çağrısını doğrudan o çıktının değeriyle değiştirebilirsiniz.

💡 Neden Fonksiyonel Programlama? (Avantajları)

Fonksiyonel programlamanın tercih edilmesinin birçok nedeni vardır. İşte başlıcaları:

  • Daha Az Hata: Saf fonksiyonlar ve değişmezlik sayesinde kod daha öngörülebilir hale gelir, bu da hataların (bug'ların) sayısını azaltır.
  • Daha Kolay Test Edilebilirlik: Saf fonksiyonlar yan etki yapmadığı için test etmesi çok kolaydır. Sadece girdiyi verip çıktıyı kontrol edersiniz.
  • Paralel İşlemlerde Güvenlik: Veriler değişmediği ve yan etki olmadığı için, aynı anda birden fazla işlem (thread) aynı veriye erişse bile çakışma (race condition) riski azalır.
  • Daha Kolay Anlaşılabilirlik: Her fonksiyonun belirli bir işi yapması ve dışarıyı etkilememesi, kodun okunmasını ve anlaşılmasını kolaylaştırır.

📝 Bildirimsel (Declarative) vs. Buyurgan (Imperative) Programlama

Bu iki kavram, programlama yaklaşımlarını tanımlar:

  • Buyurgan (Imperative) Programlama: "Nasıl yapılacağını" adım adım anlatır. Programın durumunu değiştiren komutlar dizisidir. (Örn: "Şunu yap, sonra bunu yap, sonra değeri değiştir.")
  • Bildirimsel (Declarative) Programlama: "Ne yapılacağını" tanımlar, ancak "nasıl yapılacağı" detaylarına girmez. (Örn: "Şu listeyi filtrele," veya "Şu sayıyı ikiyle çarp.") Fonksiyonel Programlama genellikle bildirimseldir.

💡 İpucu: Bir yemek tarifi düşünün. Buyurgan yaklaşım, her bir adımı tek tek tarif eder (soğanı doğra, yağda kavur...). Bildirimsel yaklaşım ise yemeğin son halini ve içindeki malzemeleri tanımlar (domates soslu, fesleğenli makarna).

↩️ Testi Çözmeye Devam Et
✨ Konuları Gir, Yapay Zeka Saniyeler İçinde Sınavını Üretsin!
1 2 3 4 5 6 7 8 9 10
Geri Dön