Bu 'Lambda herkes demişken tutar' nedir?
Bu 'Lambda' herkes demişken tutar? Bir çok insan aşk gibi görünüyor, ama bunu toplamak sadece tek bir ifadeye kod satırları çok tıkınma bir yoldur.
Birisi onun gerçek değeri konusunda beni aydınlatabilir misiniz?
CEVAP
İsim vermeden fonksiyonları
Basitçe söylemek gerekirse, bir lambda isimsiz bir fonksiyon veya anonim bir fonksiyonudur. Çalıştırılabilir kod küçük bir parça, eğer bir değişken sanki etrafında geçti olabilir. JavaScript:
function () {}; // very simple
Hadi şimdi bu Lambda kullanılıyor bakın.
Demirbaş kodu özetleme
Lambda uzak demirbaş kodu soyut olabilir. Örneğin döngüler. for
yazma alıştık ve while
gün boyu döngüler. Ama bu yazılı olmayan bir kod vardır. Döngü içinde kod döngünün en önemli parçası, ve geri kalanı uzakta soyut özü edebiliriz:
for (var i=0; i<array.length; i ) {
// do what something useful with array[i]
}
dizi nesneleri forEach
kullanarak yorumlamışlardır
array.forEach(function (element, index) {
// do something useful with element
// element is the equivalent of array[i] from above
});
Soyutlama yukarıdaki yararlı olmayabilir, ama yüksek mertebeden fonksiyonlar, çok daha yararlı görevleri gerçekleştirmek forEach
gibi diğer vardır. Örneğin 29**:
var numbers = [1, 2, 3, 4];
var even = [];
// keep all even numbers from above array
for (var i=0; i<numbers.length; i ) {
if (numbers[i] % 2 === 0) {
even.push(numbers[i]);
}
}
alert(even);
// Using the filter method
even = [1, 2, 3, 4].filter(function (number) {
return number % 2 === 0;
});
alert(even);
Kod çalıştırma gecikmesi
Hangi olay kavramı kullanılabilir bazı ortamlarda, Lambda zaman içinde bir noktada meydana gelebilecek olaylara yanıt vermek için kullanabiliriz.
window.onload = function () {
alert("Loaded");
};
window.setTimeout(function () {
alert("Code executed after 2 seconds.");
}, 2000);
Bunu başka bir şekilde yapmış olabilir, ama bu oldukça ayrıntılıdır. Java'da örneğin, Runnable
arayüzü var.
Fonksiyonları fabrikalar
Bu noktaya kadar, biz sadece daha çok sözdizimsel şeker yetenekleri için Lambda kullanılır. Ama Lambda daha faydalı olabilir durumlar vardır. Örneğin return Lambda işlevleri olabilir. Hadi dönüş değerleri önbelleğe alınmış olmasını istediğimiz gibi bir işlevi var ki.
var users = [];
var getUser = function (name) {
if (! users[name]) {
// expensive operations to get a user. Ajax for example
users[name] = user_from_ajax;
}
return users[name];
};
Daha sonra, benzer bir işlevi olduğunu fark edebiliriz:
var photos = [];
var getPhoto = function (name) {
if (! photo[name]) {
// expensive operations to get a user. Ajax for example
photos[name] = photo_from_ajax;
}
return photos[name];
};
Açıkça orada bir işaret var, izin uzak soyut. Hadi memoization kullanın.
/**
* @param {Array} store Data structure in which we cache lambda's return values
* @param {Function} lambda
* @return {Function} A function that caches the result of calling the lambda param
*/
var memoize = function (store, lambda) {
// return a new lambda
return function (name) {
if (! store[name]) {
// Execute the lambda and cache the result
store[name] = lambda(name);
}
return store[name];
};
};
var getUsers = memoize([], function (name) {
// expensive operations to get a user. Ajax for example
});
var getPhotos = memoize([], function (name) {
// expensive operations to get a photo. Ajax for example
});
, Lambda kullanarak gördüğünüz gibi, uzak önbellekleme/memoization mantığı soyut başardık. Eğer örneğin bazı çözümler olsaydı, bu sorunu neredeyse diğer teknikleri kullanarak çözülmüş olduğunu düşünüyorum. Tek bir yerde bazı önemli demirbaş kodu ayıklamak başardık. users
photos
global değişkenleri kurtulduk bahsetmiyorum.
Profil bakınca çoğunlukla Python bir kullanıcı olduğunuz belli. Yukarıdaki model için, Python dekoratörler kavramı vardır. example on the net for memoization dekoratörler vardır. Tek fark Python ile büyük olasılıklaadlandırılmışiç içe dekoratör işlev içinde işlev. Sebebi tek ifade Lambda desteği Python sadece. Ama mantık aynı.
Python örnek olarak lambda kullanın. Hangi çift sayılar bakacağız yukarıdaki kodu şöyle: Python ile temsil edilebilir
filter(lambda x: x % 2 == 0, [1, 2, 3, 4])
Neyse, Lambda kilitler olmadan o kadar güçlü değil. Kilitler Lambda kavramı bu kadar güçlü yapan şeydir. Memoization benim örnekte kilitler store
param etrafında bir kapatma oluşturmak için kullandım. Bu şekilde, memoize
işlev sonucu (lambda) döndü sonra bile param erişimi var.
Scala yazın Lambda nedir ve faydaları ...
Bir arasındaki fark 'kapatma'...
Lambda nedir?...
İle " sonucuna ne zaman lambda tür...
C 11: lambda ifadesi nedir?...