BtOfficer

2021-11-15 19:20

公式

Excel公式算编程?还别说,真是一门编程语言!
1、编写Excel公式,也算编程?是不是很难接受?是的,这很难让人接受。写公式的人不会这么认为,写程序的也不会这么认为。
首先,单元格支持的数据类型,无非数值和文本,这对编程而言是远远不够的。其次,公式不支持定义变量啊,没有变量的编程语言,能想象么?再次,公式就那几样,是个公仔啊,也没法繁衍自己的概念啊!最后,公式的参数都是单元格,单元格是有限的啊,无法解决无穷问题,这就意味着公式不是图灵完备的啊,也就没法解决任意计算问题。
综上,公式顶多算一蹩脚的脚本,算不上真正的编程语言。
2、但是微软声称,Office自1980年发布以来,Excel 改变了人们组织、分析和可视化数据的方式,为每天使用它的数百万人提供了决策依据。其中,Excel公式承担着非常关键的角色,用户使用规模比世界上所有 C、C++、C#、Java 和 Python 程序员的总和还要多一个数量级。 微软的意思是,Excel公式这口鱼塘,养得差不多了,是时候展开收网行动了(是时候将Excel公式升级为一门成熟的编程语言了)。
2019年ACM SIGPLAN编程语言原理研讨会,宣布了重大进展:一是,丰富Excel公式数据类型,不再局限于文本和数字,并允许单元格包含流记录,包括链接到外部数据实体。二是,动态数组允许普通公式计算溢出到相邻单元格。
2020年12月,推出LAMBDA机制,允许用Excel的公式语言编写新函数,这些新定义的函数可以调用其他LAMBDA定义的函数,任意深度,甚至递归。
这波操作,不得不说,微软的走位很风骚啊!
3、大家都知道,在OOP(面向对象)之后,又炒过一段时间函数式编程,很多人推崇备至。在函数式编程中呢,LAMBDA本身就是一种高度表达的编程结构,一个LAMBDA可以是另一个 LAMBDA或其结果的参数,完全可以进行柯里化。
有了LAMBDA,Excel公式不仅图灵完备了,可以胜任任何计算问题。关键是,还特么成了函数式编程的典范。如果各位看官觉着,函数式编程的概念很复杂,那么来看看Excel公式吧,也就是公式嵌套而已,大家都熟的,你们懂的!。
从今往后,又多了一门编程语言,它叫公式语言。每天将有数百万开发人员使用Excel,欢乐地解决着各种计算问题[捂脸]
4、如果觉得抽象空洞,那就来参观下官网的示例吧:
4.1、计算直角三角形的斜边长度,可以是这样=LAMBDA(X,Y,SQRT(X*X+Y*Y)),也可以是这样=LAMBDA(X,Y,LET(XS,X*X,YS,Y*Y,SQRT(XS+YS)))。该函数采用名为X和Y的两个参数,将X*X的值绑定到名称XS,将Y*Y的值绑定到YS,并返回SQRT( XS+YS)作为其结果。
4.2、递归反转字符串,这在以前超出了Excel内置公式,只能使用VB/VBA或JavaScript在公式语言之外编写。但现在不必了,下例中将REVERSE定义为递归LAMBDA,它利用几个辅助函数(HEAD和TAIL)分别计算第一个字符和除第一个字符以外的所有字符。
4.3、定义阶乘函数。在以往的传统公式中,名称具有非常广阔的应用场景,在使用传统宏,数据有效性(下拉选项),条件格式等领域,都有着名称的身影。在LAMBDA中,名称在简化表达和精简逻辑上仍然具有强大的用途。比如一个复杂的LAMBDA,往往具有繁琐的嵌套细节,如果使用名称来代替,就会清爽很多。上例1中的公式,用名称定义为aa,则可以用aa(x,y)来调用该公式,这样就无需在使用LAMBDA公式时重复整个公式。
即使不依赖递归定义的名称,公式语言也是图灵完备的,因为我们可以使用经典的按值调用对递归函数定义进行编码。
Excel公式真成为一门编程语言了,各位如何看?
[心]欢迎关注BtOfficer[心](收藏、点赞、关注+转发),更多精彩仍在继续哦(专栏文章将更系统,更全面,但需要阁下支持哦),有严肃的技术,也有轻松的唠嗑,期待你的加入! #公式##公式语言##编程语言#
举报
评论 0