世の中には「プログラミング言語」と呼ばれるものは実は何百種類もあります。
色々な人が「プログラミング言語」を作り、あまりメジャーにならずに廃れていったものも多くあります。
銀行や業務用途で使われるお堅いプログラミング言語から、カジュアルに使える言語まで様々です。
しかし、初心者には「その違い」が分からず、何から学んでいいのか、何を学んでいいのか悩んでしまうことでしょう。
ここでは、そのプログラミング言語の中でもメジャーでWEB系の業界で最も使われている「JavaScript」「PHP」「Ruby」「Java」という4大言語について、その違いを簡単に見ていきたいと思います。
目次
書き方の違い
プログラミング言語というのは、機械に命令をするための「言葉」です。
「言語」というくらいなので、機械に同じ命令をするにしても、命令する時の言葉が違います。
例えば、それぞれの言語で「あいうえお」とインターネットのブラウザ画面に表示してみる命令を書くとこんな感じになります。
JavaScript
1 |
document.write("あいうえお"); |
PHP
1 |
echo 'あいうえお'; |
Ruby
1 |
puts "あいうえお" |
Java
1 |
System.out.print("あいうえお"); |
PHPやRubyの方が短く簡単に書けますね。
ちなみにRubyの場合は他のプログラミング言語では命令文の最後に「;(セミコロン)」をつけるお決まりのものが必要ありません。
型の違い
どのプログラミング言語にも、「変数」という文字や数値などの情報を入れておく「箱」があります。
その変数や値には「型」というものがあり、通常同じ変数の型には同じ型の値しか入れられません。
「文字型であれば、文字しか入れられない」という具合です。同じ種類のものしか箱に入れられないよってことですね。
(詳しくはウェブカツのjavascript部やPHP部で触れています)
これも、各プログラミング言語によって違いがあります。
JavaScript
なんでも入れられる動的型付け言語。
PHP
なんでも入れられる動的型付け言語。
Ruby
なんでも入れられる動的型付け言語。
Java
同じ型の変数には同じ型の値しか入れられない、静的型付け言語。
「動的型付け言語」というのは、「型とか気にせずになんでも放り込んで好き放題自由にできるよ」っていう言語のことです。
Javaの場合は、「静的型付け言語」といって、忠実に「最初にこの型の値しかこの変数には入れない!」と決めたら一生守るというお侍さんタイプです。
型が決っていることで何がいいかというと「その型のデータ(値)以外は箱に入れられない」ということです。
そうすることで、変なものが入ってきそうになった場合にはエラーになるので、「あ、変なものが入ってきたな」とわかります。
でも、動的型付け言語の場合、気にせずにどんどん処理を進めていってしまうので、いつの間にか「え?どこでそうなった!?」という事が起こるんです。
伝言ゲームでいつの間にか全く違うものになってるイメージですね。
まぁ、書き方である程度防ぐ事はできるんですが、「型を気にせずにプログラムを書ける」ということは、その怖さもはらんでいるということです。
でも、その分「楽に簡単に書ける」というメリットでもあります。
ちなみにJava言語をやっている人からするとPHPやRubyといった動的型付け言語は「そんなのプログラミング言語じゃない!」と思う人もいるようですが、私から言わせると「利益が出せればなんでもいい」です。
あくまで、プログラミング言語は「WEBサービス」などの商品を作る「ツール」に過ぎないということを頭に入れておきましょう。
コンパイルの違い
プログラミング言語というのは「人が見て分かる」ように作られた言語です。
でも、機械というのは0と1の羅列(機械語)しか理解できません。(詳しくはネットワーク部でやっています)
なので、実際にプログラムを動かす(機械に命令する)には人が見て分かるプログラミング言語を「機械語」に翻訳する必要があるんです。
そこで必要なのが「コンパイル(翻訳)」です。
コンパイルはプログラミング言語を機械語に翻訳することをいいます。
ちなみにコンパイル(翻訳)するための専用ソフトのことを「コンパイラ」っていいます。
このコンパイルするタイミングもプログラミング言語によって違い、そのタイミングでまたメリット・デメリットがあります。
JavaScript
その場でひとつひとつ翻訳しながら実行していくインタプリタ型
PHP
その場でひとつひとつ翻訳しながら実行していくインタプリタ型
Ruby
その場でひとつひとつ翻訳しながら実行していくインタプリタ型
Java
一旦、中間言語にコンパイルし、それからひとつひとつ翻訳しながら実行していくインタプリタ型の変化番
JavaScriptやPHP,Rubyといったプログラミング言語は、「インタプリタ型」といって、実際に動かす際にプログラムを1行1行機械語に翻訳しながら実行をしていくものです。
「英語で書いてある本を翻訳しながら読んでいる」ようなもんですね。
その場で翻訳しながら読んで内容を理解していくわけなので、若干処理が遅い(読むスピードが遅い)というデメリットはありますが、プログラムを修正したらすぐ実行できるという開発の速さもあるので「開発スピードを重視」する場合に有効です。
すぐ作ってすぐ提供する吉野家タイプですね。
Java言語も同じくインタプリタ型ですが、一旦「中間言語」という形に翻訳します。
機械語に翻訳しやすい形に一旦翻訳をするという感じですね。それから、実行していきます。
なので、随時翻訳をするよりも翻訳が速い(処理スピードが速い)というメリットがあります。
大規模でユーザー数も多いなど「早く処理して早く画面を表示して〜」という場合に向いています。
また、さっき話した「型」がきちんとあるので、エラーなど不具合を出しにくく、間違いが起こってはいけない金融機関などでも使われています。
逆に一旦、中間言語に翻訳する必要があるので、「ちょっと修正したらまた中間言語に翻訳をして〜」と手間がかかるので開発スピードは落ちるというデメリットはあります。
ちなみにプログラミング言語の基本とも言える元祖の「C言語」は、「コンパイラ言語」といって、実行する前にちゃんと機械語に翻訳して、それから処理をしていくので最も処理スピードが速いです。
日本語に翻訳された本を買って読んじゃった方が一番速いのと同じですね。
環境構築の違い
環境構築とは、実際に手持ちのPCの中でプログラミング言語を書いて動かす環境を作ることをいいます。
実際の現場でも初心者が最初に時間がかかったり詰まるのがこの部分です。
この環境構築にも各言語で違いがあります。
JavaScript
何もいらない。適当にファイルを作ってプログラムを書けば、ブラウザで動く。
PHP
MAMPをインストールすれば終了
Ruby
Xcodeをインストールして、rbenvを入れて〜とやることが少し多い
Java
EclipseなどIDEを入れたり、環境変数の設定をしたり。。。と色々やる事が多く初心者にはハードルが高い
初心者の場合、結構この環境構築で何日もつまづくケースが多々あります。
なので、最初にプログラミング言語を学ぶのであればJavaScriptやPHPがオススメです。
まとめ
色々なプログラミング言語がありますが、出来ることはほとんど同じです。
(iPhoneアプリを作るにはObjective-C言語やSwift言語でないとという場合もあります。ちなみに最近ではjavascriptでiPhoneアプリを作ることもできるようになりました。)
書き方の違いやメリット・デメリットはありますが、根本的にやることは同じなので、最初学ぶ場合は「環境構築が簡単」で「すぐに動かせる」「目ですぐ動いているのが分かる」ものにしましょう。
ちなみにHTMLやCSS言語ってプログラミング言語じゃないの?と思われるかもしれませんが、正式には「マークアップ言語」といって「何かの処理をさせる」といったいわゆるプログラミング言語とは違うんです。