ハロー、Hackの世界へようこそ。HHVMの深淵からコンパイラの最適化までを見つめてきたアーキテクトとして、今日は君たちにHackの「真髄」を授けよう。
多くのプログラマーが型システムを「縛り」だと勘違いしているが、それは大きな間違いだ。型システムとは、「君が将来犯すはずのバグを、コンパイル時に僕たちが代わりに消し去ってやる」という、極めて親切な安全装置なんだ。
今回は、その中でも特に強力な「Union型」と「網羅的チェック」について解説するよ。ここさえ押さえれば、君のコードは実行時の謎のクラッシュから永遠に解放される。準備はいいかな?
—
1. Union型とは何か?:可能性を記述する贅沢
Hackにおいて、ある変数が「Aであるか、あるいはBである」という状態を表現できるのがUnion型だ。
// ユーザーのステータスを定義するUnion型
type UserStatus =
| ‘active’
| ‘suspended’
| ‘pending’;
これを見ただけで、何が嬉しいか分かるかい? 「文字列型」とだけ指定するよりも、遥かに情報密度が高いんだ。型チェッカーは「この変数はこの3つ以外の値にはなり得ない」と確信できる。これが安全性の第一歩だよ。
—
2. switch文による「魔法の網羅的チェック」
さて、ここからが本題だ。この `UserStatus` を使って分岐処理を書くとき、一番怖いのは「新しいステータスを追加したのに、分岐処理を修正し忘れる」ことだよね。
でも、Hackなら大丈夫。`HH\FIXME` を使わずに済む、究極のパターンマッチングを教えるよ。
function getStatusMessage(UserStatus $status): string {
switch ($status) {
case ‘active’:
return ‘利用可能です’;
case ‘suspended’:
return ‘停止中です’;
case ‘pending’:
return ‘承認待ちです’;
// ここで網羅性がチェックされる!
}
}
もし、将来 `UserStatus` に `’deleted’` が追加されたらどうなると思う? Hackの型チェッカー(`hh_client`)は、「おい、`deleted` のケースが抜けてるぞ!」と即座に怒ってくれる。
これが、「網羅的チェック(Exhaustiveness Checking)」の力だ。ランタイムで例外を吐くコードを、開発中にコンパイルエラーとして摘み取れる。これぞHackの醍醐味だよ。
—
3. 陥りやすい罠:なぜ「default」を使ってはいけないのか
ここで初心者がやりがちな「アンチパターン」を伝授するよ。それは `switch` 文に `default` 句を書いてしまうことだ。
// 悪い例
switch ($status) {
case ‘active’: return ‘…’;
case ‘suspended’: return ‘…’;
default:
return ‘その他’; // これを書くと型チェッカーは黙ってしまう
}
`default` を書くと、型チェッカーは「ああ、その他も全部ここで処理するんだな」と納得してしまい、新しい型が増えてもエラーを報告しなくなる。「あえて網羅させない」という設計でない限り、defaultは使わない。 これが堅牢なシステムを作る鉄則だ。
—
4. もっと深く:Algebraic Data Types(代数的データ型)への道
もし君がさらに高度な処理をしたいなら、`Shape` や `Enum` を組み合わせて、よりリッチな状態管理を行うといい。
enum UserRole: string {
Admin = ‘admin’;
Editor = ‘editor’;
}
// switch文と組み合わせることで、堅牢性が爆上がりする
function getPermissionLevel(UserRole $role): int {
return match ($role) { // match式も便利だね
UserRole::Admin => 10,
UserRole::Editor => 5,
};
}
`match` 式は `switch` よりもさらに厳格で、戻り値がないとコンパイルエラーになる。モダンなHackを書くなら、積極的に使っていこう。
—
最後に:型と友だちになろう
Hackの型システムは、決して君の自由を奪うものではない。君が書くコードの「意図」をコンパイラと共有し、チーム開発における「修正漏れ」というヒューマンエラーを機械的に防ぐための最強の相棒なんだ。
最初はエラーメッセージの多さに圧倒されるかもしれないけれど、それは型チェッカーが「ここ、もっと良くできるよ!」とアドバイスを送ってくれている証拠。一つ一つ潰していくうちに、君の書くコードは驚くほど美しく、そして堅牢になっているはずだ。
さあ、エディタを開いて、厳格な型付けの世界を存分に楽しんでくれ。何か詰まったら、いつでも戻っておいで。僕たちは、いつでもここ(HHVMの深淵)で見守っているよ。