入门
如果您是Hack的新手,这本入门指南应该可以帮助您快速熟悉基础知识;如果您尚未阅读我们对Hack主要功能的介绍,那么您可以深入了解感兴趣的主题,以获得有关Hack所提供内容的更多知识。
概观
编写和执行Hack代码所需的先决条件非常简单:
HHVM运行时
Hack类型检查器(作为HHVM运行时构建的一部分包含在内)
可选地,可识别Hack的编辑器。我们推荐Nuclide,它拥有对Hack的一流支持。
HHVM运行时是(1)执行Hack代码(2)以运行Hack类型检查器所必需的,这是使用Hack语言的基础优势 - 确保您的代码编写良好,安全且一致。
试试我们的交互式黑客教程
您实际上可以开始学习Hack而无需安装任何软件。只需访问交互式Hack教程,即可逐步了解一些Hack功能。
你的第一个黑客程序
让我们直接进入并通过五个简单的步骤创建您的第一个Hack程序。
1.安装HHVM和Typechecker
查看有关如何安装HHVM的HHVM入门指南。
安装HHVM后,您可以使用Hack类型检查程序在运行之前静态检查代码。它不是编译器;而是一个超快速的代码分析器,它试图在运行代码之前或之后捕获动态编程错误。
类型检查器称为hh_client
,默认情况下可与HHVM团队支持的所有正式软件包中的HHVM一起使用。如果您使用的是社区提供的软件包,那么hh_client也很可能也可用,但您应该咨询软件包维护者。
- Typechecker的设置
选择要存储Hack代码的目录。在此目录中,运行touch .hhconfig。这会创建一个空文件,hh_client会将其作为代码的根来进行类型检查。为了正确分析您的代码,类型检查器需要进行全局分析并能够查看所有代码。这意味着它假定该根目录下的任何代码都使用全局自动加载器,并将此根下递归检查的所有代码作为一个项目。
3.编写你的第一个Hack程序
使用您选择的编辑器(例如,Nuclide,vim,Sublime Text),让我们使用以下代码创建一个名为first.php的文件:
<?hh
namespace Hack\UserDocumentation\Quickstart\Examples\First;
class Box<T> {
public function __construct(private T $elem) {
}
public function get(): T {
return $this->elem;
}
}
function get_int(): int {
return 42;
}
function use_box(): void {
$box = new Box(get_int());
$i = $box->get();
\var_dump($i);
}
use_box();
本入门指南假设了一些编程知识(例如,类是什么,函数或方法是什么等)。如果您熟悉PHP,则Hack具有类似的外观和感觉。如果您不熟悉PHP,那么所有这些都是新的,但希望您熟悉一般结构。评论提供了各种细节,但以下是关键点:
此示例创建一个名为Box的类。
Box类是通用的。
构造函数参数提升用于类构造函数。
对于函数参数和返回类型,无处不在使用类型注释。
4.运行Typechecker
如果您使用的是像Nuclide这样的编辑器,您将在编写程序时看到类型检查信息。如果从命令行运行typechecker,则命令只是:
% hh_client
你应该看到:
没错!
现在假设我们将get_int()
的返回类型更改为bool而不是int。如果运行类型检查器,您将看到如下内容:
first.php:15:10,11: Invalid return type (Typing[4110])
first.php:14:21,24: This is a bool
first.php:15:10,11: It is incompatible with an int
这展示了Hack类型系统和类型检查器的强大功能:它可以让您知道您可能没有返回您认为正在返回的内容。对于所有代码,类型检查程序会在您的代码库中进行这些检查,而无需运行它。
5.在HHVM中运行代码
在让您的Hack程序清除没有错误的情况下,您可以在HHVM中运行该程序。
% hhvm first.php
这是输出:
int(42)
学到更多
现在您已经熟悉了简单的Hack程序,继续学习Hack的最佳资源是继续阅读我们的官方Hack文档。这是最好的起点:
Hack的功能介绍
帮助您编写Hack的工具
关于Hack的常见问题
哈克强大的打字系统
使用Hack进行异步编程
Hack中的收藏
还有一本关于HHVM和Hack的精彩书籍,由HHVM团队的工程师编写。对于PHP,PHP的文档包含对PHP的介绍,并且有许多在线教程。 Hack还有一个在线互动教程。