【入門編】HSLのStringモジュール:マルチバイト文字列操作の罠を避けるためのベストプラクティス – Hack言語 コア・静的型システムとHHVMのアーキテクチャ解析バイブル

ようこそ、Hackの世界へ。

PHPという「自由奔放な荒野」から、Hackという「堅牢な要塞」へと足を踏み入れた君を歓迎するよ。Hackのチーフアーキテクトとして、一つだけ断言しておく。君がこれまで頼りにしていたPHPの文字列関数は、「砂の上の城」に過ぎなかった。

今日は、HSL(Hack Standard Library)の`Str`モジュールを使いこなし、マルチバイト文字という「悪魔」を飼い慣らす方法を教えよう。ここを理解すれば、君の書くコードは一気にプロフェッショナルな領域へと昇華されるはずだ。

—

1. なぜPHPの「あの関数」ではダメなのか?

PHPの文字列関数(`strlen`, `substr`など)は、歴史的経緯から「バイト単位」で処理を行う。これがUTF-8という現代の標準と衝突したとき、悲劇が起きる。

  • PHPの世界: `strlen(‘あ’)` は「3」を返す(バイト数)。
  • Hackの世界: `Str\length(‘あ’)` は「1」を返す(文字数)。

この違いは単なる「数え方の違い」ではない。「システムが文字列をどう定義しているか」という哲学の違いだ。 PHPは「文字列はバイトの配列」と見なすが、Hackは「文字列は意味のある文字の並び」として扱う。この認識のズレが、将来のバグの温床になるんだ。

—

2. HSL `Str` モジュールの基本:安全地帯への入り口

まずは、基本の操作を見てみよう。HSLは非常に直感的だ。

use namespace HH\Lib\Str;

// 1. 安全な文字数カウント
$s = “こんにちは”;
$len = Str\length($s); // 結果: 5 (バイト数ではなく文字数)

// 2. 予測可能な部分文字列の切り出し
// PHPのmb_substr(…, 0, 2)の代わりにこれを使う
$short = Str\slice($s, 0, 2); // 結果: “こん”

// 3. 検索も直感的
$pos = Str\search($s, “にち”); // 結果: 2 (インデックス番号)

ここがポイント!

PHPでは「関数が失敗したとき、`false`を返すか、`null`を返すか」を毎回マニュアルで確認する必要があったよね? HSLは違う。「期待する戻り値の型が明確である」こと。これがHackの静的型システムの真骨頂だ。`Str\search`が失敗すれば、それは`null`として返却される。型チェッカーが、君がその`null`を無視するのを許さないんだ。

—

3. 陥りやすい「罠」:マルチバイトの境界線

初心者が最もよくやるミスが、「バイトインデックスでのアクセス」を試みることだ。

$str = “Hack言語”;
// 間違い:
// $char = $str[0]; // これはバイトとしてのアクセスを試みている(不適切な型や挙動の原因になる)

Hackでは、文字列を「ランダムアクセス可能な配列」のように扱うのはやめよう。もし特定の文字にアクセスしたいなら、一旦`Str\split`で配列にするか、イテレータとして回すのが正解だ。

図解的イメージ:

  • PHPの視点: [1バイト目][2バイト目][3バイト目]… とメモリを覗き込む(壊れやすい)
  • Hackの視点: [「H」][「a」][「c」][「k」][「言」][「語」] と、文字の塊を掴む(堅牢)

—

4. ベストプラクティス:こう書けば君は最強になれる

実務で「マルチバイト文字列」を扱う際の鉄則を授ける。

1. 常にHSLをインポートする: `use namespace HH\Lib\Str;` をファイル冒頭に書く習慣を。
2. `strlen`は絶対禁止: 文字数を数えるときは必ず `Str\length`。
3. 型の恩恵を受ける: `Str`関数の戻り値を、型チェッカーが推論しやすいように変数に代入しよう。

// 良い例: 型を明示的かつ安全に扱う
public function getExcerpt(string $text): string {
if (Str\length($text) > 10) {
return Str\slice($text, 0, 10) . “…”;
}
return $text;
}

—

最後に:君へのエール

最初は「PHPの関数が使えないなんて面倒だな」と感じるかもしれない。だが、これは「君がミスをする隙を、言語側が埋めてくれている」ということなんだ。

HHVMのアーキテクチャは、君が書いた型安全なコードをJITコンパイラで猛烈に最適化する。HSLを使うことは、単に安全なだけでなく、HHVMのパフォーマンスを最大限に引き出すことにも繋がるんだ。

ここをクリアした君なら、もうHackの基本はバッチリだ。次のステップでは、`Vec`や`Dict`といったHSLのコレクション操作についても学んでいこう。

道は険しく見えるかもしれないが、振り返ればそこには強固な技術力が身についているはずだよ。頑張ろうぜ、未来のコアコミッター!

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