はじめに
みなさん、こんにちは。torihaziです。
今回はタイトル通り、JS-Primerというものを学習のために読んだので
その感想および得られたことを書き記していこうと思います。
JS-Primer(Web版)自体、Railsチュートリアルのような有料コンテンツではないので
権利的な問題は大丈夫だと思いますが、もしあればそっとご指摘ください。
早急に削除もしくは修正いたします。
よかったこと
Javascriptについて知ったかできる状態になる
学習した後の感想としては不適切かもしれません。
しかし、未経験の人間が最初から完璧な状態を目指すのは無理です。
多少理解度が粗くてもまずはやり切るということ自体がハードルが高いです。
この入門書として用意されているのに全く入門者レベルではない本書籍を
まず読み切ることができれば、
「それ、聞いたことある。javascriptのやつだよね」とか
「あーPromise Async/Awaitね、難しいよね」と
技術者同士の会話で置いてけぼりを喰らうことはありません。
そもそも無知の状態からその言葉が記憶の片隅にでも染み付いているなら
学習としては上出来だと思います。
確実な理解を求められたらまたそのときにしっかりと学習すればいいだけです。
そうやって何回も勉強していけばいつか必ず確かな知識として蓄積されます。
私はこれまでそうやってきました。
そのため、初心者の状態から今すぐ抜け出して
上記のようなふわふわした状態にでもまずなりたいと思っているなら
本書籍は一役買ってくれると思います。
※今の知ったかの知識としては
- モジュール
- fetchAPIは Promiseを返す
- Async/awaitは promiseの上に成り立っている
- jsにおける配列の要素アクセス方法について最後の要素を知るにはat(-1)を使う
などです。
悪かったこと(?)
入門者むけ?
強いていうなら冒頭でも触れたように
入門書と記載があるが、入門者向けではない、ということです。
少なくとも私はそう思いました。
全くのプログラミング初心者がこの書籍を読み切ることは
かなり難しいと思います。
初めて見る用語や読んでもよくわからない用語が長々と文章で説明されているので
普段から文章を読み慣れていない人は流れを掴むことさえも一苦労ではないでしょうか。
初心者はまずハードルを極端に低くして段々と上げていくことが
挫折せず、上達する近道であるのでもしかしたら本書は
初心者のあなたを苦しめるかもしれません。
演習問題がない。
巻末に簡易的なアプリケーション作成の項目がありますが、
正直私は物量が少なすぎると思いました。
私は学習においてインプットも大事だがそれ以上にアウトプットすることが大事だと思っているためです。
私が過去にそうしている理由を長々と記事に書いたのでこちらも併せて参照いただければと思います。
https://torihazi.hateblo.jp/entry/2024/02/05/203703
私が所属しているHappinessChainでは
入門編としていくつか演習問題が用意されているので
そういうのが本書籍にもあればなおよかったと思います。
学んだこと
多くのコードをモジュールという部品として読み込む
正直まだ深くは理解できていません。
ただ本書籍を最後までやってみた結果、
1つのファイルにコードを長々と記載していくのではなく、
要所要所に切り分け、必要に応じて外部からそれを読み込むという方針を撮っていました。
その切り分けた各部品のことをモジュールといい、1つのjavascriptファイルに相当します。
呼び出す側と呼び出される側に分けられており、
呼び出される側は対象の部品をexport
宣言し、
呼び出す側は対象の部品を import
宣言することで使用することが可能です。
ただこの宣言方法、ESモジュールかCommonJSモジュールかで呼び出し方が異なります。
ESモジュール ~export.js~ export hoge = "hoge" ~import.js~ import { hoge } from "./exportjs"
CommonJSモジュール ~export.js~ module.exports = hoge ~import.js~ const foo = require('./export.js')
という感じです。
詳しくは下記を参照ください。
node.js の require と import について調べなおす #JavaScript - Qiita
コマンドライン引数の取得方法
こちらについては本書籍の後半において触れられていました。
nodejsにおいてコマンドライン引数を取得するためには
グローバルオブジェクトのprocessを使用する必要があり
中でもprocess.argvメソッドを使用することで取得することができます。
上記メソッドの戻り値は配列ですが、
要素の1つ目から引数の情報ではないことに注意が必要です。
1つ目 nodeの実行ファイルパス 2つ目 実行ファイルのパス 3つ目 引数 ・・・・
そのためcommander モジュール等を使用すると 扱いやすくなります。
難しかったこと
Async/Await Promiseについて
非同期処理において活躍するものであるということは理解しました。
ただコールバック関数とかが絡んできたり、then、catchなど
色々なものが絡みついている感じで細かい箇所までは理解しきれていません。
どういうところがわからないのか、その言語化自体もできていない状況です。
終わりに
いかがだったでしょうか。
正直、まだまだ発展途上だと思っています。
ただ大枠くらいは掴み取れたのではないかと思います。
あとはアウトプットを繰り返しながら、不明点をその都度見返して
血肉にしていくことをしていきたいと思います。
まだまだですが、これからも勉強を重ねてブーストしていきたいと思います。