..
Giriş
Fonksiyonel programlama (FP) ve "lambda calculus" olarak, geleneksel (yapısal veya zorunluluk programlama ve nesne yönelimli programlama) icat bir programlama paradigması alternatif Alonso Kilise o bilinen çok önce, 30 yıl bu tam bir bilgisayar buydu.
Kilise Çalışmaları programlama dili Lisp gelişimi için temel teşkil etmiş ve bunlar zorunlu programlama iddia ettiği gibi daha sonra, neredeyse tamamen terk edildi Temel ve Pascal, C ve bugün üretilen bilgisayarlar, modern C + + ve Java.
Lambda hesabın temel fikri olan parametreleri aynı sayıda işlevleri bir dizi yerine talimatlar zorunlu seti (bunu daha sonra, bunu daha sonra bunu), bir bilgisayar programı ifade edilebilir olduğunu fonksiyonlar.
Fonksiyonel bir programı genellikle ve benzeri, girdi olarak girdi olarak başka bir işlev alır başka bir işlev alır bir işlev oluşur.
Bu bir zorunluluk paradigma veya nesneleri yazılmış geleneksel bir program, değeri programın "devleti" temsil eden değişken hareket komutları bir dizi oluşur ise, değişken kavramının fonksiyonel programlama yok anlamına gelir (İşte, "devlet" kavramı yok) ve yürütme sürekli fonksiyonu üzerinde işlem fonksiyonları bir dizi emanet edilmiştir.
Fonksiyonel dillerde ilgi çeşitli nedenlerle, en önemlisi (genellikle bir adamın bir matematikçi sürece değil, işlevleri daha nesnelerin düşünüyor!) Öğrenme güçlüğü ve bulmakta güçlük zamanla kesildi verimli tercüman veya derleyiciler.
Ruby ve FP
Bugün, fonksiyonel programlama da çok değerli bir sonucu getirir çünkü bu ilgi, ancak uyandılar vardır: çalışma anında hata için tanım yol tarafından değil. Başka bir deyişle, derleme veya ilk anda ya çalışıyor ya da çalışmıyor. Önsel (fonksiyonel bir program, aslında, özel durum hiçbir kavramı yoktur) beklemedikleri şekilde hareket edebilir.
Böylece doğmuş ve bazı gibi fonksiyonel diller (az ya da çok saf ve geleneksel programlama için az ya da çok desteği ile) gelişen şunlardır: ML / OCaml , Haskell , F # .
Ruby işlevsel bir dil değil, bize daha fazla sentetik daha güçlü ve daha etkili algoritmaları formüle yardımcı olabilir fonksiyonel programlama teknikleri kullanır. Okumak daha kolay olduğunu, genellikle yanında.
Her ve harita
Bir şekilde FP destek dillerin ilk özelliği, fonksiyonel standart kütüphane yineleyiciler sahip olmaktır. Örneğin:
$ Elemanları = [1,2,3,4,5]
Elementi.map $ {| elem | koyar elem} + 1
Fonksiyonlar Ruby "Harita" ve "her" daha uygulanabilir FP başka bir şey değildir!
Aslında bağımsız değişken olarak başka işlevlere sahiptir fonksiyonlar vardır.
Ruby, daha sonra, {in} veya sonuna do / Anonim işlevler arasında kapalı kod bloklarının bu parçaların birçok işlev konuları için özel olarak inşa edilmiş olduğunu.
Bu işlevler FP yüksek dereceden fonksiyonlar, girdi olarak birçok işlev olarak alır yani fonksiyonları denir.
Klasik ve matematiksel fonksiyon gibi özel "harita" eylemler şöyle okunabilir: birinden beş serinin her bir eleman için, işlev çalıştırın: sonraki doğal sayı yazdırın.
Bir koleksiyon her elemanı için bu "haritası" veya "iştirak", (biz söyleyebilirim Ruby Array) blok tanımlanan belirli bir işlev.
Aynı şey ile doğal olur:
$ Elementi.each {...}
Kapaklar: Proc ve lambda
Önemli fonksiyonu (örneğin global değişkenler veya diğer fonksiyonların değişkenler) farklı bir bağlamda yaşayan hareket değişkenlerin bir fonksiyonu tanımlama yeteneği: kapanışları yüksek mertebeden fonksiyonu benzer bir kavram vardır.
Ruby, ben anahtar kelimeleri Proc.new veya lambda ile tanımlanabilir anonim fonksiyonları kullanarak kapatma yazabilirsiniz.
İşte bir örnek:
def çarpma (çarpan)
geri lambda {| n | n * çarpan}
son
per3 = çarpma (3)
per3.call koyar (3) # => 9
per3.call (per8.call (2)) # => 48 koyar
Tam olarak değil besbelli bu örnekte bir işlev "multiply" tanımlar.
Çok garip bu işlevi nedir?
Ben burada herhangi bir değişken kullanmayın!
Bağımsız bir değişken çarpanı değil sadece bir sabit ya da başka bir işlev için bir yer tutucudur.
Ancak, geleneksel programlama, ben yazmak istiyorum:
def çarpma (a, b)
a * b dönüş
son
çarpma (3.3) koyar
Görüldüğü gibi, ancak, tüm çarpımı "x3" davranışını tanımlar ben per3 çağrı bir "operatör" kullanarak bir kapatma tanımlar.
Sonra bu operatör sayısı 3 arayın.
Ben de yinelemeli arayabilirsiniz!
Ya da başka bir işlevi yerine bir sabit, onu aramak.
Böylece iki sayının çarpımı sınırlayıcı - - geleneksel programlama ise, ben önceden işlemde, ilgili değişkenlerin sayısını tanımlamak zorundayım ve en önemlisi, ben iki değişken olduğu için bellek ayırma, devletin bir kavram eklemek zorunda çarpılmalıdır için değerler içerir.
| |
Ruby on Rails ve Ruby (Ders)
Ruby ve RoR ile yazılım ve Web uygulamaları oluşturun. En düşük € 39. |