TypeScriptは補助輪(Training wheels)論-3年前から同じ
@asama さんの記事
Twitterやはてブなどを読みましたが、捉え方が様々ですね。
とくに「補助輪」という表現が見過ごせない方が多いようで、気になりました。
Denoが脱TypeScriptをしてJavaScriptに戻した話
どうやらDenoの話を知らない人が多いようです(Denoは、Node.jsの製作者であるRyan Dahlによって作られた新しいランタイムです。簡単に説明するなら、Node.jsのイケてないところを改良したものがDenoです。Denoの文字を並べ替えるとNodeになります)
DenoはTypeScriptを使用していましたが、
純粋な(バニラな)JavaScriptに戻す道を選びました。
理由はこちらで語られています。
5 reasons why Deno will stop using TypeScript
(DenoがTypeScriptの使用をやめる5つの理由)
日本語翻訳記事(有志)
最初に言いたいことは「すべてのJavaScriptエンジニアが『つよつよ』ではない」ということ
以上を踏まえた上で、TypeScriptは補助輪であるということ
前提を忘れてはいけません。
偉人と凡人を、同等に扱ってはいけないのです(残念ですが)。
(かっこいい補助輪もあります)
JavaScriptで1,000,000行?天才しか書けない
JavaScriptは「Brendan Eich(ブレンダン・アイク)」によって、約10日で開発されました。
JavaScriptでどのようなコードを書こうとしたか?
おそらく100行、多くても1,000行程度の簡単なスクリプトを対象としていたと思います。
しかし、現在では1,000,000行のJavaScriptコードが、天才の手によって生まれています。
一般的な感覚ですと狂気の沙汰です。
私たちのような凡人はどうしましょう?さあ、困りましたね。
そのため、「つよつよ」でなくても彼らと同等の力を持てる道具が開発されました。
それがTypeScriptです!
TypeScriptはJavaScriptの補助輪のようなもの。
つよつよなエンジニアがそのように思っていることは事実です。
でも、良いじゃありませんか?
怒るところではありません。むしろ感謝すべきことです。
今では私も賛成しています。
(この議論は定期的に何度も起こるんですよね。忘れた頃にいつも・・・)
補助輪は悪いことではありません。
正直な話、バニラなJavaScriptですと、エラーの予測が非常に困難ですよね?
補助輪は私たちに自信と安全を提供してくれます。
補助輪はコードを書いているときだけに存在し、トランスパイル後は補助輪が削除されます(恥はかきません)。
TypeScriptが嫌いな天才たち
先日、尊敬しているフロントエンドエンジニアの勉強会に参加しました。
彼はTypeScriptをとても嫌っていました(笑)。
私はその口論に参加してしまったので、ブロックされないかヒヤヒヤしています。
彼はJavaScriptのことをよく知っています。
私もJavaScriptのことを知っています。
しかし、JavaScriptのことを「100%」知っているかと聞かれたら「NO」です。
10年以上もJavaScriptを書いていますが、まだまだ学ぶ必要があります。
だから、私は現在では、ほぼ毎日「TypeScript」を書いています。
TypeScriptはJavaScriptのスーパーセット
すべてのJavaScriptコードは、TypeScriptでも有効です。
TypeScriptを使用すると、開発者はECMAScript標準の最新バージョンでプログラミングできます。(ES3まで遡ってターゲットを設定することもできます←あなたは自分の記憶だけでできますか?)
トランスパイル時に、コードは純粋なJavaScriptになり、すべての型表記が削除されます。
拡張子はわかりづらい
.tsファイルは動画データを記録するファイル形式の一つで、MPEG-2トランスポートストリーム(MPEG2 TS)形式のデータをそのままファイルに記録したものですよね?
デジタル地上波の拡張子など。
.tsxはなんですか?
当時はそう思いました。
(.tsファイルは別の拡張子にすべきであったと今でも思っています)
TypeScriptのコードはとてもクリーン
たとえば enum
のコードを見てみましょう。
とてもクリーンではないですか?
TypeScript
export enum DayOfWeek {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
これを、JavaScriptで書いた場合(トランスパイルした後)を見てみましょう。
var DayOfWeek;
(function (DayOfWeek) {
DayOfWeek[DayOfWeek["Sunday"] = 0] = "Sunday";
DayOfWeek[DayOfWeek["Monday"] = 1] = "Monday";
DayOfWeek[DayOfWeek["Tuesday"] = 2] = "Tuesday";
DayOfWeek[DayOfWeek["Wednesday"] = 3] = "Wednesday";
DayOfWeek[DayOfWeek["Thursday"] = 4] = "Thursday";
DayOfWeek[DayOfWeek["Friday"] = 5] = "Friday";
DayOfWeek[DayOfWeek["Saturday"] = 6] = "Saturday";
})(DayOfWeek || (DayOfWeek = {}));
かなり単純なコードですが、ぐおお・・・。私のような凡人には無理ですね。
(これは本質的に逆マップであり、プロパティはインデックスから割り当てられます)
結論
あなたが天才であればこの補助輪は邪魔でしょう。外してください。
しかし、天才でなければ、この補助輪を使用しない理由はないでしょう。
Discussion