Javascript 再考 – 基礎から学ぶ –

2020.8.24 (月)

Javascriptは十数年前はクソ言語として淘汰されるんじゃないか?って言われていた時代があったんですが、jQueryやprototyprライブラリーリリースを皮切りに逆に人気言語になりました。Ajaxという発明移行はサーバーサーサイドでのレスポンスは最低限なものにして、すべてフロント側で諸々の処理ができてしまうっていう時代になりました。jQuery、Prototype、React.js、Vue.js、node.js、AngularJS、Nuxt.js、Backbone.js、Ember.js、Polaris、Knockout.js、Feathers、Meteor.jsともうどれを選んでいいんだかというのと、ES5,ES6と仕様が変更し、Type Scriptなどコンパイルの必要な言語の登場など、どれで設定して何をどのように作ればいいんだかという時代になってしまったわけで、フロントエンドというプログラミングの作業はHTMLとCSSのオプション的な言語という風ではなくなり、おそらく一つの独立した職業として成り立つということになってきました。
しかし、これらのフロントエンドの仕事は更にサーバーサイドの知識も充分に必要になってくる(すでになってきている)ということです。結局のところ、サーバーサイドレンダリング(SSR)は、サーバーでの出来事であり、Ajaxをはじめとするサーバー情報の非同期処理はサーバーレスポンスあってのこと。
じゃ、何から勉強したらよいのか?◯◯を実現するためには、何を用いて何をどんなふうに設計すればよいのか?ということを知らなくてはなりません。ここれは、それらを少なからずわかりやすく全体が見通せるように解説しようと思っています。

そういう状況下では、以下の2冊がとてもいいです。
何となくJavaScriptを書いていた人が一歩先に進むための本 Kindle版
JavaScriptの理解を深めた人がさらにもう一歩先に進むための本 Kindle版

さて私もなんとなくJSを書いている部類の人間で実際に体系化したりちゃんと学んだりしたことがないです。それでもなんとなく書けてしまうのはチュートリアルが多い、情報が多い、すぐ使えるスニペットなどが多いということで、そこそこたくさんの情報が出回っているからだと思います。なんとなくできてしまうということです。では、その基礎なりバックボーンなりというのはどんなものかというと、Javascriptはその他の厳密な規定の元に書かれる言語とはちがって、非常に曖昧でいい加減な言語です。昨今の流行りでは、いい加減な言語でもっていい加減な書き方を習得した後に、strictモードみたいなもので変数に型をもたせたり厳密なClass設定をしたりと徐々に設計に入ってゆくというようなもものが多いです。そういう意味ではJavascriptの入門はかなりいい加減です。
あと、個人的な意見でいうと、省略できるところはいっぱいあるのですが、とにかくそういうところ省略するなよっていうのと、三項演算子とか巧みに使うのも短く書けていいのかもしれないけど、ああゆうのも個人的には嫌いです。意味がわからなくなるし可読性が著しく落ちるので。普通に書くのがいいですね。

予約語

使ってはいけないワードは以下。function default() { ... }みたいなことをやると、思わぬ動作不良が出ます。こういうことを避けるには、単純にprefixなどをつけることが好ましいといえば好ましい。function saba_default() { ... }とかやっておくとよいです。あるいは変数や関数はそれ特有の名前をつけるのがよいとおもうので、function getDefault() { ... }とか、そんな感じで命名してあげるのがよいです。

現在の予約語
break case catch continue debugger default delete do else finally for function if in instanceof new return switch

将来を見越した予約語
class enum export extends import super
implements interface let package private protected public static yield 

おさらい (改行・コメントアウト・変数の宣言など)

いろいろな規則がゆるいJSですが、それでもルールを守らないと動いてくれません。セミコロン;はあってもなくてもいいのですが、面倒なのでつけるルールにしておいた方がいいです。改行が基本的にはその行の終端と判断されますが、思わぬエラーとして原因究明を手早くするためにも;は最終行の末端に用いた方がいいです。
変数の宣言ですが、他の言語とくらべて至ってかんたんです。var宣言しないものはグローバルとなり、そうでないものvarはローカル変数となります。

function foo() {
  var test_value = 'local';
  test_value = 'global';
}

みたいな感じ。だいたいGlobal変数は汚染したくないものなので、ほとんどの場合グルーバル変数を使う用途はないはずです。よほどの理由がない限りvarをつけて宣言するようにしてください。
コメントはいろんな種類があります。

/* コメント */
/*
コメント複数行
コメント複数行
*/
//コメント
# コメント ←これは使えない!