Birçok modern programlama dili, bazı kapatma kavramlarını , yani bir kod parçasını (blok veya işlev) destekler.
- Bir değer olarak değerlendirilebilir ve bu nedenle bir değişkende saklanabilir, kodun farklı bölümlerine aktarılabilir, bir programın bir bölümünde tanımlanabilir ve aynı programın tamamen farklı bir bölümünde çağrılabilir.
- Değişkenleri tanımlandığı bağlamdan yakalayabilir ve daha sonra çağrıldığında bunlara erişebilir (muhtemelen tamamen farklı bir bağlamda).
İşte Scala'da yazılmış bir kapanış örneği:
def filterList(xs: List[Int], lowerBound: Int): List[Int] =
xs.filter(x => x >= lowerBound)
İşlev değişmezi , aynı ada sahip işlevin bağımsız değişkeni tarafından kapatılan (bağlı) olan x => x >= lowerBound
serbest değişkeni içerir . Kapatma, tekrar tekrar normal bir işlev olarak çağırabilen kitaplık yöntemine geçirilir .lowerBound
filterList
filter
Bu sitede birçok soru ve cevap okuyorum ve anladığım kadarıyla kapatma terimi genellikle otomatik olarak fonksiyonel programlama ve fonksiyonel programlama stiliyle ilişkilendiriliyor.
Wikipedia'da fonksiyon programlamanın tanımı şu şekildedir:
Bilgisayar biliminde fonksiyonel programlama, hesaplamayı matematiksel fonksiyonların değerlendirilmesi olarak ele alan ve durum ve değişken verileri önleyen bir programlama paradigmasıdır. Durumdaki değişiklikleri vurgulayan zorunlu programlama stilinin aksine, fonksiyonların uygulanmasını vurgular.
ve dahası
[...] fonksiyonel kodda, bir fonksiyonun çıkış değeri sadece [...] fonksiyonuna girilen argümanlara bağlıdır. Yan etkilerin ortadan kaldırılması, fonksiyonel programlamanın geliştirilmesi için temel motivasyonlardan biri olan bir programın davranışını anlamayı ve tahmin etmeyi çok daha kolay hale getirebilir.
Öte yandan, programlama dilleri tarafından sağlanan birçok kapatma yapısı, bir kapağın yerel olmayan değişkenleri yakalamasına ve kapatma çağrıldığında bunları değiştirmesine izin verir, böylece tanımlandıkları ortam üzerinde bir yan etki üretir.
Bu durumda, kapaklar işlevsel programlama ilk fikrini uygular (fonksiyonlar diğer değerler gibi hareket edebilen birinci sınıf varlıklardır) ancak ikinci fikri ihmal eder (yan etkilerden kaçınır).
Yan etkileri olan kapakların bu kullanımı fonksiyonel tarz olarak mı kabul edilir, yoksa kapaklar hem işlevsel hem de işlevsel olmayan bir programlama stili için kullanılabilecek daha genel bir yapı mıdır? Bu konuda literatür var mı?
ÖNEMLİ NOT
Yan etkilerin veya yan etkilerle kapanmaların faydasını sorgulamıyorum. Ayrıca, yan etkileri olan veya olmayan kapakların avantajları / dezavantajları hakkında bir tartışma ile ilgilenmiyorum.
Sadece bu tür kapakların kullanılmasının hala fonksiyonel programlamanın savunucusu tarafından işlevsel bir stil olarak kabul edilip edilmediğini veya aksine, fonksiyonel bir stil kullanılırken kullanımlarının engellenip engellenmediğini bilmekle ilgileniyorum.