- "Fonksiyonel programlama (FP) öğrenmesi zor olsa da kodunuzun tatsız sürprizler üretmesini azaltır"
- FP'de "less is more"
- (
Maybe/Option ile) Null Reference sorununu çözme
- FP'nin öğrenme eğrisi diktir
- FP'nin geleceği
- Daha az sayıda geliştiriciyle daha fazla geliştirme yapmak istiyorsak, mümkün olan her aracı kullanmamız gerekir ve FP bunun için bir bilettir
- Bizim gibi gösterişli olmayan şirketler geliştirici işe almakta zorlanır. Ancak FP kod tabanında çalışmak isteyen üst düzey geliştiricileri işe almak mümkün hale gelir
- FP'yi benimsemek kaliteyi ve dayanıklılığı artırır; FP'de ortaya çıkmayan hatalara harcanan zamanı azaltır
- FP özelliklerinin ana akım dillerde giderek daha fazla görünmeye başlaması, yazılım sektörünün bir paradigma değişimine hazırlandığını gösteriyor
- Sektörün tamamen dönüşmesi için daha çok iş gerekiyor olacak, ancak bunu yapmanın faydaları açık olduğu için nereye gidildiği konusunda şüphe yok
13 yorum
Öğrenme eğrisinin yüksek olduğu doğru gibi görünüyor; yorumlarda da işlevsel programlamayı gerçekten tam olarak bilmeyen içerikler var. Elbette konuyu iyi bilerek yazılmış yorumlar da var. İşlevsel programlama zor; ben de hâlâ öğreniyorum hıçkırık hıçkırık
Programlama dillerinin artık geliştirme ekibinin zevki değil, şirketin hayatta kalma meselesi haline geldiği örnekler ortaya çıktığında ancak o zaman FP ihtiyacı hakkında yeniden konuşabiliriz.
Ben özetleyeyim. Bellek yönetimi ve bazı algoritmalarda nesne yönelimli programlamanın hâlâ önüne geçebilmiş değil. Duruma ve maliyete göre uygun olanı kullanmak yeterlidir.
Hmm.. öğrenme eğrisinin dik olduğu iddiasına katılamıyorum.
Öncelikle, düpedüz daha kolay, hata yapma payını azaltıyor ve dolayısıyla üretkenliği artırıyor.
Bu kadarı yeter zaten.
İnsan düşüncesini ve işleri, saf fonksiyonel programlama dilleri gibi kusursuz biçimde formüle etmek zor.
free monadgibi şeylere bakınca, sanki en fazla kabul edilebilir sınırrxjsdüzeyi gibi görünüyor.Fonksiyonel programlamada da ipin ucunun kaçtığı bir an geliyor.
Mevcut FP etkileri de aslında veriyle metotları ayırmış olmakla sınırlı,
Optional'ın bile düşünüldüğü kadar yaygın kullanılmamasına bakınca tip soyutlaması gereksiz bir soyutlama gibi geliyor (tipleri uydurmaya çalışırken verimliliği fazlasıyla düşürüyor).closurebenzeri şekilde veriyle işlemleri daha da soyutlayan bir yöne gitmedikçe mevcut dilleri kullanmanın da bir sınırı var.Değişmezlik, işlevsel programlama paradigmasında sık kullanılan araçlardan yalnızca biridir.
Bildiğim kadarıyla işlevsel programlama paradigması, "yan etkileri" (Side effect) mümkün olduğunca denetim altına almaya çalışan bir programlama paradigmasıdır.
Yan etkileri denetim altına almaya çalışınca doğal olarak referans şeffaflığı, değişmezlik ve saf fonksiyonlar gibi kavramlara önem verildiğini düşünüyorum.
Bu açıdan bakınca, ille de işlevsel programlama dili kullanmasanız bile, yazdığınız fonksiyon ya da metotların yan etkilerini açıkça fark edip bunları uygun şekilde denetleyebilmeniz arzu edilir. Bunun, koddaki kötü kokuları (Code smell) azaltmak ve birim testleri yazmayı kolaylaştırmak gibi birçok avantajı vardır.
Bununla ilgili daha ayrıntılı anlatan çevrilmiş yazılar da var.
Bu bakış açısından yan etkileri en aza indiren refactoring'e odaklanan kitaplar arasında Çok Kolay İşlevsel Kodlama: Basit Kodla Karmaşık Yazılımı Ehlileştirmek yer alıyor. Teoriden çok pratik ve gerçek iş yaklaşımıyla ele aldığı için, iyi kod yazmak isteyen herkesin rahatlıkla okuyup öğrenmeye değer bulabileceği bir kitap. Bunu okuduktan sonra kod yazarken yan etkiler konusunda eskisine göre çok daha dikkatli olmaya başlamanız bile bence kitabın ücretini fazlasıyla karşılar.
Teşekkürler, bulup okumam gerekecek sanırım.
Aa! Demek çeviri kitabı çıkmış! Okumam gerekecek!
Kitap önerisi için teşekkürler!! Hemen satın alıp okuyacağım!
O kitap gerçekten çok iyiydi!
Refaktoring açısından bakınca kullanması da gerçekten çok rahat oluyor
Elbette fonksiyonel programlamanın da iyi bir yöntem olduğunu düşünüyorum, ama onun avantajlarını ikna edici biçimde anlatan pek fazla insan yok gibi görünüyor. Sadece iyi olduğunu söyleyince çok da etkili olmuyor, değil mi?
Aşağısı kişisel görüşümdür; ayrıca modern programların hepsi fiilen Turing makinesi temelli olduğu için, soyut olarak büyük ölçüde fonksiyonlar ve veriler diye ayrılabilirler ve bu nedenle prosedürel programlamanın da kökeninde fonksiyonel olduğunu düşünüyorum. O halde fonksiyonel yaklaşımın prosedürel yaklaşıma göre gerçek avantajı nedir derseniz, bence bu basitçe 'global ya da ona yakın kapsamda değişken kullanmamak'tır. Bu avantaj sayesinde hem 'fonksiyonlar arası izolasyon' hem de 'çok iş parçacıklı hesaplama' açısından verimlidir.
Ama bu yalnızca fonksiyonel programlamayla elde edilebilen bir fayda mı derseniz, bence değil. Prosedürel dillerde de dependency injection kavramı üzerinden sınıf ve fonksiyon düzeyinde izolasyon öneriliyor (zaten modern framework'lerin hepsi bunu temel olarak benimsiyor) ve Rust dilinde de dil düzeyindeki kısıtlarla daha elverişli eşzamanlı hesaplama hedefleniyor.
Özetle, fonksiyonel diller iyi dillerdir ve iyi bir metodolojidir; ancak 'evrimsel anlamda üstün' olmalarından ziyade, tıpkı Go ya da Rust gibi 'başarısızlık ihtimalini dil düzeyinde dışlamaya çalışırken kullanımı zorlaşan diller' olduklarını düşünüyorum.
Yordamcı dillerde de fonksiyon bileşimi gibi şeylerin mümkün olduğunu mu söylüyorsunuz?
"Fonksiyon bileşimi" tanımına dar bakarsak bunun yalnızca fonksiyonel dillerde mümkün olduğunu düşünebiliriz; ama biraz sakin düşününce, bunun çalışması da sonuçta yordam dilleri olan makine dili ya da assembly üzerinde gerçekleşiyor. Yani mesele "mümkün, imkânsız" meselesi değil, "dilin ilgi alanları, tercihleri, felsefesi" meselesidir. "Fonksiyon bileşimi" tanımını dar anlamda "belirli bir dilin belirli bir özelliği" olarak değil de "mantıksal işlevler arasındaki bileşim" olarak geniş düşünürsek pekâlâ mümkündür. Ve fonksiyonel dillerin avantajlarının gerçekten var olduğu da açık; rxjs ya da spark gibi şeyler de bunu aktif biçimde ödünç almıştır.
Herkesin bilgisayar mühendisliğinde öğrendiği gibi, aşağıdakiler aynı sonucu verir; sadece ifade biçimleri farklıdır. Ve prefix gösterim çoğu zaman fonksiyonel olarak adlandırılır.
Ön ek gösterimi : + 1 1
Orta ek gösterimi : 1 + 1
Son ek gösterimi : 1 1 +