Java開発者のためのJavaScript入門。最初に知っておきたい7つの違い!
- 投稿日:2021.09.16 最終更新日:2023.07.04
- JavaScript入門
- コーディング無し, 初心者向け
この記事では、JavaScriptはどんな言語なのかをJavaの開発者向けに説明する。
JavaScriptはwebのみならず様々な開発現場で使われるようになってきた。
Java開発者として働いてる人の中にも業務でJavaScriptを書いた経験のある人は少なく無いだろう。
JavaとJavaScriptはともに名前に「Java」を冠するが、プログラミング言語としての性質はむしろ真逆の言語。
Java開発者がJavaScriptを学習する際は、両者のコンセプトの違いから理解に苦しむ事はとても多いだろう。
この記事がJavaScriptを理解する手助けとなれば幸いだ。
では、見ていこう!
JavaとJavaScriptの7つの違い
この記事ではJavaとJavaScriptの違いを以下の7つのポイントにまとめてみた。
Java | JavaScript | |
---|---|---|
使われる領域 | オールマイティー | web |
言語のタイプ | プログラミング言語 | スクリプト言語 |
機械語への翻訳 | インタプリタ方式とコンパイル方式の中間 | インタプリタ方式 |
データ型の扱い | 動的型付け言語 | 静的型付け言語 |
オブジェクト指向のタイプ | クラスベース | プロトタイプベース |
スレッド | マルチスレッド | 基本的にシングルスレッド |
同期・非同期 | 同期&非同期処理 | 非同期処理 |
JavaScriptは元々はwebのための言語
Javaといえば様々なプロジェクトで起用されるオールマイティーな言語の代表格だが、その一方、JavaScrptは元々とはウェブサイトに動きを加えるために開発されたwebのための言語。
Node.jsの出現以降はJavaScriptもバックエンドシステムの開発に使用したり、Electronというフレームワークを使いデスクトップアプリも開発できるようになってきたが、それはここ数年の話。
JavaScriptはいまだにwebフロントエンドのための言語というニュアンスが強く、HTML・CSSとセットでWeb制作のためのスキルと捉えられることが多い。
またwebのための言語であるためインターネットブラウザとの関わりが非常に強く、JavaScriptをマスターするにはブラウザのデベロッパーツールも使いこなせるべきである。
JavaScriptはスクリプト言語
JavaScriptはその名前の通りプログラミング言語のタイプとしてはスクリプト言語に分類される。
スクリプト言語とは分かりやすくいえば「簡易なプログラミング言語」のこと。
Javaのコードを実行するためにはJava Virtual Machinが必要となるが、JavaScriptではインターネットブラウザさえあれば簡単にコードを実行することができる。
JavaScriptはインタプリタ方式
JavaのコードはJava仮想マシンの機械語に翻訳されたのち、仮想マシン上で実行される。
一方のJavaScriptは完全なインタプリタ方式の言語であり、処理をひとつずつ機械語に翻訳しながら実行する。
そのため実行速度はコンパイル方式の言語よりも遅くなるが、プログラムを実行する度にコンパイルが終わるのを待つ必要は無く開発はスピーディーに進む。
ただし、Javaではコンパイルの最中にもしくは開発中に気付けたようなエラーも、JavaScriptでは実行してみないと気付かないことも多く、これらの特徴は一長一短である。
JavaScriptは動的型付け言語(弱い型付け)
これはJavaScriptのもっとも特徴的な部分なので知っている人も多いかと思うが、JavaScriptは動的型付け言語(弱い型付けの言語)である。
動的型付け言語では、変数の宣言やメソッドの引数においてデータ型を指定しない。
これはJavaで型の変換に散々苦しめられたプログラマには良いニュースに聞こえるかもしれないが、大規模なプロジェクトの開発をおこなう上では扱いづらく感じることのほうが多い。
なお、JavaScriptではstringが代入されている変数に数字を代入したり、ひとつの配列の中に異なるデータ型を混在させるのもOKである。
JavaScriptはプロトタイプベースのオブジェクト指向
JavaScriptは一般的にオブジェクト指向言語に分類される。
ただし、JavaScriptのクラスやオブジェクトといった概念は、Javaを基準にオブジェクト指向を習得した人間にとっては特殊に感じるものだろう。
Javaではクラスはオブジェクトの雛形のようなものであり実体はインスタンスと呼ばれる。
一方、JavaScriptでは雛形は「プロトタイプ」と呼ばれ、それに特徴を足すことによってオブジェクトが形づくられる。
オブジェクトそのものが特徴を足すので、プロパティやメソッドを直に追加・削除することが可能である。
JavaScriptは基本的にシングルスレッド
スレッドといえばJavaの世界では中級者向けのテーマである。
しかし、多くのJava開発者はThreadクラスを使用することにより、処理をマルチスレッド化することができることを知っているだろう。
一方、JavaScriptは基本的にシングルスレッドでしか処理をおこなうことが出来ない。
(Service Workerと呼ばれるバックグラウンドのプログラムを利用することによりマルチスレッド化することは可能。Service Workerについてはこちらの記事を読んでほしい。)
JavaScriptでは非同期処理が多く使われる
先の項で述べたようにJavaScriptはシングルスレッドの言語である。
バックエンドとのコミュニケーションなど時間の掛かる処理をすべてシングルスレッドで順番に行うとすると、大きな遅延が発生してユーザはストレスを感じずにはいられないであろう。
そこでJavaScriptではそういった処理は非同期処理でおこなわれる。
しかし、それぞれの処理には関連性があり決まった順番でおこなわないとエラーが発生するようなものある。
そのため、JavaScriptには非同期処理を制御するための仕組みがいくつか存在する。
それがPromiseやSubscriptionといったものである。
これはJava開発者がJavaScriptを習得する際に最初につまづくポイントなので、時間を掛けて実際にコードを動かしながら練習していくしかない。