C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

Dart: "can HEX_DIGIT_SEQUENCE not run yet?" // HEX_DIGIT_SEQUENCE の使い方

Dart 言語仕様書を読んで試してみて、文字列リテラルの仕様に1つだけ謎が残っていました。"HEX_DIGIT_SEQUENCE"についての記述が§10.5にあります。ユニコードのコードポイントを直接数値指定して文字とする為の仕様の一部なのですが、 HEX_DIGIT_SEQUENCE について上手く試せずに居たのです。そこで:

という感じで Dart のなんでもディスカッションしようよな感じの ML にポストしてみたのでした。

結論としては、 HEX_DIGIT_SEQUENCE の使い方の想定が、私が仕様書を読みながら捉えてしまったものと、実際とでは割と違う挙動だった事が挙げられます。正しい HEX_DIGIT_SEQUENCE の使用法はこんな感じ:

main(){
  var mojimoji = "abc\u{22C9}DEF";
  print(mojimoji);
}

HEX_DIGIT_SEQUENCE を私はHEX_DIGITなコードポイントのシーケンス( 9a 22c9 22b7 ... みたいな)ものと勘違いしちゃってたんですねー。実際のところは上記のコード例の様に、1つのコードポイントを表すHEX_DIGITなシーケンスであって、基本的には内挿用の機能だと思って措いて良いでしょう。

ちなみに、 Dart では文字列リテラルに文字列オブジェクトを「内挿」する事が出来ます。(仕様書のここでの"interpolation"は補間じゃありませんよー・w・;)

main(){
  var canmake = "キャンメイク";
  var majomajo = "マジョリカマジョルカ";
  print("${canmake}でもいいけど${majomajo}のチークが欲しいなー☆(ゝω・)vキャピ");
}

の様な事ができます。ほぼシェルスクリプトそのままの便利機能ですね!

#!/bin/sh
salt='しお'
pepper='こしょう'
olive='おりーぶ'
sauce='とんかつそーす'
echo "どうしてこのパスタは${salt}と${pepper}しか使っていないの?"
echo "だっていま${olive}を買うともこみちファンみたいで嫌だったから…"
echo "いえ、そうじゃなくてもうちょっと気の利いたソースを"
echo "${sauce}なら冷蔵庫に…"
echo "もういいわ・x・"

特に意味は無い・x・