架构整洁之道-03 编程范式-函数式编程

简介: 架构设计另一个编程范式—函数式编程,其主要关心数据到数据之间的映射关系,即将计算过程抽象描述成一种表达式求值。先看下以下实现数组转换成数组对象的函数代码:

函数式编程

架构设计另一个编程范式—函数式编程,其主要关心数据到数据之间的映射关系,即将计算过程抽象描述成一种表达式求值。先看下以下实现数组转换成数组对象的函数代码:

// 实现数组转换数组对象
function AryToObjectAry() {
  const ary = ["jasen-yang", "tom-han", "marry-han", "lucy-any"];
  const newObj = [];
​
  ary.forEach((value) => {
    let names = value.split("-");
    let newNames = [];
    names.forEach((name) => {
      const temp = name[0].toUpperCase() + name.slice(1);
      newNames.push(temp);
    });
    newObj.push({ name: newNames.join(" ") });
  });
  console.log(newObj);
  return newObj;
}
​
(()=>{
    AryToObjectAry()
})();
​
// 输出结果
[
  { name: 'Jasen Yang' },
  { name: 'Tom Han' },
  { name: 'Marry Han' },
  { name: 'Lucy Any' }
]

定义变量,循环数组,把值开头大写,每个函数各司其职,按一定的步骤,从函数输入到输出结果。从代码上阅读可以很清楚知道在做什么,但是一但出问题就很难定位,其中掺杂了大些逻辑和变量。

如果每个过程都是一个函数,会怎么样?看下以下伪代码:

​
function convertAry() {
  const ary = ["jasen-yang", "tom-han", "marry-han", "lucy-any"];
​
  const getNames = (value) => {
    return value.split("-");
  };
  const toUpper = (value) => {
    return value[0].toUpperCase() + value.slice(1);
  };
  const convertName = (newObj,value) => {
    return newObj.push({ name: value });
  };
​
  const newObj = [];
  ary.forEach((value)=>{
    const newName = compose(getNames(value),toUpper);
    const result = compose(newObj,convertName(newName));
  });
  return newObj;
}

看整个编程思路,可以清晰看出,函数式编程,重点是函数而不是过程,通过函数的组合变换去解决问题。每个函数可以看出在做什么,一目了然,函数让代码更加语义化,可读性更高。

函数式编程,重点是在构建关系,通过构建一条高效的流水线,一次解决所有的问题,而不是关注各个函数之间的数据。

函数式编程特点

函数式一等公民

在函数式编程中,变量是不能被修改的,所有的变量只能被赋值一次,所有的值全都靠传参来解决的。函数作为一等公民,可以在任何地方定义,可以作为参数和返回值,可以对函数进行组合。

无状态和数据不可变

函数式编程的核心

  • 数据不可变,若修改一个对象,应建一个新对象而不是修改已有的对象
  • 无状态,对于一个函数,无论何时运行,在给定的相同输入都能输出相同结果,完全不依赖外部状态的变化

惰性执行

函数只在需要的适合执行,不产生无意义的中间变量。比如,在处理过程中都在写函数,而只有在最后才去产生实际的结果。

参考资料

\

目录
相关文章
|
1天前
|
持续交付 API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第20天】 在现代软件开发的潮流中,微服务架构已成为推动技术创新和服务灵活部署的关键。本文探讨了如何构建一个高效的微服务架构,涵盖其设计理念、技术栈选择以及面临的挑战与应对策略。通过深入分析,我们旨在为后端开发者提供一套实用的指导原则和最佳实践,以支持快速迭代和系统的可扩展性。
|
3天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第18天】 随着现代软件开发的复杂性日益增长,传统的单体应用架构已难以满足快速迭代和灵活部署的需求。本文聚焦于一种新兴的解决方案——微服务架构,探讨其如何为后端开发带来革命性的改变。我们将深入分析微服务的核心概念、优势与挑战,并通过具体案例来阐述如何在实际项目中实施微服务架构。文章旨在为开发者提供一种系统化的方法,帮助他们理解并应用微服务架构,以提升系统的可维护性、扩展性和技术敏捷性。
14 2
|
6天前
|
监控 持续交付 API
构建高效微服务架构:后端开发的新范式
【5月更文挑战第15天】 随着现代软件开发的演进,微服务架构已经成为企业解决复杂系统问题的首选方案。本文将深入剖析微服务的核心概念、设计原则及其在后端开发中的应用。我们将探讨如何通过容器化、服务网格和持续集成/持续部署(CI/CD)等技术手段提升系统的可伸缩性、弹性和维护性,同时确保高可用性和故障隔离。文章还将提供一系列实践案例,展示如何在实际项目中实施微服务架构,以及如何解决常见的挑战和问题。
48 1
|
6天前
|
机器人 Unix C++
ROS机器人编程技术架构命令应用
ROS机器人编程技术架构命令应用
6 1
|
6天前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第13天】 在当今软件开发的世界中,微服务架构已经成为了一种流行且有效的设计模式。它通过将大型复杂系统分解为一组独立的、可部署的服务来提高系统的可维护性、可扩展性和敏捷性。本文将探讨如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。我们的目标是为后端开发者提供一套实用的指南,以便在构建现代化应用程序时做出明智的决策。
|
6天前
|
监控 API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第12天】 在现代软件开发的浪潮中,微服务架构已经成为了设计复杂系统的首选模式。它通过将大型应用程序拆分成一组小而专注的服务来增强系统的可维护性和可扩展性。本文将探讨微服务架构的关键概念、优势以及如何在后端开发中实现一个高效的微服务系统。我们还将讨论一些常见的挑战和最佳实践,以帮助开发者避免陷入常见的陷阱。
18 6
|
6天前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第11天】 在现代软件开发的快速演变中,微服务架构已成为企业追求敏捷性、可扩展性和技术多样性的关键解决方案。本文旨在探讨如何构建高效的微服务架构,并分析其对后端开发的影响。我们将通过一系列最佳实践和策略,展示如何优化服务的独立性、弹性和性能,同时确保系统的整体稳定性和安全性。文章还将介绍容器化、API网关、服务发现和分布式追踪等关键技术的应用,为后端开发者提供一份全面的微服务实施指南。
|
6天前
|
设计模式 监控 API
构建高效的微服务架构:后端开发的新范式
【5月更文挑战第11天】 在当今的软件开发领域,微服务架构已经成为一种流行的设计模式。它通过将应用程序分解为一组小型、松散耦合的服务来提供高度可扩展和灵活的解决方案。本文将探讨如何构建一个高效的微服务架构,包括选择合适的技术栈、设计原则以及应对常见挑战的策略。我们将深入讨论如何确保系统的可维护性、可靠性和性能,同时考虑到安全性和监控的需求。
|
6天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第10天】在现代软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序拆分为一组小型、独立和松散耦合的服务来提供更高的可伸缩性和灵活性。本文深入探讨了微服务架构的设计理念、实施步骤以及面临的挑战,并提出了一套实用的策略和最佳实践,帮助后端开发者构建和维护高效的微服务系统。
|
6天前
|
设计模式 Kubernetes 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第7天】在现代软件开发的浪潮中,微服务架构已经成为一种流行的设计模式。它通过将应用程序分解为一组小的、独立的服务来提高系统的可维护性和扩展性。本文深入探讨了微服务架构的核心概念、优势以及如何利用最新的后端技术构建一个高效且可靠的微服务体系。我们将讨论关键的设计原则,包括服务的独立性、通信机制、数据一致性和容错性,并展示如何在云环境中部署和管理这些服务。
21 3