JSWSPに行って来た。札幌でJavaScriptの基礎をみんなで勉強しようぜって会。基本的にすごくコミュ障なのでこういう場に行くだけで死ぬほど疲弊するし、あとで風呂に入った時に瑣末なやり取りを思い出して、「あー〜ーーーああ!!! なんであんなこと言っちゃったの死にたあああああい!!!」ってなることが多いんだが、今回は特に鬱になることもなく、楽しく学び楽しくコミュニケーションできた。
学んだ内容と、懇親会で得たことを書いていく。
目次
JavaScript的な話
僕は普段ゴリゴリのPHPerなので、JSは雰囲気でやっている。たまに動的な事をやるのにVueだのjQueryだの使って調子こくぐらいしかやってなかった。そんな感じでJSと向き合っていたので、訳の分からないJSの構文を見るとブチ●ろすぞJSこの野郎!!! ってブチギレしていたのだけど、今回そういうブチギレポイントがかなり改善された。
教材について
主催の@redamoonさんと、@nagasawaaaaさんがgithubのリポジトリに気合の入った教材を用意してくれた。ブックマークして時々見返すようにしている。この分量と説明の分かりやすさは気合が入りすぎている。
特に学びになった点を備忘も兼ねて残す。
… 構文(スプレッド構文)
なんかこう、jsのドキュメント読んでて、たまにこういうの見たりしない?
うん、与えられた数値から最大値を求める関数のやつ。
↑お前はいいわ。1と3と2を引数で与えたら最大値の3を返すって。いいわ。明快だわ。
↑お前はなんや? …array1ってどういうことや!? 「…」 ってなに??? って。思うじゃん。こんなんあるの? みんな知ってんの!? ってブチギレしてて。さらにブチギレすることとしては、「… とは js」とかググってもよく分からねーの。そもそも 「…」 ってなんて呼ぶんだよーーー!!? って。こういうのjs多くないすか。
スプレッド構文って言うんだって。配列を渡すとそれを展開して引数にしてくれるって。なので、下記はどちらも同じことをやってるんだって。
へぇー便利ーって思ったよね。
クロージャーについて
これもよくお前らと俺が適当なjsをコピペして使う時によく見るやつ。
functionのなかにfunctionがある。ここまではいいわ。キレそうだけどよく見るからいいわ。その後になんかある。value = funcA();?? return funcB?? value に functionをぶち込むってどう言うことや!?!? そんで value() って!?!? value() って関数どこから発生した!?
これはCやJavaから入った層には全く馴染みがなく、まじで理解が追いつかなかった。多分現場で見てたらブチ切れてたと思う。
理解した内容としては下記。
- value = funcA() の時点でfuncAのオブジェクトができ、その中の num が0で初期化される
- さらに funcA()が funcB()をreturnしてる
- だからfuncA()がぶち込まれた valueを、value() すると funcBが実行される
- その時にnumがインクリメントされる。これはfuncAオブジェクト(つまりvalue)の持ち物で、一旦定義された後はfuncB()でしか操作されない。
クラスみてえだなと思った。
で、こう言うのを見て、プロパティとかを持ってるVueの仕組みって、コアソースではこう言うことが行われてるんだろうなと。想像できた。単に「想像できた」これがでかい。(わかったとは言ってない)
JavaScriptはググりにくいので一番最初の最初は人に教えてもらった方が良い
スプレッド構文もクロージャーもめちゃくちゃググりにくい。なぜならこれがなんと呼称されているのかよく分からないからだ。
JavaScriptはこう言う特殊な記述(特殊と言うのはC言語とかJavaから見ると全く異次元という意味)が多いので、よほどのモチベーションがないと、1人で進めるのが億劫だ。jQueryでごまかしながらなんちゃって開発すれば大抵なんとかなるし。
書籍で勉強すればある程度は習得可能だと思うが、「こんな表現、一体どこで使うの!?」みたいなのが結構ある。クロージャーとかもそう。そういう時に、JSを仕事で使っている方に気軽に聞けるのは良かった。(俺はコミュが崩壊してたので聞いてない。別の方が聞いてた)
懇親会について
CMSの話からOSSの話、Webデザインあるある、住宅の建て方まで
色々な話ができた。詳しくは割愛するが、飲み会後の僕のつぶやきから察していただければと思う。
本日は以上!!