Programlama dillerinde, kapaklar popüler ve sıklıkla istenen bir özelliktir. Wikipedia diyor ki (benimki vurgu):
Bilgisayar biliminde, kapatma (...), o işlevin yerel olmayan değişkenleri için bir referans ortamıyla birlikte bir işlevdir. Kapatma, bir işlevin anlık sözcük kapsamı dışındaki değişkenlere erişmesini sağlar.
Dolayısıyla, kapanış esasen değişkenleri kendi kapsamının dışında kullanabilen (anonim?) Bir işlev değeridir. Deneyimlerime göre, bu, tanım noktasında kapsamdaki değişkenlere erişebileceği anlamına gelir.
Uygulamada, kavram en azından fonksiyonel programlamanın dışında farklı görünüyor. Farklı diller farklı semantikleri uygular, hatta opinons savaşları var gibi görünüyor. Birçok programcı, anonim işlevlerden biraz daha fazlası olarak görerek, kapakların ne olduğunu bilmiyor gibi görünüyor.
Ayrıca, kapanışları uygularken büyük engeller var gibi görünüyor. En önemlisi, Java 7'nin bunları içermesi gerekiyordu, ancak özellik gelecekteki bir sürüme geri itildi.
Kapanışları gerçekleştirmek neden bu kadar zor (anlamak ve)? Bu çok geniş ve belirsiz bir soru, bu yüzden bu birbirine bağlı sorularla daha fazla odaklanmama izin verin:
- Ortak semantik formalizmlerde kapanışları ifade etmede sorunlar var mı (küçük adım, büyük adım, ...)?
- Mevcut tip sistemler kapaklar için uygun değil mi ve kolayca genişletilemiyor mu?
- Kapakları geleneksel, yığın tabanlı yordam çevirisine uygun hale getirmek sorunlu mu?
Sorunun daha çok genel olarak prosedürel, nesne yönelimli ve senaryo dillerine ilişkin olduğunu unutmayın. Bildiğim kadarıyla, işlevsel dillerin herhangi bir sorunu yoktur.