函数式将会成为主流, 主要原因我就不说了, 网上多有介绍, 我这里说一下我个人认为网上没有提到的几点.
1, 函数式比命令式语言更加纯粹. 语法少很多
2, 不再为临时变量而纠结. 函数式中没有循环, 使用嵌套函数(闭包)+递归可以替代循环, 而且编译出来的代码, 应该差不多的. 好处呢看个简单的例子, 一个比较长的函数的话, 往往中间很多临时变量, 那些变量到后来有没用到, 在命令式语言里是不能直接看出来的, 而使用闭包, 就能清晰的将临时变量划到闭包中, 临时变量不再纠结. 更多时候还能避免全局变量的使用. 代码更加的清晰.
3, 函数式更便于思维, 仔细想一下, 递归的函数更容易想出来呢还是循环的版本?
说到这里, 我想起javascript了, 很纠结的语言, 由于闭包的实现方式是使用scopechain, 所以其函数式代码的性能降低了很多.
这两天有一点状态, 设计了一个语法解决了很多纠结的地方(示例代码中的其他语法并未定, 只是为了举例而随便选的一种)
看看这一个语法(注意其纯粹性, 是一个语法, 其实就是增加一个函数左侧实参的语法)
1,
someFunc(obj: SomeObj){}
o = new SomeObj
纠结的版本:
someFunc(o)
使用该语法的版本:
o->someFunc
2,
如要写程序打印1到100的和是多少
print 100 -> sum(n) {
n == 1 ? 1 : n + sum(n - 1)
}
看看纠结的版本:
print(function sum(n){
return n == 1 ? 1 : n + sum(n -1);
}(100));
这里忽然想说一下我的这个语言中常量表达式的定义, 常量表达式由其他常量表达式组成, 可以是字面量或者纯函数(没有副作用的函数), 所以可以看到我们这里的100 -> sum(n) 其实是一个常量表达式, 是可以在编译期决定值的. 而print函数是IO函数, 不是纯函数. 所以优化后的代码大概是5050 -> print
3,
额外的功能(其实就是carry, 如果要更灵活的carry就自己redefine吧)
redefine版本:
pow2(n){ pow(2, n) }
使用该语法的版本:
pow2 = 2 -> pow
为了纯粹性正在考虑是否放弃右侧实参.
模式匹配语法, 正在考虑是否用类似下面的
a == {
| 1 => "mon"
| 2 =>"tus"
| ""
}
考虑第一个竖杠是否可以省略
a instanceof {
| A => A.typi
| B => B.typi
| Object.typi
}
模式匹配理论上讲是顺序匹配的, 但是如果左侧的大部分是常量的话, 可以将那一部分优化成接近switch的哦.
a -> {
| cond_func1 => 1
| cond_func2 => 2
}
左侧表达式是可以用函数的
isItemInArray = item == {| array.each }
左侧表达式可以是迭代器, 右侧为空匹配时默认返回true, 都不匹配时无默认值则默认返回false
模式匹配语法让if elseif不再纠结. 减少了一些重复代码. 更重要的是代码看起来更清晰.
分享到:
相关推荐
本文主要有“命令式语言”、“函数式语言”和“动态语言”三个部分,均精减自《JavaScript语言精髓与编程实践》一书的相应内容。本文最末一个部分,对几种语言作一综述,一孔之见而已。 本书目录 目录 精简版·序...
Stream API的设计非常适合函数式编程,因为它鼓励使用声明式编程风格,而不是命令式风格。 4. **Optional类**: Optional是一个容器类,代表一个值存在或不存在。它帮助防止空指针异常,鼓励程序员显式处理缺失值...
Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写...
在iOS开发中,我们通常使用Swift语言,Swift虽然不是纯函数式语言,但它的语法特性支持了函数式编程风格。例如,高阶函数、闭包和类型推断等特性,使得我们可以在Objective-C的基础上更轻松地实现函数式编程。 在...
在IT领域,Python和Fortran都是重要的编程语言,各自在特定的场合下有着出色的表现。本文将探讨如何在Fortran中应用函数式编程思想,并结合Python的开发实践,揭示这两种语言在函数式编程上的交互与融合。 Fortran...
《程序设计语言实践之路-1_lisp_python_》是一本深度探讨编程语言理论与实践的书籍,它将传统的程序设计语言教科书内容与编译原理相结合,同时加入了关于汇编层体系结构的基础知识,旨在为那些没有计算机组织背景的...
LISP是一种早期的高级编程语言,以其简洁的语法和强大的函数式编程能力著称。在Python中,我们也能看到很多LISP的影子,尤其是在使用函数、高阶函数、闭包以及列表推导等方面。 函数式编程是一种编程范式,它将计算...
《C#编程新语言》是一本专为初学者设计的优秀教材,旨在系统地引导读者掌握C#这门强大的编程语言。C#是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows桌面应用、游戏开发、移动应用以及云计算等领域。...
Python-Forest是一个独特的编程语言,它以其函数式编程特性为亮点,并能编译成WebAssembly(WASM)代码。这一特性使得Forest能够在各种平台上运行,包括浏览器环境,为开发者提供了一种高效、跨平台的解决方案。 **...
C#作为一门多范式的编程语言,不仅支持面向对象编程,还提供了丰富的函数式编程特性。 1. **函数作为值** 在函数式编程中,函数被视为一等公民,可以作为变量赋值、作为参数传递给其他函数,甚至作为其他函数的...
- **Clean语言**是一种现代化的纯函数式编程语言,它具有并发处理能力,适用于教育、研究以及实际应用开发。 - **特点**:与Miranda、Haskell和ML等其他现代函数式语言有许多共同之处,同时提供了额外的支持用于独立...
函数式编程语言可以分为两类: 1. 纯函数式语言:这类语言仅支持函数式编程范式,例如Haskell。它们的特点是,不支持命令式编程,如循环和条件语句,而是通过递归和条件表达式来进行计算。 2. 不完善的函数式语言:...
根据提供的标题“编程语言原理(第10版)”及描述“编程语言原理(第10版 编程语言原理)”,我们可以推断出这本书主要讲述了编程语言的基础理论与实践应用,是学习和理解编程语言设计与实现的重要参考资料。...
Lift编程语言是一种专注于GPU(图形处理器单元)编程的高性能、可移植的函数式语言。它的设计目标是提供一个简洁、高效且易于理解的语法,以便开发者可以充分利用GPU的并行计算能力。由于GPU在处理大规模数据并行...
【本科毕业设计】“简单的函数式语言实现(编译器+解释器)”是一个典型的计算机科学项目,旨在让学生深入了解编程语言的内部工作原理,特别是函数式编程语言。在本设计中,学生将面临编译器与解释器的设计与实现,这...
2. 编程语言理论基础:书中应当涵盖了编程语言的一些核心理论,例如编程语言的定义、分类(命令式、函数式、逻辑式等)、编程范式以及它们之间的区别和联系。 3. 语义和语用的详细阐释:语义学是研究语言的意义的...
面向对象编程之类第13讲-Scala编程:面向对象编程之对象第14讲-Scala编程:面向对象编程之继承第15讲-Scala编程:面向对象编程之Trait第16讲-Scala编程:函数式编程第17讲-Scala编程:函数式编程之集合操作第18讲-...
函数式编程 │ │ ├─lang Java语言拾遗 │ │ └─util 工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:...
λ演算是由美国逻辑学家阿尔弗雷德·丘奇(Alonzo Church)提出的,它是现代函数式编程语言的基础之一。 #### 四、λ演算简介 λ演算是一种形式化的数学理论,用于研究函数抽象和应用的形式化表示方法。它的语法非常...