Hack语言特性之类型化

Hack最基础的特性就是类型标注。PHP5已经开始支持对象的类型化,PHP7也提供了标量类型化声明。Hack提供了全面的类型标注支持,与其typecher配合使用,还可以实现快速、前置静态类型验证。

什么是类型标注?

类型标准允许给类属性、方法/函数参数、方法/函数返回值及代码其它组件添加显示类型,如int。

举个例子,下面的代码是用正规的PHP编写的,没有任何类型:

<?php

namespace Hack\UserDocumentation\Overview\Typing\Examples\PHPFunction;

function bar($a, $b) {
  if ($a > 0) {
    return true;
  } else {
    return $b < 0;
  }
}

var_dump(bar(3, -1));
var_dump(bar(-1, 10));
Output
bool(true)
bool(false)

代码作者的本意很清楚,$a 和 $b都是int型,代码也是用于算术运算。但实际上没有写任何代码来保证这个计算能正常进行。

假设你在对该代码进行测试,在$a的值始终为正整数时好像每次都是正常的。你不会天真的以为这是段无错代码吧,看看这种情况:当$a <= 0,且$b不是int型值时,就会导致意图不明的结果!

Hack的类型标注机制可以帮助你防止这类运行时错误。你可以显式告知Hack你所希望的变量类型:

<?hh

namespace Hack\UserDocumentation\Overview\Typing\Examples\HackFunction;

function bar(int $a, int $b) {
  if ($a > 0) {
    return true;
  } else {
    return $b < 0;
  }
}

var_dump(bar(3, -1));
var_dump(bar(-1, 10));
Output
bool(true)
bool(false)

typechecker现在可以准确知晓开发者的意图:两个参数都是整数。typechecker会扫描所有代码,且在每行代码执行时知道是否不变量是否满足条件。不用关心$a在运行时的值 - typechecker会确保$b类型是准确的。换句话说,Hack的typechecker执行静态类型检查 - Hack是一种静态类型语言。

静态类型语言 在编译期间进行类型检测,通常可以防止类型相关的错误。

动态类型语言 在运行时进行类型检测,允许更多的灵活性,在损失让类型错误通过的情况下
你可以采用Hack的强类型特性,也可以继续在Hack中享受动态类型语言的灵活性。

为什么这一点很有用?

如果你正在编写代码,可能有隐式类型的概念;当你敲出一行代码时,你脑袋里是会假定变量、参数等的类型的。Hack的类型标注机制帮助开发者少犯错误并少引入错误:

  • 在运行之前捕捉bug
  • 允许IDE自动完成类型敏感的函数,并提供行间错误通知
  • 清晰的向其它开发者表明意图
  • 阻止不安全的编码实践如 switch fallthrough.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值