このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

TypeScriptのはなし : サンプル記述に最良の言語

先週の金曜(2018-01-12)に、「TypeScript、お前もか: nullやundefinedの扱いがイイカゲン過ぎ」という記事(後にタイトルに「【事実誤認あり】」を追加)を書いたのですが、ほぼ言いがかりでした。謝罪と修正は「TypeScript、僕が悪かった、ゴメン: nullやundefinedの扱いはマトモだった」に書いてあります。

申し訳ないことをしたので、TypeScriptに関してポジティブな話を書きます。そもそも僕はTypeScript好きなんですよ。文句を付けた記事の書き出しは、

  • TypeScriptには期待してたんだけど、ガッカリだよ。

ですが、第二の文は、

  • それでもまー、割と好きだけど。

本文中にも、

  • nullやundefinedに関しても、整合的で安全なセマンティクスをかぶせているだろう、と。「期待していた」というより、思い込んでいた、信じていたのです。

と、信頼を寄せていた心情が伝わるでしょ。早とちりで「信じていたのに裏切られた」と誤解してカッとなったのですけど。

さて、TypeScriptはJavaScript+αなのですが、もとが極めてポピュラーなJavaScriptであって、+αの機能も持っていることから、現状において、サンプルコードを書くには最良の言語だと思います。

僕は、かなり昔から「サンプルコードはJavaScriptで書こう」と決めていました。2006年1月21日に書いた次の短い記事でそう表明しています。

当時の状況も書いてあったりして、懐かしい気分になります。

実を言えば、このあいだまでJavaScriptは「なんかトンデモない言語仕様の、ひどく貧弱な言語」-- みにくいアヒルの子と捉えていたのですが、りっぱな白鳥に、でも灰色の斑点が少し残った白鳥に成長しそうですね。

という見通しはだいたい当たったようです。

「サンプルをJavaScriptで書こう」と決めた第一の理由は、「誰でもどこでも使える」ことです。サンプルを試してみるのに、処理系のインストールやセットアップは不要です。ブラウザさえあればOK、最近のメジャーブラウザは[F12]でJavaScriptコンソールが使えます。そして、言語仕様も多くの人が知るところです。

JavaScriptは、無節操な(よく言えばマルチパラダイムな)言語なので、他の言語の書き方を真似しやすいのもいいですね。どんなスタイルのコードを書いても「JavaScriptはカクカクシカジカだから、その書き方はよくない」なんて話は(滅多に)出ません、もとが無節操だから。

ただ、型が書けないのはやはり辛い。例えば、

function isEmptyString(s) {
  return s.length == 0;
}

この例では、関数名が「引数は文字列だ」と強く暗示してますが、もっと素っ気なく、

function e(s) {
  return s.length == 0;
}

これだと、「引数は文字列だ」は伝わりにくいでしょう。ドキュメンテーションと型チェックを入れるなら、

function e(s/* string */) /* returns boolean */{
  if (typeof s != 'string' && !(s instanceof String)) {
    throw "Bad Arg";
  }
  return s.length == 0;
}

なんだか、みにくくなってしまいます。

TypeScriptなら、

function e(s : string) : boolean {
  return s.length == 0;
}

スッキリ書けます。

ただし、TypeScript言語処理系のインストールが必要なので、「誰でもどこでも使える」メリットは失われてしまいます。これはトレードオフなので致し方ないですけど。救いはインストールが比較的簡単なことです。node.jsとnpmのエコシステムはよく整備されていて、node.jsさえインストールしてしまえば、TypeScriptや関連ツール/ライブラリはnpm(最近ならyarnか)でインストールできます。

型がないと、説明とサンプルを書くことが困難なことがあります。2008年1月16日に書いた記事「CPS(継続渡し方式)変換をJavaScriptで説明してみるべ、ナーニ、たいしたことねーべよ」では、型パラメータが必要でした。この記事の第1節「未来のJavaScript」で、次のようなコードが書ける疑似言語を仮定しています。

function<X, Y>
makePair(first:X, second:Y):Array2<X, Y> {
  return [first, second];
}

架空の言語の代わりに、実在するTypeScriptを使って型パラメータを使った話題を書けるようになりました。

JavaScriptだけで済む話なら、「誰でもどこでも使える」JavaScriptが望ましいでしょう。ですが、型が必須の話題/サンプルはTypeScriptを使うのが現状では最善だと思います。