2019-12-07 beater の Test について悩んでいる
bouzuya/beater の Test を変えようかと思っている。まだ迷っている。
いまは Test を test() でつくるようになっている。実体は↓だ。
interface Test {
fn: () => Promise<void>;
meta: Map<string, string>;
}
現状は meta.set('name', name) に test(name, fn) の name が入る。
meta にいろいろ入れようと思っていた。ただそのための API が思い浮かばない。 testWithMeta(name: ..., map: Map<string, string>, fn: ...) まどろっこしい。実装が露出しすぎている。かといって [string, string][] を使うのもよく分からない。どの key に何を入れるのかも悩ましい。そもなぜ name を別で取るんだ。
次に name は function name() の name じゃだめなのかと。他の言語だと関数名・メソッド名をテスト名にしている例がままある。仮に空白が使いにくいからだとしてもそのときだけ test(name, fn) を。実装としては Object.defineProperty(fn, 'name', name); を使えばいいのではないか。あとは name を省略しても別に良い気もしている。 test(name, fn) で name を必須化することに違和感がある。
Test を単純に Function としてしまえばいいんじゃないか。 name は function name() でも良いし必要なら Object.defineProperty を wrap した helper を使えばいい。 meta も必要に応じて Object.defineProperty でいいんじゃないか。
そうすれば beater の API から test は削除されて run と runWithOptions だけになる。 run* しかないのは runner 感が出ていいんじゃないか。と。
またひとつ照明を Google Home で操作できるものに変えた。
『実践 Rust 入門』第 4 章を読んだ。