banner
NEWS LETTER

函数解析器的重要地位

Scroll down

低代码平台与函数解析器的重要联系

函数库、转换逻辑和函数解析器是实现我目前业务的重要组成部分,本文我将详细整理目前使用的函数解析流程。

函数库

函数库是低代码平台的重要功能之一。包含了一系列预定义的函数,信息化人员可以直接调用这些函数来实现各种计算和操作,而无需从头编写代码。
在项目中,函数库的作用主要体现在以下几个方面:

  1. 通用性:提供常见的数学、字符串、日期处理等函数,满足大多数应用场景的需求。
  2. 复用性:一次编写,多次使用,避免了重复代码的编写,提高了开发效率。
  3. 可扩展性:开发人员可以根据需求添加新的函数,满足项目其他的函数需求。

以下是函数库代码的示例片段,展示了一些常用的函数实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const fml = {
DAYS(a, b) {
// 实现两个日期之间的天数差
},
NOW() {
// 返回当前日期和时间
},
SUM(...m) {
// 实现多个数值的求和
},
IF(a, b, c) {
// 实现条件判断
},
// 其他函数...
};
export default fml;

转换逻辑

将用户输入的公式或表达式转换为函数解析器可以理解并执行的代码的过程。在我们的平台中,用户使用计算公式编辑框点选输入表达式来描述其需求,这些表达式需要经过解析和转换,才能由解析器去执行。
转换逻辑的主要任务包括:

  1. 变量替换:将用户表达式中的变量替换为实际的数据值。
  2. 函数替换:将用户表达式中的函数调用替换为对应的函数库中的实现。
  3. 格式转换:将用户表达式格式转换为符合函数解析器的格式。
    以下是转换逻辑的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
function transformFormulaValue(key, formDesc, formData, tableIndex, formula) {
let itemInfo = getItemInfo(key, formDesc, formData, tableIndex, formula);
let result = getItemResult(itemInfo, formula);
return result;
}

function transformFormulaFormat(analysedFormula) {
analysedFormula = analysedFormula.replace(/AND/g, "&&").replace(/OR/g, "||").replace(/NOT/g, "!==");
return analysedFormula;
}


重中之重:函数解析器

函数解析器是用来执行用户定义的公式和表达式。它主要负责解析用户输入的表达式,并根据解析结果调用函数库中的相应函数进行计算。函数解析器的工作流程包括:

  1. 解析表达式:将用户输入的表达式拆解为可执行的代码。
  2. 执行表达式:根据解析结果,调用相应的函数进行计算,并返回结果。
  3. 错误处理:处理解析和执行过程中的各种错误,确保系统的稳定性。
    以下是函数解析器的示例代码,展示了如何解析和执行用户输入的表达式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class FormulaAnalysis {
constructor(formulaMap = {}) {
this.formulaMap = formulaMap;
}

analysis(exp, ao = {}) {
// 解析逻辑

return "运算结果"
}
}
}

export default FormulaAnalysis;



低代码平台中的函数解析器应用

在目前多数低代码平台中,函数解析器的应用场景非常广泛。例如:

  • 表单计算:在表单中定义公式,通过函数解析器实时计算表单项的值。
  • 数据校验:通过解析用户定义的校验规则,动态验证用户输入的数据。
  • 动态展示:根据用户定义的条件,动态展示或隐藏界面元素。
    函数解析器的引入,使得低代码平台不仅具备了快速开发的能力,还能处理复杂的业务逻辑,极大地提升了平台的灵活性和可扩展性。

通过函数库、转换逻辑和函数解析器的紧密结合,可以实现快速、高效和灵活的应用开发模式。函数库提供了丰富的功能支持,转换逻辑将用户点选的表达式转换为可执行的代码,而函数解析器则负责解析和执行这些代码。三者相辅相成,共同构建了低代码平台的核心能力,为开发人员提供了极大的便利和强大的功能支持。

开发函数库的挑战

当然看上面的总结貌似简单,但实际操作起来有不少坑,在实际开发中,我也遇到了不少问题。比如:

  • 性能问题:一些复杂的计算可能会消耗大量资源,导致页面变慢,需要优化代码,提高执行效率。
  • 兼容性问题:不同的浏览器和设备对某些函数的支持可能不同,需要进行大量的测试和调整。
  • 边界情况处理:用户的输入可能千奇百怪,得确保函数能正确处理各种意外情况,比如非法输入、极端数值等。
  • 复杂公式的解析和执行可能导致性能问题,需要不断优化算法。

转换逻辑的难题

使用正则的方式去匹配组件key来和表单描述中的数据做对应转换,比较具有挑战性的地方有:

  • 函数替换 用户输入的函数名称在代码阶段可能没有,需要在进函数库之前就要做好数据处理
  • 需要确保用户在输入公式时有良好的体验,比如实时校验和智能提示。
  • 当转换逻辑出现问题时,调试是很困难的,需要逐步排查每一个转换步骤。

开发低代码平台和函数解析器是一项充满挑战的工作,在这个过程中投入了大量的时间和精力。每次遇到问题,都需要花费很多时间去研究和调试,经常加班到深夜…
代码优化更是需要反复测试,确保性能和稳定性。虽然过程艰辛,但每次看到项目的进步和用户的反馈,都会让我觉得这些付出是值得的。

其他文章
目录导航 置顶
  1. 1. 低代码平台与函数解析器的重要联系
    1. 1.1. 函数库
    2. 1.2. 转换逻辑
    3. 1.3. 重中之重:函数解析器
    4. 1.4. 低代码平台中的函数解析器应用