「Hack (プログラミング言語)」の版間の差分
| 89行目: | 89行目: | ||
// barbazが表示される | // barbazが表示される | ||
echo $fn('baz'); | echo $fn('baz'); | ||
} | |||
</source> | |||
===newtype=== | |||
Hackには[[C++]]の[[typedef]]のようなものが搭載されている。 | |||
<source lang="php"> | |||
newtype RoofRaised = float; | |||
</source> | |||
「[[Bjarne Stroustrup インタビュー]]」の一説で、「RoofRaised って何だと思って、長い時間をかけてヘッダーファイルを調べてみたら、ただの double だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべてのクラスで暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う? 」などと馬鹿にされたアレである。 | |||
一方、Hackのnewtypeは若干良くなっており、既存の型に制約を与えるための物として機能する。 | |||
<source lang="php"> | |||
<?hh | |||
// email型を宣言 | |||
newtype email = string; | |||
// 引数mailに渡す値は、email型に明示的にキャストしていないとエラーになる。 | |||
function setName(email $mail) : void | |||
{ | |||
} | } | ||
</source> | </source> | ||