JavaScript'te Currying İşlevi
bir kaba alın, biraz su ekleyin, birkaç satır kod ekleyin, biraz köri yaprağı ve masala ekleyin (zevkinize göre), 25 dakika kısık ateşte pişirin ve işte fonksiyon körükleniyor, üretimde servise hazır . Şaka yapıyorum boies ve gols.
Merhaba, JS geliştiricileri. Sıcak bir konu olan “Fonksiyon Currying” ile geri döndüm.
Bu hikaye şunları kapsar:
- Körileme nedir, nasıl yapılır ve neden kullanılır?
hikaye burada başlıyor
körleme işlevi nedir?
currying, birden çok bağımsız değişken [örnek: işlevAdı(a, b,c)] alan bir işlevi, sırayla tek bir bağımsız değişken alan birkaç işleve dönüştürmektir.
tamam tamam .., kulağa con-fu-jing (kafa karıştırıcı) geldiğini biliyorum, ayrıca bunu ilk okuduğumda tepkilerim aynıydı.
tamam, kolayca anlayalım, bir seferde tüm değişkenleri alan bir işlev (doSum) yani doSum(a, b, c) [örnek aşağıda: Normal toplama işlevi.
Bir dizide her seferinde tek bir bağımsız değişken alan çeşitli işlevlere (addNumbers(a), (b), (c)) dönüştürülür.
Not: Her iki işlevin işlevselliği (amacı) aynıdır, yalnızca daha iyi anlaşılması için yeniden adlandırılmıştır.
inekler için ineklere göre körleme işlevi şu şekildedir :
İşlevsel programlamada bir tekniktir, birden çok bağımsız değişkenin işlevinin sırayla tek bir bağımsız değişkenin birkaç işlevine dönüştürülmesidir.
Basit bir ifadeyle, işlev tüm bağımsız değişkenleri bir kerede almak yerine, ilk bağımsız değişkeni alır ve diğer bağımsız değişkeni alan işlevi döndürür ve ardından üçüncü bağımsız değişkeni alan başka bir işlevi döndürür ve tüm bağımsız değişkenler alınana kadar böyle devam eder. alınmıştır (resimdeki örnek: körleme işlevi).
Körileme Nasıl Çalışır?
javascript'te curring, javascript olduğu için anlaşılması biraz zor olabilir
ama üstesinden gelmeye çalışalım, aşağıda basit bir fonksiyon örneği var.
burada "doSum" işlevi verilen argümanı ekler ve iletilen tüm argümanların toplamını döndürür.
aşağıda aynı fonksiyonun curried versiyonu var (daha iyi anlaşılması için sadece yeniden adlandırıldı)
yukarıdaki ve aşağıdaki fonksiyonun çıktısı aynı olacaktır, 18
addNumbers, yukarıdaki doSum işlevinin körleştirilmiş versiyonudur, addNumber ana işlev, bizim durumumuzda, yani 5 argümanını alır ve bizim durumumuzda başka bir argümanı, yani 6'yı alan başka bir anonim işlevi döndürür ve süreç, tüm parametreler geçilene kadar devam eder, son anonim işlev, tüm girdileri işledikten sonra değeri döndürür.
Yukarıdaki örnekte iç içe geçmiş işlevler uyguladık, bu nedenle işlevlerin her biri bir bağımsız değişken alır ve tüm bağımsız değişkenler tamamlanana kadar başka bir işlev döndürür.
işlevinizi 2 farklı şekilde körleştirebilirsiniz, bind işlevini kullanarak ve kapatmaları kullanarak, bakalım nasıl görünüyor
bağlama işlevini kullanarak körleme işlevi
bağlama işlevinin ne olduğunu bilmiyorsanız, bu hikayeme bakın .
yukarıdaki örnekte, javascript'in bind işlevini kullanıyoruz ve bind işlevini kullanarak “onBoardUser” işlevini körüklüyoruz.
basicCompanyDetails katılan tüm kullanıcılar için benzerdir, bu nedenle ayrıntıları varsayılan olarak katılan tüm kullanıcılar için kullanılabilir hale getirmek istiyoruz, burada bağlama işlevine bir "basicCompanyDetails" argümanı iletiyoruz ve burada bir "onBoardUser" örneği oluşturuyoruz. bind işlevi, bellekte bir yerde saklayabileceğiniz ve daha sonra çalıştırabileceğiniz işlevi döndürür, burada işlevi addUser'da saklıyoruz ve tüm kullanıcılar için çağırıyoruz.
javascript'teki bind işlevini kullanarak işlevinizi bu şekilde körleştirebilirsiniz. Aşağıdaki resimde daha fazla örnek.
addUserToSales yöntemini çağırırken her iki parametreyi de iletebilirsiniz, aynı sonuçları verir.
kapanışları kullanarak körleme işlevi.
kapanışlar, javascript'te çok yaygın ama aldatıcı bir kavramdır, ancak fazla tartışılmaz, burada kapanışların ne olduğunu okuyabilirsiniz .
kapanışları kullanarak körleme işlevini uygulamaya çalışalım.
yukarıdaki örnekte, bir bağımsız değişkeni alan ve başka bir bağımsız değişkeni alan, ayrıntıları özetleyen ve geri dönen başka bir anonim işlev döndüren bir "onBoardUser" işlevi yarattık.
"onBoardUser" işlevini tek bir argümanla, yani accountDepartmentDetails ile çağırıyoruz ve onu bir değişkene kaydediyoruz (onBoardUser'ın bir işlev döndürdüğünü unutmayın), böylece bir işlevi addUsertoAccounts değişkeninde saklıyoruz ve artık değişken, herhangi bir zamanda çağrılabilecek bir işleve sahip. istediği bir argüman, bu yüzden addUsertoAccounts'ta saklanan ( onBoardUser tarafından döndürülen) anonim işlevi bir argümanla (kullanıcı ayrıntıları, yani, ayrıntılarOfJohn) çağırdık.
işlev çağrıldığında, içinde bulunan ifadenin yürütülmesini tamamlamış ve çıktıyı yazdırmıştır.
eğer fonksiyonlar 10k kod satırından sonra çağrılsaydı, aynı çıktıyı bir kapatma olduğu için yazdırırdı ve sözcüksel kapsamını hatırlar.
ES6 ile kürleme:
JS'de kapanışlarla körleme işlevini bu şekilde kullanabilirsiniz.
yine de kafanızda bir soru olabilir, eğer bir fonksiyona birden fazla argüman iletebiliyorsak, o zaman neden körlemeye ihtiyacımız var?
bu muhtemelen bu şüpheleri cevaplayacaktır.
neden kullanılıyor
Neden? Neden? Neden?
- körleme, işlevleri daha küçük işlevlere bölen bir tekniktir, her bir işlevin kendi işi vardır ve bu, işlevinizi saf ve hatalara ve yan etkilere daha az eğilimli hale getirir.
- örnek: ilk işlev kullanıcı ayrıntılarını doğrular, ikincisi şirket ayrıntılarını vb. doğrular.
- fonksiyonel programlamada üst düzey fonksiyonları kullanmak için kullanılır
- kodunuzu temiz ve düzenli tutmanıza yardımcı olur.
- Ayrıca körlemeyi ilerlemeden önce her şeye sahip olup olmadığınızı kontrol etmenize yardımcı olan bir mekanizma olarak kullanabilirsiniz.
- örnek: gerekli bağımsız değişkenleri almazsa iç içe geçmiş her işlev yürütülmez.