Kapaklar hakkında neden bu kadar çok vızıltı var? [kapalı]


9

Geliştiriciler arasındaki kapanışlar hakkında neden bu kadar çok vızıltı var? Kariyerimde onları kasıtlı olarak hiç kullanmadım, ama ne olduklarını net bir şekilde anlamadım.

UPD: sadece açıklığa kavuşturmak için. Soru, kapanış konseptinin bugünlerde neden bu kadar konuşkan hale geldiği ile ilgili.


3
Ne olduğunu bilmediğiniz bir şeyi kasıtlı olarak nasıl kullanabilirsiniz? Yani, temelde önce kapanışların ne olduğunu sormalısınız (ya da daha doğrusu araştırmalısınız).
Steven Jeuris

1
Wikipedia makalesini okudun mu? Bu konuda ne anlamadınız?
kevin cline

2
Kariyeriniz neye dayanıyor?

4
Bu nasıl bir soru? Ne "vızıltı"? Ne anlamıyorsun? Bunun yerine neden bu soruyu sormadınız ?
Aaronaught

4
OP'nin savunmasında, kapanmalar eski bir kavramdır, ancak sadece son zamanlarda kasabanın konuşmasıydı. Ve konsept aslında biraz daha fazla matematik öğrenen herkes için çok basit, aynı zamanda insanların neden onlar hakkında konuşmaları çok zor bir şeymiş gibi konuştuğunu da anlayamıyorum. Belki de bu sadece daha akıllı görünmelerini sağlamanın bir yoludur: "bak, grok yapmak çok zor olan kapanışları grok yapıyorum, bu yüzden sallanıyorum".
quant_dev

Yanıtlar:


22

Kapatma, getirildiği yerde hala kullanılabilirken, dünyayı nereden geldiğini hatırlayan koddur.

Java'da, YourObject içinde olduğunu bilen ve yöntemlerini ve işlevlerini değiştirebilen anonim bir işlev tanımlamak buna bir örnektir. Bu fonksiyon daha sonra örneğin bir Dinleyicinin içine girdiği, ancak yine de köklerine kadar bir yaşam çizgisine sahip olduğu Swing'e gönderilir.

Bu çok güçlü bir kavramdır, çünkü onu kullanan koddan habersiz olarak kodun diğer kısımlarına geri dönebilen bir kod vermenize izin verir.


1
Evet. Bu sadece prosedür değil, aynı zamanda diğer koda da enjekte etmenin bir yoludur. Bu, algoritma tasarımında çok yüksek bir esneklik sağlar; derleme zamanında bile bilmediği durum bilgisi olan alt yordamlara bağlı şablonlanmış yöntemler tasarlayabilirsiniz. Dezavantajı, bu yöntemin orijinal kaynağına ve dolayısıyla durumuna olan bağlantının, bunu bilmeden tüketen yöntem olmadan kırılabilmesidir; bu durumda bulmak zor çalışma zamanı hataları alırsınız.
KeithS

1
Ha ha, Java'da anonim işlev ... Komik.
yapılandırıcı

1
@configurator, komik değil, bir gerçek.


java 7'de kapak yok.

6

Kapaklar, çeşitli sorunları zarif bir şekilde çözmek için bir şeydir. Aslında, herhangi bir kapatma bulunmayan programlama dillerinde, benzer işlevleri yerine getirmek için teknikler oluşturulur.

Sadece C ++ ya da Java'daki Runnables'daki fonksiyonları düşünün. Bunlar sadece kapaklara benzer işlevlere izin veren tekniklerdir. Bir çeşit «manuel kapatma».

Popüler dillere entegre oldukları için kapaklar daha popüler hale geliyor: Javascript, çevrimiçi uygulamalar (örneğin google doc gibi) nedeniyle büyüyor, C # uyguladı, PHP 5.3'ten beri uyguladı vb.

Artık kapanışlar daha fazla teknolojide mevcut olduğundan, giderek daha fazla insanın bunlarla ilgilenmesi oldukça basit hale geliyor.

Peki şimdi kapanışlar nedir? Bu oldukça basit. Kapatma, içinde yürütülecek bir işlev ve bağlamdır. Bu bir nesne olarak manipüle edilir. Bu neden faydalı? Bu, kendi kodunuzu mevcut koda bağlamak için kullanışlıdır.

Aşağıdakileri gerektiren iki yaygın durum şunlardır: eylemler, bir iş parçacığı havuzuyla çoklu kullanımda olduğu gibi başka bir kod parçası tarafından yönetildiğinde veya seçilen bir olayda (UI için genellikle JavaScript'te kullanılır) bir eylem yürütülmesi gerektiğinde.


Seni açıkça anladım mı? Bazı "manuel kapanmalar" (gerçekten bir kapanış değil, davranışlarına benzeyen bir şey) ve bazı "DOĞRU kapanışlar" var mı?

Kapanış bir dil yeteneğidir. Bazı diller bu özelliğe sahip değildir, bu nedenle dilin size sağladığı araçları kullanarak el ile kapatmanız gerekir. DOĞRU olup olmadıklarını söylemek çok ilginç bir tartışma değil IMHO.
deadalnix

2
@gasan, her zaman montajı çırpabilir ve bir grup GOTO ifadesiyle istediğiniz deseni manuel olarak gerçekleştirebilirsiniz. Benzer şekilde, bir "while" döngüsüyle (C ++ 'da) bir "for" döngüsü gerçekleştirebilirsiniz. Daha gelişmiş, daha yüksek seviyeler ortak şeyler yapmanın standartlaştırılmış bir yolunu sunar.
Philip

6

Geçen gün eğlenceli bir teklif gördüm, "sınıflar fonksiyonları ile veri vardır. Kapanışları veri ile fonksiyonları" satırları boyunca oldu.

Evet, bu aşırı bir basitleştirme, ama konuyu anlamaya yardımcı oluyor.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.