导读:从 monad 到模式匹配,本文将带大家了解适合高级开发人员的最新、最出色的 JavaScript 技术。
JavaScript 已经是现代 Web 开发领域必不可少的工具,并且不断变化和发展,不断制定和产生新标准。
在本文中,我们将重点介绍五种顶级的 JavaScript 技术,向开发者展示构建动态 Web 应用程序的新颖创新方法,这些方法可提供高水平的交互性和性能。
从 monad 到模式匹配,我们将带您了解面向高级开发者最新和最出色的 JS 技术。
JavaScript 为何如此流行?
JavaScript 因其灵活性而广受欢迎,并已成为世界上使用最广泛的编程语言。JS 通常用于创建具有高交互性的动态 Web 应用程序 - 例如实时更新、直观、功能丰富的用户界面等等。此外,JavaScript 允许应用程序在各种平台上运行。
JS 可用于多种项目,例如支持电子商务服务或制作动画和手机游戏。然而,这只是编程语言功能的一小部分。我们还看到 JS 被用于企业环境中,特别是在SAP 人员扩充等关键 ERP 驱动流程中,因为它允许在本机 Web 平台上创建自定义仪表板和 UI界面。
许多领先的互联网平台(例如 Facebook)都使用基于 JavaScript 的开源用户界面框架React Native。这使他们能够使用单一代码库构建在 iOS 和 Android(如今甚至是 Apple Vision Pro)上运行的移动应用程序。因此,前端开发时间大大缩短,使用的资源更少,并且用户体验在所有平台和设备上都保持一致。
Node.js 等服务器端运行环境使得 JavaScript 在 Web 浏览器之外运行成为可能,进一步提高了应用程序的可扩展性和部署可能性。为了使 JS 更加通用和灵活,大量兼容 JS 的 API 还将 Web 应用程序链接到外部服务。
最后,JavaScript 拥有强大的库和框架生态系统的支持,有助于简化和加快开发速度,并允许开发人员选择预先编写的代码来执行特定功能。
五大前沿 JavaScript 技术
我们选择了开发者现在应该使用的五种尖端 JavaScript 技术,以帮助你克服大量开发问题并创建更有效、更用户友好的应用程序。
1. Monads(异步操作)
Monad 有助于组成需要上下文才能返回值的函数,并且非常有效地简化错误,管理并降低出现意外结果的可能性。
Monad 的目标让代码中的函数组合尽可能简单。
它们通常用于构建需要极高准确性的企业级应用程序。Monad 可以使代码更易于管理,从而产生复杂的回调、嵌套的条件分支等。本质上,Monad 就是使代码中的函数组合尽可能简单。
Monad 可以分解为三种类型的函数组合:
函数映射:a => b
带上下文的函子映射:函子(a)=>函子(b)
Monads 展平(从上下文中解开值)并与上下文映射:Monad(Monad(a)) => Monad(b)
函数组合是创建函数管道的基础,可实现高效的数据流。管道的第一阶段是输入,最后一阶段是从其初始状态转换而来的输出。但是,要实现这一点,管道的每个阶段都必须能够预测前一阶段将返回什么数据类型。
这时,monad 就派上用场了,它可以有效地映射函数以创建智能管道。它们的工作方式与承诺类似,并且可以无缝地一起使用。
下面是一个使用 monad 从异步 API获取用户,然后将该用户数据传递给另一个异步 API 来执行计算的代码示例:
const composeM = chainMethod => (...ms) => (
ms.reduce((f, g) => x => g(x)[chainMethod](f))
);
const composePromises = composeM('then');
const label = 'API call composition';
// a => Promise(b)
const getUserById = id => id === 3 ?
Promise.resolve({ name: 'Kurt', role: 'Author' }) : undefined;
// b => Promise(c)
const hasPermission = ({ role }) => (
Promise.resolve(role === 'Author')
);
// Compose the functions (this works!)
const authUser = composePromises(hasPermission, getUserById);
authUser(3).then(trace(label)); // true
2.声明式编程
当开发人员优先考虑简洁、富有表现力的代码时,通常使用声明式方法。
当开发人员优先考虑简洁、富有表现力的代码时,通常使用声明式方法。
JavaScript 中的声明式编程侧重于代码的总体目标,而不是如何实现这些目标。这使得代码更加简单易读,因此也更易于维护。当开发者优先考虑简洁、富有表现力的代码以快速交付项目时,通常会使用声明式方法。
让我们来比较一下声明式方法与命令式方法:
命令式方法:
function evenSum(numbers) {
let result = 0;
for (let i = 0; i < numbers.length; i++) {
let number = numbers[i]
if (number % 2 === 0) {
result += number;
}
}
return result;
}
声明式方法:
const evenSum = numbers => numbers
.filter(i => i % 2 === 0)
.reduce((a, b) => a + b)
3. 服务器端缓存可提高 Node.js 性能
服务器端缓存可用于根据使用情况指标自动扩展资源。
服务器端缓存可用于根据使用情况指标自动扩展资源。
缓存并不是什么新鲜事,可能也不被认为是特别前沿的技术,但由于客户端和服务器端的 Web 应用程序都可以使用缓存,因此它是提升性能的强大工具。特别是,服务器端缓存可以通过加快数据检索速度来提高 Node.js 的性能。
让我们看一个使用内存缓存技术的简单示例:
const cache = require('memory-cache');
function getDataFromCache(key) {
const cachedData = cache.get(key);
if (cachedData) {
return cachedData;
}
// If data is not in cache, fetch it from the source
const data = fetchDataFromSource();
// Store data in cache for future use
cache.put(key, data, 60000); // Cache for 60 seconds
return data;
}
服务器端缓存可用于根据使用情况指标自动扩展资源。
4. 不变性
不变性是指无法改变的东西。在 JavaScript(以及一般编程)中,它指的是设置后永远无法更改的值。由于应用程序不断更改和更新,不变性似乎没有必要,但是事实并非如此。
不变性技术可以减少调试工作量并减少意外结果。
无法更改的数据很重要,因为它有助于实现代码库的一致性并有助于状态管理。不是更改值,而是创建一个新值,这使得事情更加可预测,从而减少错误 — — 比如数据结构意外更改时发生的错误。这样可以减少调试和意外结果。
用于名称值的不变性的一个代码示例:
// Import stylesheets
import './style.css';
// Write JavaScript code!
const appDiv = document.getElementById('app');
appDiv.innerHTML = `Open the console to see results`;
class Person {
//_name = "Nee";
//_name = ["Nee", "Ra"];
_name = { first: "Nee", middle: "L" };
get name() {
return this._name;
}
set name(value) {
console.log('In setter', value);
this._name = value;
}
}
let p = new Person();
//p.name = "Ra"; // Setter executes
//p.name.push("Lee"); // Setter doesn't execute
//p.name = [...p.name, "Lee"]; // Setter executes
//p.name.middle = "Lee"; // Setter doesn't execute
p.name = { ...p.name, middle: "Lee" }; // Setter executes
无论开发者的专业是什么,不变性都是一项必须掌握的重要技术。这种特殊方法在数据科学任务和AI 项目中的应用 越来越广泛,这再次证明了 JavaScript 几乎可以胜任所有任务。
5.模式匹配
模式匹配是一种条件分支,可以简洁地匹配数据结构模式,同时绑定变量。模式匹配通常用于编写XSLT 样式表来转换 XML 文档。
模式匹配比标准 switch 语句更加有效。
模式匹配是一种条件分支,可以简洁地匹配数据结构模式,同时绑定变量。模式匹配通常用于编写XSLT 样式表来转换 XML 文档。
模式匹配比标准 switch 语句更加有效。
模式匹配比标准 switch 语句更加有效。
当针对任何给定模式测试值时,模式匹配比标准 switch 语句更有效,并且提供更多的控制,允许开发人员编写更复杂的表达式。
下面是使用 JUnify 库通过 match 模块实现阶乘函数的示例:
match = function () {
var unify = unification.unify;
function match_aux(patterns, value) {
var i, result;
for (i = 0; i < patterns.length; i += 1) {
result = unify(patterns[i][0], value);
if (result) {
return patterns[i][1](result);
}
}
return undefined;
}
return function(patterns, value) {
return match_aux(patterns, value);
};
}();
var fact = function (n) {
return match([
[0, function() { return 1; }],
[$('n'), function(result) {
return result.n * fact(result.n - 1);
}]
], n);
};
结语
JavaScript 灵活、多功能,可部署在各种平台上。当使用上述技术意味着开发者可以为其应用程序创建功能强大,但又很简洁的代码。
作者:万能的大雄