koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

『初めてのJavaScript』を読了しました ~学んだことのまとめ~

はじめに

FJORD BOOT CAMPの「JavaScript中級」プラクティスで Ethan Brown 著『初めてのJavaScript』を読みました。

読んだ感想と、学んだことを自分なりにまとめたいと思います。

本書の章立て

1章 JavaScriptの歴史

2章 初めてのJavaScriptアプリ

3章 変数、定数、リテラル、データ型

4章 制御フロー

5章 式と演算子

6章 関数

7章 スコープ

8章 配列

9章 オブジェクトとオブジェクト指向プログラミング

10章 マップとセット

11章 例外とエラー処理

12章 イテレータとジェネレータ

12章 関数のさまざまな利用方法

13章 関数のさまざまな利用方法

14章 非同期プログラミング

15章 日時

16章 Math

17章 正規表現

18章 ウェブブラウザのJavaScript

19章 jQuery

20章 Node.js

21章 オブジェクトのプロパティに関する詳細

22章 JavaScript関連の情報源

各章の感想と、そこから学んだこと

1章~2章 JavaScript基本を理解

ES5とES2015というのがあって、今の主流としてはES2015の方なのだと理解しました。その他にも、基本的な開発環境やツールの説明がありましたが、これまでのプラクティスと本書の前に読んだ『JavaScript ふりがなプログラミング』を読んでいたおかげで、スムーズに開発環境は整えられました。

サンプルコードで、ブラウザ上で画面をクリックすると丸が表示されるプログラムが簡単そうに実装されていて感動しました😆

3章 JavaScriptのデータ型を理解

JavaScriptの値はプリミティブとオブジェクトに分けられます。

プリミティブとは、不変の値のこと。オブジェクトとは、さまざまな形式をとりうる値のことです。

そして、プリミティブに分類されるのは、

  • 数値
  • 文字列
  • 論理値
  • null
  • undefind
  • symbol

オブジェクトに分類されるのは、

  • 配列
  • 日時
  • 正規表現
  • Map(とWeakMap)
  • Set(とWeakSet)

なのだということを学びました。

4章 制御フローを少し理解

forifwhileなどの制御フローがあるのだと少し理解しました。ここら辺は、必要になった時に、都度読み返して、使いこなせるようになっていけたらと思いました。

また、switch文はRubyでいうところの、when...case文なのかなと思いました。

5章 演算子を学ぶ

等価演算子==と厳密等価演算子===があり、等価演算子を使う際には、nullundefinedが使われる際には、不都合が生じます。 そのため、基本的には厳密等価演算子を使った方が良いということを学びました。

6章~7章 関数について学ぶ

関数の定義の仕方、使われ方を少し理解しました。 関数の定義の仕方には、アロー関数を使う方法もあり、以下のように関数を定義することができるようです。

const 関数名 = () => 処理する内容

アロー関数を使うメリットとしては、

  • functionという単語を省略することができる
  • 引数が一つならな、()を省略することができる
  • 関数が本体が一つの式になる場合、それにreturn文を省略することができる(P118より)

ということがあるそうです。記述する内容を減らすことができるのは便利だと思いますが、まだまだ見慣れない感が強いです💦

8章 配列、reduceの使い方を少し理解する

JavaScriptの配列には、reduceという関数が用意されているようで、配列全体を変換することができるようです。

具体的には、第1引数にアキュムレータ(最終的に配列が変換される先)を、第2引数に現在の配列要素、現在のインデックス、配列そのものを指定します。 以下は、Array.prototype.reduce() - JavaScript | MDNより、引用させていただいた、配列内の合計値を算出する関数です。

var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {
  return accumulator + currentValue;
}, 0);

9章 prototypeの概念が理解できない💦

クラスの定義や使用方法については、RubyとJavaScriptでそこまで大きな違いはないと感じ、すんなり頭に入ってきたのですが、prototypeの概念があまりに理解することができませんでした。

ここについて、少し調べてみましたが、それでも理解することができず、実際にJavaScriptを書いていく中で、理解していきたいと思います💦

10章 データ構造、mapとsetを学ぶ

キーと値の対応関係があるデータ構造のときに、mapとsetが使われるようです。特に、setには重複を許さないという機能があるようです。

11章 例外処理について少し理解

try...catchでエラーを補足することで、プログラムの処理を止めることなく続けることが可能になり、そして、throwを呼び出すと、現在実行中の関数は直ちに停止します。

しかし、基本的には例外処理には相応のコストがかかるため、予め想定できるエラーはフロー制御で対処し、本当に想定できないエラーに対してのみ例外処理を使った方が良いようです。

14章 非同期プログラミングが難しい・・・

本書だけでは理解が難しかったため、以下の記事を参考にさせていただき、理解しようとしました。

JavaScriptコールバックを整理してみた【再入門】 - Qiita

Promiseと仲良くなって気持ち良く非同期処理を書こう - Qiita

自分の理解では・・・

  • callbackとは、引数に指定される関数のこと。

  • 非同期処理を連続して行う際には、関数が、関数を呼び、そのまた関数を呼ぶというように可読性が悪くなってしまいます。

  • そのため、Promiseを用いると、綺麗に非同期処理の連続を書けるようになるとのことです。

というざっくりとした理解ですが、これも実際にコードを書いていく中で理解していきたいと思います💪

全体的な感想

JavaScriptのレベルが本当に低いので、読み進めるのに大分苦労しました💦 そして、自分の使える知識としてまだ定着していない感じがあります。

ただ、何か問題にぶち当たった時に、「こういうことが書かれていたような気が・・・」などと、頭の中にJavaScriptの概要と、知識のインデックスが出来上がったような気はしています。

実際にJavaScriptが手に馴染むには、自分で悩み苦しみながらコードを書いていくしかないと思うので、次以降のプラクティスで、しっかり悩んでいきたいと思います😅