【入門編】HackにおけるNullable型のハンドリング:`is`演算子と`assert`を活用した型絞り込み – Hack言語 コア・静的型システムとHHVMのアーキテクチャ解析バイブル

Hackの世界へようこそ。HHVMの深淵から見上げると、コードは単なる文字列ではなく、静的型システムという名の「証明」の積み重ねに見えてくるはずです。

今回は、Hackにおける「Nullable型のハンドリング」、つまり `?T` とどう向き合うかについて話しましょう。多くのエンジニアがここで躓きますが、ここを掌握すれば、あなたのコードは「実行時エラーという名の悪夢」から解放されます。

—

1. なぜHackは「null」に厳しいのか?

Hackの `strict` モードにおいて、`null` は「そこに値が存在しない」という確固たる事実です。他の言語のように、何も考えずにメソッドを呼び出せば、HHVMは容赦なく例外を投げます。

// 悪い例:Null安全を無視したコード
function getLength(?string $s): int {
return $s->length(); // エラー! $sがnullかもしれないのに、メソッドを呼ぶなと型チェッカーが怒ります
}

この「怒り」こそがHackの優しさです。では、どうやってこの「霧」を晴らし、安全に値を抽出するのか。それが型絞り込み(Type Refinement)です。

—

2. 魔法の杖:`is` 演算子による型ガード

最も直感的で、かつ強力なのが `is` 演算子です。これを使うと、Hackの型チェッカーは「ああ、このスコープ内では確実に値があるんだな」と納得してくれます。

function processString(?string $input): void {
// if文でチェックを行う
if ($input is string) {
// ここでは $input は string 型として扱われる
echo “長さは: ” . (string)$input->length();
} else {
// ここでは null であることが保証される
echo “値はありませんでした”;
}
}

ポイント: `if ($input is string)` と書いた瞬間、そのブロック内では型チェッカーの推論エンジンが `$input` の型を「昇格」させます。これがHackのスマートなところです。

—

3. 守護神:`invariant` と `assert`

ビジネスロジックの途中で「いや、ここは絶対にnullであってはならない」という場所がありますよね。そんな時は `invariant` を使いましょう。

use namespace HH;

function fetchUserEmail(?int $id): string {
// $id が null ならば、ここで即座に例外を投げて停止させる
// 開発中のミスを早期発見するための強力な武器です
invariant($id is int, “IDは必須です!”);

// ここまで到達すれば、$id は int であると型チェッカーは確信している
return “user_” . (string)$id;
}

`assert` も似ていますが、`invariant` は「プログラムの不変条件(絶対にこうあるべき)」を定義するHackの標準的な作法です。これを使うだけで、コードの信頼性は劇的に向上します。

—

4. 陥りやすい罠:条件式での「うっかり」

初心者がよくやるのが、変数の値を更新してしまって型絞り込みが解除されるパターンです。

function dangerousCode(?string $s): void {
if ($s is string) {
$s = null; // こうすると型絞り込みが無効化される!
echo $s->length(); // 当然、エラーになります
}
}

型チェッカーは「今の状態」を常に監視しています。`is` で絞り込んだ後に変数を再代入してはいけません。「一度安全を確認したら、その値は神聖なものとして扱う」。これがHack流のコード作法です。

—

5. まとめ:型安全は「安心」への近道

Hackの厳格な型システムは、最初は窮屈に感じるかもしれません。しかし、それはあなたを守るための防壁です。

1. `?T` には常に疑いの目を向ける
2. `is` 演算子で積極的に型を絞り込む
3. 不変条件には `invariant` を突き立てる

これさえ守れば、実行時の「予期せぬNull参照エラー」はゼロになります。コードを書いている最中に型チェッカーと対話し、彼が「OK」と言ってくれるまでコードを磨き上げる。それが世界最高峰のエンジニアへの第一歩です。

さあ、次はあなたの番です。エディタを開いて、この型安全という名の武器を使いこなしてみてください。きっと、今までよりもずっと自信を持ってコードをコミットできるようになりますよ。

タイトルとURLをコピーしました