Java開発者のためのJavaScript入門。最初に知っておきたい7つの違い!

Java開発者のためのJavaScript入門。最初に知っておきたい7つの違い!

この記事では、JavaScriptはどんな言語なのかをJavaの開発者向けに説明する。

JavaScriptはwebのみならず様々な開発現場で使われるようになってきた。

Java開発者として働いてる人の中にも業務でJavaScriptを書いた経験のある人は少なく無いだろう。

JavaとJavaScriptはともに名前に「Java」を冠するが、プログラミング言語としての性質はむしろ真逆の言語。

Java開発者がJavaScriptを学習する際は、両者のコンセプトの違いから理解に苦しむ事はとても多いだろう。

この記事がJavaScriptを理解する手助けとなれば幸いだ。

では、見ていこう!

JavaとJavaScriptの7つの違い

この記事ではJavaとJavaScriptの違いを以下の7つのポイントにまとめてみた。

JavaJavaScript
使われる領域オールマイティーweb
言語のタイププログラミング言語スクリプト言語
機械語への翻訳インタプリタ方式とコンパイル方式の中間インタプリタ方式
データ型の扱い動的型付け言語静的型付け言語
オブジェクト指向のタイプクラスベースプロトタイプベース
スレッドマルチスレッド基本的にシングルスレッド
同期・非同期同期&非同期処理非同期処理

JavaScriptは元々はwebのための言語

Javaといえば様々なプロジェクトで起用されるオールマイティーな言語の代表格だが、その一方、JavaScrptは元々とはウェブサイトに動きを加えるために開発されたwebのための言語

Node.jsの出現以降はJavaScriptもバックエンドシステムの開発に使用したり、Electronというフレームワークを使いデスクトップアプリも開発できるようになってきたが、それはここ数年の話。

JavaScriptはいまだにwebフロントエンドのための言語というニュアンスが強く、HTML・CSSとセットでWeb制作のためのスキルと捉えられることが多い。

またwebのための言語であるためインターネットブラウザとの関わりが非常に強く、JavaScriptをマスターするにはブラウザのデベロッパーツールも使いこなせるべきである。

Google Chromeのデベロッパーツール

JavaScriptはスクリプト言語

JavaScriptはその名前の通りプログラミング言語のタイプとしてはスクリプト言語に分類される

スクリプト言語とは分かりやすくいえば「簡易なプログラミング言語」のこと。

Javaのコードを実行するためにはJava Virtual Machinが必要となるが、JavaScriptではインターネットブラウザさえあれば簡単にコードを実行することができる。

JavaScriptはインタプリタ方式

JavaのコードはJava仮想マシンの機械語に翻訳されたのち、仮想マシン上で実行される。

一方のJavaScriptは完全なインタプリタ方式の言語であり、処理をひとつずつ機械語に翻訳しながら実行する

そのため実行速度はコンパイル方式の言語よりも遅くなるが、プログラムを実行する度にコンパイルが終わるのを待つ必要は無く開発はスピーディーに進む

ただし、Javaではコンパイルの最中にもしくは開発中に気付けたようなエラーも、JavaScriptでは実行してみないと気付かないことも多く、これらの特徴は一長一短である。

JavaScriptは動的型付け言語(弱い型付け)

これはJavaScriptのもっとも特徴的な部分なので知っている人も多いかと思うが、JavaScriptは動的型付け言語(弱い型付けの言語)である

動的型付け言語では、変数の宣言やメソッドの引数においてデータ型を指定しない。

これはJavaで型の変換に散々苦しめられたプログラマには良いニュースに聞こえるかもしれないが、大規模なプロジェクトの開発をおこなう上では扱いづらく感じることのほうが多い。

なお、JavaScriptではstringが代入されている変数に数字を代入したり、ひとつの配列の中に異なるデータ型を混在させるのもOKである

JavaScriptの変数・配列の例

JavaScriptはプロトタイプベースのオブジェクト指向

JavaScriptは一般的にオブジェクト指向言語に分類される

ただし、JavaScriptのクラスやオブジェクトといった概念は、Javaを基準にオブジェクト指向を習得した人間にとっては特殊に感じるものだろう。

Javaではクラスはオブジェクトの雛形のようなものであり実体はインスタンスと呼ばれる。

一方、JavaScriptでは雛形は「プロトタイプ」と呼ばれ、それに特徴を足すことによってオブジェクトが形づくられる

オブジェクトそのものが特徴を足すので、プロパティやメソッドを直に追加・削除することが可能である。

JavaScriptは基本的にシングルスレッド

スレッドといえばJavaの世界では中級者向けのテーマである。

しかし、多くのJava開発者はThreadクラスを使用することにより、処理をマルチスレッド化することができることを知っているだろう。

一方、JavaScriptは基本的にシングルスレッドでしか処理をおこなうことが出来ない

(Service Workerと呼ばれるバックグラウンドのプログラムを利用することによりマルチスレッド化することは可能。Service Workerについてはこちらの記事を読んでほしい。)

JavaScriptでは非同期処理が多く使われる

先の項で述べたようにJavaScriptはシングルスレッドの言語である。

バックエンドとのコミュニケーションなど時間の掛かる処理をすべてシングルスレッドで順番に行うとすると、大きな遅延が発生してユーザはストレスを感じずにはいられないであろう。

そこでJavaScriptではそういった処理は非同期処理でおこなわれる

しかし、それぞれの処理には関連性があり決まった順番でおこなわないとエラーが発生するようなものある。

そのため、JavaScriptには非同期処理を制御するための仕組みがいくつか存在する

それがPromiseやSubscriptionといったものである。

これはJava開発者がJavaScriptを習得する際に最初につまづくポイントなので、時間を掛けて実際にコードを動かしながら練習していくしかない。