仕事で最近jQueryを使う機会が増えてきた。
プライベートでは使っていたけれど仕事で使うとなると、とても便利で
本当に短いステップでやりたいことができるね。
function(){}がやたら大量に出てきて、見づらいところはあるけれど。
コールバック関数を引数に渡す仕組みだからスコープが限定されるし、影響が少なく安全に作ることができる。
職場はいわゆる企業向けのシステムでJavaを主に使っていて、サーバーサイドのことを主にやってきたため
あまりフロントエンドについて詳しい人がいないけれど、でもWEBベースのシステムだから簡単な画面制御にJavaScriptを使う。
こういうタイプの現場の場合、HTMLも10年前と変わらない旧態依然としたスタイルを貫きとおしているし、
JavaScriptも未だHTMLを補佐する簡易言語的な認識から抜け出せていない。
だからJavaやDB系の研修は勧められるけれどもJavaScriptはそれほど重要視されてはいない。
もちろん研修なんかうけなくとも使えるようにはなる
それでもHTML5の波はITの僻地にも押し寄せてきているし、モダンなJavaScriptにレガシースキルは淘汰されてきている。
そういう現場ではjQueryで躓く人がおおい。
自分の周りを見てみるとだいたいこんな特徴がある。
1.JavaScriptをJavaの簡易的な言語だと思っている
Javaでサーバーサイドの部分を書いて、クライアントサイドではJavaScriptで簡単に画面処理を書く。
JSPやサーブレットと一緒に使っていて、JavaScriptは使用している演算子などのスタイルもJavaに似ているので
同じような文法かと勘違いして同じようなスタイルでかく人がこのタイプ。
フィールド変数のようなつもりで、グローバルな場所に変数を宣言したり、
varをつける意味を見いだせなかったりしているタイプ。
でも、JSでnewの使い方がわからないので関数をやたら多く使う。
2.関数を関数の中で宣言できる事を知らない
JavaでできないことでJSでできることの一つに、関数の取り扱いがちがう。
Javaではメソッド内にメソッドを作ることはできないけれど、
JSは関数内に関数を作ることができる。
3.関数を変数として扱う事を知らない
Javaと違ってJSがモダンな所以としては、関数を変数に入れることができる。
var hogefunc = function(){}
みたいにね。
つまり関数を引数で渡したり、戻り値で関数が帰ってきたりすることができる。
jQueryでも関数を引数に渡す関数がやたら多く出てきて、さらに戻り値がjQueryのオブジェクトになっているので
メソッドチェーンのように直観的に分かりやすいスタイルで書くことができるが、
こういうクールなスタイルはJavaではできない。
4.オブジェクトのことをしらない。
Javaにはない文法でJSのオブジェクトがある。
連想配列みたいな仕組みが文法上存在する。
↓こんな感じで書くことになる。
var obj = {key:value}
これはもちろん関数を入れることもできる。
つまりこれは連想配列というかは、フィールドを持っているオブジェクトそのものなわけで、
実は関数を宣言すること自体グローバルなオブジェクトに関数名をキーにして値の部分に関数をいれているようなもの。
値の中にオブジェクトを持つことも出来て、それがネストのようにデータ構造を作ることができる。
そういう仕組みになっているので、そもそもがJavaのクラスベースのオブジェクト指向とはちがう。
JavaScriptは簡易言語じゃない
Javaとは文法が全く違うし、オブジェクトの持ち方も全く違う。
多くJavaプログラマ(とも言えないかも知れない)が片手間で書いた関数ばかり宣言している
読みづらくつまらないJSばかりを見てきたが、
本来あるべき姿はこのような関数型言語風の書き方も可能な柔軟な文法なのだ。
jQueryが今までのJavaScriptと違うと思っている人へ
それは単に貴方がJavaScriptの文法を知らないだけ。