- Temel fikirler
- karakteristikleri
- Saf fonksiyonlar
- Birinci sınıf özellikler
- İfade şeffaflığı
- Özyineleme
- Değişmezlik
- Örnekler
- Zorunlu ve bildirimsel yaklaşımlar
- Saf fonksiyonlar
- Birinci sınıf nesneler olarak işlevler
- avantaj
- Daha kısa ve anlaşılması daha kolay
- Kontrol akışı yok
- Dezavantajları
- Uygulamalar
- Fonksiyonel metodoloji
- İşlevsel programlamayı destekleyen diller
- D
- Erlang
- Haskell
- ML
- Amaç Caml
- Şema
- Referanslar
İşlevsel programlama modeli programlamaya karşılık zorunlu programlama ana kavram olan bir işlemci, talimat bir işlevsel matematiksel model yerine açık sekanslar gibi bir program davranışını ifade kavramına dayanmaktadır.
İşlevsel dil, ifadeleri yürütmek yerine ifadeleri ve terimleri vurgular. Bu programlamada, sonuç, yerel veya genel bir duruma uyan diğer türlerin aksine, yalnızca bir işleve aktarılan parametrelere bağlı olacaktır.
Haritalama işlevinin Haskell işlevsel programlama dilinde nasıl çalıştığını gösteren diyagram. Kaynak: Pluke tarafından - Kendi çalışması, CC0 commons.wikimedia.org.
Adı, bir dizi girişin bir dizi çıkışa atanması olan matematiksel işlevlerden gelir. Bir matematiksel fonksiyon gerçekten herhangi bir işe yaramaz, bunun yerine bir prosesin modelini açıklar ve bir fonksiyonda bir girdi kümesinin ne ürettiğini bir formül aracılığıyla açıklar.
Temel fikirler
Fonksiyonel programlamanın dayandığı temel, 20. yüzyılın üçüncü on yılında fonksiyonları tanımlamak ve uygulamak için geliştirilen lambda hesabıdır. LISP, 1960 yılında tasarlanan türünün ilk programlama dilidir.
Çoğu programlama dili, işlevler içinden ayarlanabilen veya kullanılabilen girişler, çıkışlar ve harici değişkenlerden oluşsa da, işlevsel programlama bunu önler. Buradaki fikir, bir işlev aynı parametrelerle her çağrıldığında, aynı değeri döndürmesi gerektiğidir.
karakteristikleri
İşlevsel programlama dillerine uygulama adı verilir, çünkü işlevler parametrelerine uygulanır ve ayrıca bildirimsel ve yordamsal değildir, çünkü tanımlar neyin nasıl hesaplanacağını değil neyin hesaplanacağını belirtir.
Saf fonksiyonlar
Bir işlev, dış değişkenleri değiştirmek, dosya sistemi değişiklikleri vb. Gibi gözlemlenebilir yan etkileri olmadığında saftır.
Bu işlevler, kodun diğer bölümlerinin bir noktada bağlı olabileceği herhangi bir değişkeni açıkça değiştirmeyecekleri için ikna edici olarak kabul edilir. Bu kısıtlamalarla kodlamak garip görünebilir, ancak bu işlevlerin belirleyici, öngörülebilir ve birleştirilebilir olduğu düşünülmelidir.
Birinci sınıf özellikler
İşlevler, değişkenlere atanabilen değerler olarak kabul edilir, böylece diğer işlevlere aktarılabilir ve bu işlevlerden döndürülebilir. Diğer bir deyişle, bir işlev, bir parametreymiş gibi veya döndürülen bir değer olarak kullanılabilir.
Bu, yalnızca işlevin sonucundan ziyade işlevin bu şekilde geçirilebileceği anlamına gelir. Örneğin, giriş parametresinin iki katını döndüren double (x) işlevini düşünün. Böylece double (2) 4 döndürür.
Birinci sınıf bir işlev olduğundan, kod (double (double (2))), double (4) kodla aynı olacaktır. Bu, bir işlevi diğerinin parametresi olarak yerleştirmenize olanak tanır ve bu böyle devam eder.
İfade şeffaflığı
Bu programlama modelinde hiçbir atama ifadesinin bulunmadığı gerçeğini ifade eder. Yani, ek değerler depolamak istiyorsanız yeni değişkenler tanımlamalısınız. Bu nedenle, bir değişkenin durumu her zaman sabittir.
Bu, istenmeyen etkilerin en ufak bir olasılığını ortadan kaldırır, çünkü herhangi bir değişken, programın herhangi bir yürütme noktasında gerçek değeriyle değiştirilebilir.
Özyineleme
Fonksiyonel programlamada "for" ve "while" döngüleri yoktur. Bunun yerine yineleme özyinelemeye dayanır. Özyineleme, temel duruma ulaşılana kadar kendilerini tekrar tekrar çağıran özyinelemeli işlevler kullanılarak gerçekleştirilir.
Değişmezlik
Değişkenler değişmezdir, yani bir değişkeni ilklendirildikten sonra değiştirmek mümkün değildir. Yeni bir değişken oluşturabilmenize rağmen, mevcut değişkenlerin değiştirilmesine izin verilmez.
Örnekler
Zorunlu ve bildirimsel yaklaşımlar
Bir örnekle, bu yaklaşımlar arasındaki farkı, her iki düzenlemede de aynı işlemi gerçekleştirerek analiz edebilirsiniz; bu, bir listedeki tek sayıları filtreleyip 5'ten küçük çift sayılar için 5'i değiştirmektir.
Aynı sonuçla aynı hesaplamadır. Bununla birlikte, görebileceğiniz gibi, zorunlu kod ayrıntılıdır ve hemen net değildir. Öte yandan, bildirimsel yaklaşım okunabilir ve açıktır çünkü almak istediğiniz şeye odaklanır.
Saf fonksiyonlar
Saf ve saf olmayan fonksiyonlar olarak tanımlananlar, bazı temel örneklerle açıklığa kavuşturulabilir:
Birinci sınıf nesneler olarak işlevler
Verilerin kullanıldığı gibi işlevleri kullanmak anlamına gelir. Bu nedenle, başka bir işleve parametre olarak aktarılabilirler. Aşağıdaki örnekte, int işlevi harita işlevine bir parametre olarak geçirilebilir:
>>> liste (harita (int,))
Değişkenlere atanabilir ve geri döndürülebilirler. Örneğin, aşağıdaki kodda hello_world işlevini atayabilir, ardından değişkeni bir işlev olarak çalıştırabilirsiniz.
avantaj
- Neye ulaşmak istediğinize (beyan edici) odaklanın, onu nasıl başaracağınıza (zorunlu) değil.
- Atama ifadeleri içermezler, bu nedenle değişkenlere bir değer verildikten sonra artık değişmezler. Bu nedenle fonksiyonel programlar yan etki içermez.
- Durum daha az dağınık olduğundan ve dolaylı olarak değiştirilmediğinden mantıksal akış açıktır.
- Tembel değerlendirme kavramını destekler, yani değer yalnızca gerektiğinde değerlendirilir ve saklanır.
- Saf fonksiyonlar herhangi bir durumu değiştirmediği ve tamamen girdiye bağlı olduğu için anlaşılması kolaydır. Bu tür işlevler tarafından verilen dönüş değeri, onların ürettiği sonuçla aynıdır.
- Değişkenlerin veya herhangi bir harici verinin değişmesini önlemek için saf fonksiyonların doğası gereği, eşzamanlılığın uygulanması etkili olur.
- Fonksiyonlar, diğer fonksiyonlara parametre olarak geçen değerler olarak kabul edilir. Bu, kodun anlaşılmasını ve okunabilirliğini artırır.
- Saf işlevler parametreleri bir kez alarak değişmez çıktı üretir. Değiştirilemez değerler kullanmak, hata ayıklamayı ve testi kolaylaştırır.
Daha kısa ve anlaşılması daha kolay
Daha kısadır ve zorunluluklardan daha kolay anlaşılırlar. Araştırmalar, kod satırları açısından ortalama programcı verimliliğinin herhangi bir programlama dili için aşağı yukarı aynı olduğunu ve daha yüksek üretkenliğe dönüştüğünü göstermiştir.
Kontrol akışı yok
Bir işlevi çağırmak, sonucunun hesaplanmasından farklı bir etkiye sahip olamaz. Hiçbir yan etki bir ifadenin değerini değiştiremeyeceği ve herhangi bir zamanda değerlendirilebileceği için bu, büyük bir hata kaynağını ortadan kaldırır ve yürütme sırasını da ilgisiz kılar.
Programcı, bir kontrol akışı oluşturma yükünden kurtulur. İfadeler herhangi bir zamanda değerlendirilebildiğinden, değişkenler değerleri ile değiştirilebilir.
Bu özerklik, işlevsel programları geleneksel programlardan daha matematiksel olarak yönetilebilir hale getirir.
Dezavantajları
- İşlevsel programlama paradigması basit değildir, bu nedenle yeni başlayanların anlaması zordur.
- Kodlama sırasında birçok nesne geliştiği için bakımı zordur.
- Bazı durumlarda, salt işlevlerin yazılması, kodun okunabilirliğinde bir azalmaya neden olur.
- Özyineleme ile birlikte değişmez değerler, sistem performansında ciddi bir düşüşe yol açabilir.
- Yeniden kullanım çok karmaşıktır ve sürekli yeniden düzenleme gerektirir.
- Programları döngüler veya döngüler kullanmak yerine yinelemeli bir tarzda yazmak çok göz korkutucu bir görev olabilir.
- Nesneler sorunu doğru şekilde temsil etmeyebilir.
- Saf işlevler yazmak basit görünse de, bunları uygulamanın geri kalanıyla ve girdi / çıktı işlemleriyle birleştirmek oldukça zordur
Uygulamalar
Yapay zeka programlama, işlevsel programlama dillerinde yapılır ve yapay zeka teknikleri gerçek dünya uygulamalarına geçer.
Aynı zamanda karmaşık matematiksel modellerin uygulanmasında da mükemmeldir. Bu nedenle, işlevsel dillerin ana kullanımlarından biri geleneksel olarak akademik olmuştur. Çalıştırılabilir özellikler ve prototip uygulamaları geliştirmek için kullanışlıdır.
Birçok işlevsel dil, paralel işlemeyi uygulamada da mükemmeldir. Bunun nedeni, çalıştırıldıkları sıraya bakılmaksızın her zaman aynı değeri döndüren saf işlevlerden yararlanma yeteneğidir.
Fonksiyonel metodoloji
WhatsApp, işlevsel programlama modelini takip eden Erlang programlama dilini kullanır ve böylece yüzden fazla çalışanının 1,6 milyar kişiye ait verileri işlemesine izin verir.
Fonksiyonel programlama stilinin bir diğer önemli taşıyıcısı Haskell'dir. Facebook tarafından antispam sisteminde kullanılmaktadır. En yaygın kullanılan programlama dillerinden biri olan JavaScript bile, dinamik olarak yazılmış bir işlevsel dilin özelliklerini sergiler.
İşlevsel programlamayı destekleyen diller
D
C ++ 'dan sonra tasarlandı, C ile uyumlu olma zorunluluğunun gözlenen zayıf yönlerini ortadan kaldırırken tüm avantajlarından yararlanarak tasarlandı.
Erlang
Oldukça ölçeklenebilir ve eşzamanlı olması, telekomünikasyon ve öngörülemeyen bir sırada büyük miktarda veri alan diğer uygulamalar için idealdir.
Haskell
Bu, Lambda hesaplamasını kullanan tamamen işlevsel bir programlama dilidir.
ML
Matematiksel, bilimsel, finansal, analitik ve diğer uygulamalarda kullanılır. Güçlü yönlerinden biri, diğer programları idare edecek yazılımlar yapmaktır.
Amaç Caml
Caml tabanlı açık kaynak bir dildir. Diğer diller tarafından oluşturulanlardan daha hızlı yüklenmelerine ve çalışmasına yardımcı olan çok hafif programlar oluşturma eğilimindedir.
Şema
LISP sözdizimine ve ALGOL yapısına dayanmaktadır. Basitliği nedeniyle, birçok bilgisayar bilimi dersinde, bilgisayar programlamanın bazı temellerini göstermek için program tasarımına giriş olarak kullanılır.
Referanslar
- Bunu Kim Düzenliyor (2019). Fonksiyonel Programlamayı Öğrenin: Bu Kodlama Stili Zihninizi Uçuracak. Alınan: whoishostingthis.com.
- Andrea Bertoli (2019). Fonksiyonel Programlamaya Yeterli Bir Giriş. Dev.to.
- Hacker Earth (2020). Fonksiyonel Programlama. Hackerearth.com adresinden alınmıştır.
- Clojure (2020). Fonksiyonel Programlama. Clojure.org sitesinden alınmıştır.
- Akhil Bhadwal (2020). Fonksiyonel Programlama: Kavramlar, Avantajlar, Dezavantajlar ve Uygulamalar. Hile. Alındığı yer: hackr.io.
- Guru99 (2020). Fonksiyonel Programlama nedir? Örnek ile Eğitim. Alınan: guru99.com.