Web プログラミング

JavaScriptはプロトタイプベース・動的型付け・シングルスレッド

フロントエンドエンジニアを目指している、まゆ(@Ymayu_it)です。

 

JavaScriptを再スタートを切りまして、現在入門書を何回も読むところ。

 

分からない語句なども調べていく。

 

JavaScriptはプロトタイプベース

JavaScript は プロトタイプベース で、シングルスレッドで、動的型付けを持ち、そしてオブジェクト指向、命令形、宣言的 (例えば関数プログラミング) といったスタイルをサポートするマルチパラダイムのスクリプト言語です。

引用:MDN

 

よくわからないので分解!

 

  • プロトタイプベース:クラスを定義せずオブジェクトを生成する手法
  • シングルスレッド:処理の流れが1つのみ
  • 動的型付け:変数や関数を想定して「型」を当てはめて使うこと
  • オブジェクト指向:モノの作成と操作としてみる考え方
  • マルチパラダイム:JavaScriptはオブジェクト指向型、手続き型、関数型など複数のパラタイムを持っている。

 

JavaScriptはクラスを定義しないオブジェクトを生成する手法で、処理の流れが1つのみ。

変数や関数を想定して「型」を当てはめ、モノの作成と操作としてみる考え方であるオブジェクト指向型、命令形、宣言的 といったスタイルをサポートする複数のパラダイムを持つスクリプト言語という感じになるかな?

 

クラスベースとプロトタイプベースの違い

クラスベース プロトタイプベース
オブジェクト クラス(設計図)から生成
→テンプレがあれば良し
クラスなし
→既存オブジェクト(プロトタイプオブジェクト)
特徴 クラスの定義は一度しかできない 後から変更可能
動的静的 静的(クラス) 動的(オブジェクト)

クラスベースはクラスという設計図から生成するもので、特徴は変更ができないもの(静的)。

プロトタイプベースは既存のオブジェクト(プロトタイプオブジェクト)を使うため後から変更できるもの(動的)。

 

シングルスレッドとマルチスレッドの違い

シングルスレッド マルチスレッド
処理方法 処理の流れが1つ 処理の流れに枝分かれあり
2つ以上の処理ができない

JavaScriptは処理の流れが1つのシングルスレッド。

 

家事を例にするとシングルスレッドは、

step
1
掃除

step
2
洗濯

step
3
調理

を1つ1つこなしていく感じ。

 

マルチスレッドは、

step
1
掃除

step
2
洗濯機回しながら調理する

枝分かれでする感じ。

 

シングルスレッドだから1つのことに時間がかかるとフリーズ状態になる問題発生。。そこで非同期処理によって解決。

 

非同期処理として、

  • コールバック
  • Promise
  • Async
  • Await

がある(でたもりけん先生がよくツイートでPromiseって言ってたやーつ)。

 

非同期処理 メリット デメリット
コールバック コード読みにくい
Promise 読みやすいコードに書き換えられる
Async/Await Promiseのコードを更に読みやすくした構文

 

あれ、JavaScriptってif文やwhile文、for文という二股に分かれる作業なかったっけ。。あ、あれはYes/Noで分かれるからよいのか?

 

調べるとJavaScriptはマルチスレッドでもできるんです記事みっけ。。。おや。。

動的型付けと静的型付けの違い

動的型付け 静的型付け
「型」を当てはめて使う 「型」を決めて使う
どんなとき プログラムに変数や関数に何が入ってくるかが特に決まっていない状態 ①プログラマが変数や関数を扱う
②「型」を決めて使う
メリット ・データの型を気にしなくて良い
・データそのものの大きさを気にする必要がない
・素早い開発を行いたい場合に良い
・細かい情報がある状態(レシピがある形)
・ネイティブコードに直接コンパイルできる言語
・エラーチェックを厳密に行える
デメリット ・プログラムのコードが設計書にならない
・処理速度が静的型よりも遅い
言語 ・JavaScript
・Ruby
・Python
などのスクリプト言語
・C言語
・Java
・COBOL
などのコンパイラ言語

 

変数や関数の型が決まっているか決まっていないかの違いでエラーチェックが厳密に行えるかどうかなどにも関わってくるんですね!

 

目的によって動的型付けと静的型付けを使い分けたらよいのか〜ふむふむ。

オブジェクト指向

オブジェクト指向ブログラミングは最もメジャーなスタイルの1つでモノを組み合わせて積み上げていく

 

オブジェクトはモノを指し、指向は見る方向を指す。

 

オブジェクトが指すモノはTwitterを例にあげるとユーザーやフォロワー、つぶやきなど。だけどプログラミングを書く人が何をモノにするか決める。

 

オブジェクトは今から作ろうとしているサービスにどんなモノが存在するのかを考えたもの。

 

  • クラス:オブジェクトの設計書。オブジェクト内のプロパティやメソッドをひとまとめしたもの。 
  • プロパティ:オブジェクトが持っているデータ(モノの構成要素)のこと。 
  • メソッド:操作。オブジェクトが持っている処理(モノの振る舞い)のこと。何らかのアクションを起こす処理。

参考:オブジェクト指向プログラミングとは何なのかを説明します

 

オブジェクト指向プログラミングは以下3つの概念があるようで、、

  • カプセル化:機能とデータの範囲を明確化
  • 継承:特徴を共有
  • ポリモーフィズム:使い分け

友人が言ってたものだ。。

 

長くなりそうなので別記事でまとめていきます。

 

まとめ

JavaScriptは

  • プロトタイプベース
  • シングルスレッド
  • 動的型付け
  • マルチパラダイムのスクリプト言語

という特徴がある。

 

クラスがなく処理の流れが1つで「型」を当てはめて使う、マルチパラダイムのスクリプト言語。

 

おわりに

一昨日と昨日で農家に到着すると10年間、プロジェクトマネージャーをしていた元SEの方がいたので仕事の話しやITパスポートで出てきた単体テストやシステムテストについてなど教えて下さいました。

 

要件定義、基本設計、詳細設計、プログラム設計、プログラミング、単体テスト、統合テスト、システムテスト、運用テストの要件定義工程も具体的に聞けました…!(運が良いな)

 

テストはゲームで例えると、

  • Aボタンを10回押して問題はないか(単体テスト)
  • Aボタンを押して途中Bボタンを押しても反応するか
  • Aボタンを押して走り、Bボタンを押してジャンプ、ゴールしたらファンファーレがなるか(システム設計)

など具体的に聞けました。

 

また上流工程では予算、プログラムにかかる期間、必要なプログラム、エラーになりそうなもの、SE以外が見てもだれもが見てわかるマニュアルの作成などのことを考えた上でヒアリングをする必要があると聞きました。

 

想定できうることをあらかじめ考えるって実際にやっていないと分からない部分だから知識と経験が必須なんだと思いました!

 

もりけん塾(@terrace_tech

Thanks:もりけんさん

 

もりけんさんの『武骨日記』へ

 

-Web, プログラミング

© 2020 Mayu_Yamada