源码篇(1)——Flow语法

相信大家都知道,javascript是弱类型的语言,在写代码同时也十分容易犯错误,Facebook搞了这么一个类型检查工具,可以加入类型的限制,提高代码质量,举个例子:

function sum(a, b) {
  return a + b;
}

可是这样,我们如果这么调用这个函数sum('a', 1) 甚至sum(1, [1,2,3])这么调用,执行时会得到一些你想不到的结果,这样编程未免太不稳定了。那我们看看用了Flow之后的结果:

function sum(a: number, b:number) {
  return a + b;
}

我们可以看到多了一个number的限制,标明对a和b只能传递数字类型的,否则的话用Flow工具检测会报错。其实这里大家可能有疑问,这么写还是js吗? 浏览器还能认识执行吗?当然不认识了,所以需要翻译或者说编译。其实现在前端技术发展太快了,各种插件层出不穷--Babel、Typescript等等,其实都是将一种更好的写法编译成浏览器认识的javascript代码(我们以前都是写浏览器认识的javascript代码的)。我们继续说Flow的事情,在Vue源码中其实出现的Flow语法都比较好懂,比如下面这个函数的定义:

export function renderList (
  val: any,
  render: (
    val: any,
    keyOrIndex: string | number,
    index?: number
  ) => VNode
): ?Array<VNode>{
...
}

val是any代表可以传入的类型是任何类型, keyOrIndex是string|number类型,代表要不是string类型,要不是number,不能是别的;index?:number这个我们想想正则表达式中?的含义---0个或者1个,这里其实意义也是一致的,但是要注意?的位置是在冒号之前还是冒号之后--因为这两种可能性都有,上面代码中问号是跟在冒号前面,代表index可以不传,但是传的话一定要传入数字类型;如果问号是在冒号后面的话,则代表这个参数必须要传递,但是可以是数字类型也可以是空。这样是不是顿时感觉严谨多了?同时,代码意义更明确了。为啥这么说呢? 之前看打包后的vue源码,其中看到观察者模式实现时由于没有类型十分难看懂,但是看了这个Flow版本的源码,感觉容易懂。 当然,如果想学习Flow更多的细节, 可以看看下面这个学习文档:
Flow学习资料

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值