做一个优雅的程序员
JavaScript是一门优雅的语言, 这个'优雅'体验在JS逻辑层次处于高段位的水平, 什么意思呢, 就是一个js应用的主线剧情一定全部是函数式表达的高层可读逻辑, 还是不懂? 再举个栗子:
一个node.js应用程序中index.js文件里面从来都不会出现一些封装的工具比如斐波那契求和函数, 也不会出基础现常量表达式比如数值, 字符串, 正则表达式, 因为这些都属于数据而不是代码!!
如果你的主线文件(比如index.js)中出现了8080, "不好, 数据404了", /^[^ ]{5}$/, 之类的本应该写在配置文件中的数据, 说明你还不是一个优雅的程序员~
永远要记住, 数据与代码的区别!!!
EcmaScript是一门优雅的函数式编程语言
什么是函数式编程???
函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
和过程化编程相比,函数式编程里函数的计算可随时调用。
函数式编程的核心是表达式(expression), 众所周知JavaScript中一切都是表达式, 表达式的排列组合构成了世间万物. 所以理想状态下代码中是不应该存在语句的, 可是目前js还是有许多常见的语句比如变量声明语句(var, let, const), 逻辑控制语句(if, for, try&catch), 该怎么办呢, 这些语句其实都可以用函数表达式来替代! 下面听我一一分析(*^__^*) ……
但是先记住, 将语句全部替换成表达式是有代价的, 比如
js语句某种意义上增加了语法多样性的美
但是无所谓, 为了实现我函数式编程语言的大一统, 语句必须被封杀, 语法多样性我们不是有异步机制来带的各种新奇语法吗..
if else --> 3元表达式
if判断语句可以用3元运算符“条件表达式A?表达式1:表达式2”来简单替代, 条件表达式A就是if中的bool数据, 同时也可以替代if的嵌套. if不是重点因为可能很多看官发现了, 复杂情况下用3元来替代if实在是太丑了, 完全丧失了可读性, 我也不推荐这种强扭的替换, 只是为了证明, if语句并不是不可替代的.
循环 --> 数组方法
重点来啦!!
JavaScript中所有的循环语句, 无论是for还是while, 都可以统统用Array.prototype的map,filter,find,some,every,forEach来替代(强烈推荐)
循环通常要遍历一个数组, 利用数组原生提供的这些方法可以完美的满足各种功能, 不仅从语法上取代了传统循环尴尬的表现力, 更从api的层面上扩展了丰富的方法, 这里就不一一展开说明了. 利用数组替代循环还需要注意以下的Q&A:
如果要指定循环次数怎么办?
手动构造一个数组非常简单:
如果需要循环count = 10次的任务, 构造一个长度为count的数组即可:
Array.from({length: count}).forEach
还有种更暴力的办法: new Array(count).forEach
需要中断循环呢?
so easy.
find回调返回true, some回调返回true, every回调返回false: 这3种方法可以完美的中断数组的遍历
除此之外continue关键字也可以用return替代!
try&catch语句
解决方案: catch关键词变成catch方法
比如Promise的catch就完美的封装了异常捕获机制
优雅的函数式编程风是未来的主流
首先, 函数式和面向对象是并不互斥
函数式是对面向对象的升华, 取其精华去其糟粕, 继承并扩展了对象分装的哲学同时也削减了臃肿的继承机制.
未来, 面向对象的编程思想依然存在, 但函数式编程风格, 即基于事件的非阻塞引擎, 精简语义化的主线剧情, 以表达式为基本元素的代码块将成为编程界新的风景线.