- Hands-On Functional Programming with TypeScript
- Remo H. Jansen
- 269字
- 2021-07-02 14:03:12
Laziness
Many functional programming languages feature lazy-evaluated APIs. The idea behind lazy evaluation is that operations are not computed until doing so can no longer be postponed. The following example declares a function that allows us to find an element in an array. When the function is invoked, we don't filter the array. Instead, we declare a proxy and a handler:
function lazyFind<T>(arr: T[], filter: (i: T) => boolean): T {
let hero: T | null = null;
const proxy = new Proxy(
{},
{
get: (obj, prop) => {
console.log("Filtering...");
if (!hero) {
hero = arr.find(filter) || null;
}
return hero ? (hero as any)[prop] : null;
}
}
);
return proxy as any;
}
It is only later, when one of the properties in the result is accessed, that the proxy handler is invoked and filtering takes place:
const heroes = [
{
name: "Spiderman",
powers: [
"wall-crawling",
"enhanced strength",
"enhanced speed",
"spider-Sense"
]
},
{
name: "Superman",
powers: [
"flight",
"superhuman strength",
"x-ray vision",
"super-speed"
]
}
];
console.log("A");
const spiderman = lazyFind(heroes, (h) => h.name === "Spiderman");
console.log("B");
console.log(spiderman.name);
console.log("C");
/*
A
B
Filtering...
Spiderman
C
*/
If we examine the console output, we will be able to see that the Filtering... message is not logged into the console until we access the property name of the result object. The preceding implementation is a very rudimentary implementation, but it can help us to understand how lazy evaluation works. Laziness can sometimes improve the overall performance of our applications.
We will learn more about function composition patterns later in Chapter 9, Functional-Reactive Programming.
- GraphQL學習指南
- 前端跨界開發指南:JavaScript工具庫原理解析與實戰
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- Learning Elixir
- INSTANT Weka How-to
- Java程序設計與計算思維
- Amazon S3 Cookbook
- Mastering Akka
- QGIS Python Programming Cookbook(Second Edition)
- 深度學習原理與PyTorch實戰(第2版)
- QGIS 2 Cookbook
- R Data Science Essentials
- Arduino機器人系統設計及開發
- UI設計基礎培訓教程(全彩版)
- Getting Started with Web Components