函数式将会成为主流, 主要原因我就不说了, 网上多有介绍, 我这里说一下我个人认为网上没有提到的几点.
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语言精髓与编程实践》一书的相应内容。本文最末一个部分,对几种语言作一综述,一孔之见而已。 本书目录 目录 精简版·序...
Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写...
函数式编程 │ │ ├─lang Java语言拾遗 │ │ └─util 工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:...
Functional-Magic-Book函数式编程入门书籍《函数式魔法学》...cc是什么抽象语法树type rich programmingRust语言中的生命周期系统在工程中的各种实践函数式编程下的Web服务器实践Parser与Parser CombinatorsGUI编程与
Forest是一种编译为WebAssembly的函数式编程语言。 这个库包含编译器和核心语法,目前在Haskell中实现。
Elixir是一款免费的函数式编程语言,采用一种动态语言,灵活的语法和宏支持,建立在Erlang虚拟机之上,来构建并发、分布式、容错应用程序及热代码升级。软件功能强大,界面简洁,是您进行函数式编程的首选,需要的...
它被设计为一种简洁、灵活且易于学习的语言,具有许多现代编程语言的特性,如动态类型、函数式编程、以及面向对象编程等。下面是关于Mojo编程语言的一些介绍: 1. **简洁易读的语法**:Mojo采用了简洁易读的语法,...
Swift 是一门有着合适的语言特性来适配函数式..., 《函数式Swift》是一本引领你进入Swift 函数式编程世界的优秀读物,它让更多的中国开发者有机会接触并了解Swift语言函数式的一面,是广大程序开发者不可多得的工具书。
在函数式语言上进行泛型的研究与应用,Haskell语言是函数式语言中较为经典的一种语言,它的计算模型简单,语法清晰,易于编写,易于维护,拥有很大的发展空间。利用一些规则对Haskell语言的语法进行相关扩展,同时...
Swift是由苹果公司开发的一种编程语言。它被设计用于开发iOS、macOS、watchOS和tvOS等苹果操作系统的应用程序。Swift语言结合了C和Objective-C的特性,拥有现代化和易于学习的语法。 Swift语言具有以下特点: 安全...
看过许多关于函数式编程的讲解,但是其中大部分是停留在理论层面,还有一些是仅针对Haskell等纯函数式编程语言的。而本文旨在聊一聊我眼中的函数式编程在JavaScript中的具体实践,之所以是“我眼中的”即我所说的仅...
本书脱离特定的语言特性,...知名软件架构师Neal Ford为我们展示不同的编程范式,帮我们完成从Java命令式编程人员,到使用Java、Clojure、Scala函数式编程人员的完美转变,建立对函数式语言的语法和语义的良好理解。
组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练...
第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程...
函数式编程和Haskell语言简介。 基本概念和语法。 纯粹的功能和不变性。 从函数开始,键入签名并使用递归解决问题。 类型和类型类之间的区别。 (x:xs) -列表和列表问题。 模式匹配。 高阶函数-完整的软件包。 ...
Elixir是一门建立在Erlang虚拟机上的函数式的系统编程语言,支持元编程。创始人José Valim是ruby界的知名人士。 私以为,可以把Elixir看作函数式的ruby语言,或者是语法类似ruby的Erlang。Elixir受瞩目的原因,是...
7.12 元编程和函数式编程 159 7.13 C++的模板编译技术本质 161 7.14 OO的缺点 161 7.15 模板的继承 162 7.16 模板的偏特化 162 7.17 真正的策略 162 7.18 为设计产生代码 164 7.19 真正的metaprogramming 165 7.20 ...
以MetaML和Template Haskell为例论述在函数式语言中为了支持元编程需要扩展的机制,包括语法、语义、类型系统、安全的变量使用等,以及它们的实现方案、各方案的特点。最后总结一些元编程系统的共同点,并预测未来的...