Fonksiyonel programlamanın faydalarının neler olduğunu düşünüyorsunuz? Ve bugün programcılara nasıl başvuruyorlar?
Fonksiyonel programlama ve OOP arasındaki en büyük farklar nelerdir?
Fonksiyonel programlamanın faydalarının neler olduğunu düşünüyorsunuz? Ve bugün programcılara nasıl başvuruyorlar?
Fonksiyonel programlama ve OOP arasındaki en büyük farklar nelerdir?
Yanıtlar:
Fonksiyonel programlama tarzı, nasıl elde edileceğinden çok ne istediğinizi tanımlamaktır. yani: bir yineleyici değişkenle bir döngü oluşturmak ve her hücreye bir şeyler yapan bir dizi boyunca ilerlemek yerine, "bu etiket, bu işlevin tüm hücrelerde yapıldığı bu dizinin bir sürümünü ifade eder elementler."
Fonksiyonel programlama, daha temel programlama fikirlerini, liste anlama ve önbelleğe alma gibi fikirleri derleyiciye taşır.
İşlevsel programlamanın en büyük yararı kısalıktır, çünkü kod daha kısa olabilir. İşlevsel bir program, bir döngünün merkezi olacak bir yineleyici değişkeni oluşturmaz, bu nedenle bu ve diğer türden ek yükler kodunuzdan çıkarılır.
Diğer büyük fayda, eşzamanlılıktır ve bu, işlevsel programlamayla daha kolay yapılır çünkü derleyici, durum değişkenlerini (bir döngüdeki yineleyici gibi) manuel olarak ayarlamayı gerektiren işlemlerin çoğuyla ilgilenir.
Programın yazılma şekline bağlı olarak, bazı performans avantajları tek işlemci bağlamında da görülebilir, çünkü çoğu işlevsel dil ve uzantı tembel değerlendirmeyi destekler. Haskell'de "bu etiket tüm çift sayıları içeren bir diziyi temsil eder" diyebilirsiniz. Böyle bir dizi sonsuz büyüklüktedir, ancak bu dizinin 100.000'inci elemanını istediğiniz zaman - dizi başlatma zamanında - tam da ihtiyacınız olan en büyük değerin ne olduğunu bilmenize gerek kalmadan isteyebilirsiniz. Değer, yalnızca ihtiyacınız olduğunda hesaplanacak ve daha fazla olmayacaktır.
En büyük yararı, alıştığınız gibi olmamasıdır. Scheme gibi bir dil seçin ve onunla problemleri çözmeyi öğrenin ve zaten bildiğiniz dillerde daha iyi bir programcı olacaksınız. İkinci bir insan dili öğrenmek gibi. Başkalarının temelde kendi başınıza bir varyasyon olduğunu varsayarsınız çünkü onu karşılaştıracak hiçbir şeyiniz yok. Başkalarına, özellikle zaten bildiklerinizle ilgili olmayanlara maruz kalmak öğreticidir.
Neden İşlevsel Programlama Önemlidir
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
Öz
Yazılım giderek daha karmaşık hale geldikçe, onu iyi yapılandırmak gittikçe daha önemli hale geliyor. İyi yapılandırılmış yazılımın yazılması ve hata ayıklaması kolaydır ve gelecekteki programlama maliyetlerini azaltmak için yeniden kullanılabilecek bir modül koleksiyonu sağlar.
Bu yazıda, özellikle işlevsel dillerin iki özelliğinin, üst düzey işlevlerin ve tembel değerlendirmenin modülerliğe önemli ölçüde katkıda bulunabileceğini gösteriyoruz. Örnek olarak, listeleri ve ağaçları işliyoruz, birkaç sayısal algoritma programlıyoruz ve alfa-beta buluşsal yöntemini (oyun oynama programlarında kullanılan Yapay Zekadan bir algoritma) uyguluyoruz. Modülerliğin başarılı programlamanın anahtarı olduğu için, fonksiyonel programlamanın yazılım geliştirme için önemli avantajlar sunduğu sonucuna vardık.
Bu nedenle iyi bir başlangıç noktası, zorunlu dillerde mümkün olmayan ancak işlevsel dillerde mümkün olan bazı şeyleri anlamaya çalışmak olacaktır.
Hesaplanabilirlikten bahsediyorsanız, elbette işlevsel ancak zorunlu programlamada mümkün olan hiçbir şey yoktur (veya tam tersi).
Farklı programlama paradigmalarının amacı, daha önce mümkün olmayan şeyleri mümkün kılmak değil, daha önce zor olan şeyleri kolaylaştırmaktır.
İşlevsel programlama, kısa, hatasız ve paralelleştirilebilir programları daha kolay yazmanıza izin vermeyi amaçlar.
Biri veya diğeri olmak zorunda değil: C # 3.0 gibi bir dil kullanmak, her birinin en iyi öğelerini karıştırmanıza olanak tanır. OO, sınıf düzeyinde ve üzerinde büyük ölçekli yapı için, Yöntem düzeyinde küçük ölçekli yapı için İşlevsel stil için kullanılabilir.
İşlevsel stilin kullanılması, kontrol akışı ifadeleriyle karıştırılmadan, amacını açıkça belirten kodun yazılmasına olanak tanır. Yan etkisiz programlama gibi ilkeler nedeniyle, kod hakkında akıl yürütmek ve doğruluğunu kontrol etmek çok daha kolaydır. .
Bence işlevsel programlama ihtiyacının en pratik örneği eşzamanlılıktır - işlevsel programlar doğal olarak iş parçacığı açısından güvenlidir ve çok çekirdekli donanımın yükselişi göz önüne alındığında bu son derece önemlidir.
İşlevsel programlama aynı zamanda modülerliği de arttırır - çok uzun olan zorunlu yöntemlerde / işlevleri sıklıkla görebilirsiniz - neredeyse hiçbir zaman bir işlevi birkaç satırdan daha uzun görmezsiniz. Ve her şey ayrıldığından - yeniden kullanılabilirlik çok geliştirildi ve birim testi çok çok kolay.
Program büyüdükten sonra, kelime dağarcığımızdaki komutların sayısı çok yükselir ve kullanımı çok zorlaştırır. Nesne yönelimli programlamanın hayatımızı kolaylaştırdığı yer burasıdır, çünkü komutlarımızı daha iyi bir şekilde düzenlememize izin verir. Müşteriyi içeren tüm komutları bazı müşteri varlıkları (bir sınıf) ile ilişkilendirebiliriz, bu da açıklamayı çok daha net hale getirir. Bununla birlikte, program hala nasıl ilerlemesi gerektiğini belirten bir komut dizisidir.
Fonksiyonel programlama, kelime dağarcığını genişletmenin tamamen farklı bir yolunu sağlar. Yeni ilkel komutlar eklemekle sınırlı değil; ayrıca bir program oluşturmak için komutları nasıl bir araya getirebileceğimizi belirten yeni kontrol yapıları ekleyebiliriz. Zorunlu dillerde, komutları bir sırayla veya döngüler gibi sınırlı sayıda yerleşik yapı kullanarak oluşturabildik, ancak tipik programlara bakarsanız, yine de birçok yinelenen yapı göreceksiniz; komutları birleştirmenin yaygın yolları
Fonksiyonel programlamayı bir "ihtiyaç" olarak düşünmeyin. Bunun yerine, zihninizi açacak başka bir programlama tekniği olarak düşünün, tıpkı OOP, şablonlar, montaj dili vb. Onları öğrendiğinizde (eğer) düşünme şeklinizi tamamen değiştirmiş olabilir. Sonuçta, işlevsel programlamayı öğrenmek sizi daha iyi bir programcı yapacaktır.
Fonksiyonel programlamayı bilmiyorsanız, öğrenmek size problemleri çözmeniz için daha fazla yol sunar.
FP, işlevleri birinci sınıf değerlere yükselten basit bir genellemedir, oysa OOP, büyük ölçekli kod yapılandırması içindir. Bununla birlikte, OOP tasarım modellerinin birinci sınıf işlevler kullanılarak doğrudan ve çok daha kısa ve öz bir şekilde temsil edilebildiği bazı çakışmalar vardır.
OCaml, C # 3.0 ve F # dahil olmak üzere birçok dil hem FP hem de OOP sağlar.
Şerefe, Jon Harrop.