【Scala言語入門】Scala言語の特徴や出来る事を解説!オブジェクト指向と関数型コードの違いやJavaとの関係も確認
モダンな言語「Scala」
IT業界では日々新しい技術やフレームワーク・ライブラリなどが頻繁に登場します。
それはプログラミング言語も同様です。
今までマイナーだった言語がある日突然注目され始め、主流な言語に変化するなどということは珍しくありません。
その移り変わりの激しさはIT業界特有のものといえるでしょう。
今回は特に注目を集め始めている過程にある「Scala」というプログラミング言語に注目していきます。
一体Scalaはどんな特徴を持っているのかという点はもちろん、Scalaでできることも解説。
基本的なコードも紹介するので、Scala言語入門としてこちらの記事をご覧ください。
Javaと密接な関係を持っている
それでは早速Scalaについて様々な観点から紹介を進めていきます。
Scalaについて語る上で欠かせない、密接な関係を持っているプログラミング言語があります。
それは「Java」です。
世界的にメジャーなプログラミング言語であり、エンジニアであれば誰しもが知っているであろう言語であるJava。
今回紹介するScalaとどのような関係を持っているのでしょうか。
Javaの後継と呼ばれることもあるScala
ScalaはJavaの「後継言語」と呼ばれることがあります。
一体どうして「後継」と呼ばれるのでしょうか。要因を解説します。
ScalaはJavaプラットフォーム上で動作する
その要因の大きな1つが、ScalaがJavaプラットフォーム上で動作するからです。
Javaプラットフォーム、つまりJava仮想マシンと呼ばれる「JVM(Java virtual machine)」上で動作します。
つまりJavaのようにハードウェアを問わず「JVMが動作する環境であればそのプログラムを動作させられる」ということです。
ハードウェアに依存せず、OS問わず様々なシーンでプログラムを動かせるというのは環境によってそれぞれ開発をする手間を省けるため、大きなメリットとなっています。
Javaのライブラリの大半をScalaでも使用できる
そしてもう1つの要因が「Javaのライブラリを使用できる」という点になります。
プログラミングをして何かシステムやアプリケーションを開発する上で、ライブラリは欠かせない存在です。
JavaはこれまでIT業界の第一線で世界中で親しまれてきた言語です。
そのJavaのために作られた数多くのライブラリの大半をScalaでも利用できるというのは、非常に嬉しいポイントといえます。
Javaエンジニアが理解しやすい
これら2つの要素が絡み「Javaの後継言語」といった呼ばれ方をするのです。
上記に加え、これまでにJavaに触れたことのあるエンジニアであれば理解しやすい言語ということもあって注目を集め始めています。
もちろんJavaとは異なる部分も多々存在しています。
これから紹介するScalaの持っている「特徴」でそれが明らかになるでしょう。
Scala言語の持つ特徴
Scalaにはどのような特徴があるのかについて解説していきます。
Scalaは以下の3つの特徴を持っています。
- コード量が少なく、シンプルである
- オブジェクト指向型言語と関数型言語2つの性質を持っている
- Javaとの互換性の高さ
1つずつ簡単にチェックしていきましょう。
コード量が少なく、シンプルである
まずメリットとしても挙げられるポイントが「コード量が少ない」ことと「コードがシンプル」という2つです。
どちらもソースコードに関する特徴となっています。
まず「少ない」という点ですが、比較されがちなJavaと比べてみるとおよそ半分ほどにまでコード量を減らすことが可能です。
複雑なプログラムになればなるほどソースコードの文量は増えてしまいますが、Scalaであればそれを半分ほどに抑えられます。
そしてコードもシンプルです。
まるでスクリプト言語のようにライトに記述ができ、読みやすく、後からコードレビューをする際も分かりやすいでしょう。
リファクタリングもしやすいといえます。
オブジェクト指向型言語と関数型言語2つの性質を持っている
最大の特徴ともいえるのが、オブジェクト指向型言語と関数方言語2つの性質を持っているということ。
本来2つの性質を持っている言語と聞いても想像すら付きませんが、Scalaはそれを実現しています。
オブジェクト指向プログラミングと関数プログラミングは互いに違った利点を持っていますが、その「良いところ」を兼ね備えている言語だということです。
Javaとの互換性の高さ
そして先ほど触れた通り「Javaの後継言語」と呼ばれているScalaは、Javaと非常に高い互換性を持っています。
例えば、Javaでプログラミングして開発したものを、Scalaへ移行させることが簡単に実現可能です。
その逆も然りで、JavaからScalaを呼び出すこともできます。
こういった部分も含め「ScalaはJavaでできることが何でもできる」と表現されることもあるので覚えておくといいかもしれません。
Scalaでできること
Scalaではどんなことができるのでしょうか。
実際に利用されている例としては、今や日本でも大人気のSNSであるTwitterやLinkedInをはじめ、スイス銀行などが採用しているようです。
多岐に及ぶジャンルから支持を集めていることが分かります。
つまりWebサービス・スマートフォンアプリ・業務システムといったものをScalaで開発できるということです。
WebサービスとScala
Webサービスにおいて重要な要素が、堅牢性とスピードといった面。
Scalaはそのどちらも兼ね備えています。
先ほど触れたTwitterやビジネスチャットツールであるTypetalkなどでも採用されています。
実行スピードはもちろん堅牢性が高いこともあり、特に規模の大きいWebサービス開発に適している言語だといえるかもしれません。
スマートフォンアプリとScala
AndroidアプリではJava、もしくは近年注目を集め始めているKotlinが主流ですがScalaでも開発可能です。
SmartNewsやはてなブックマークなどはScalaを利用して開発されているアプリであることからも、Scalaの可能性を感じる方は多いのではないでしょうか。
そもそもJavaの後継言語といわれ、Javaでできることは何でもできるとまで称されるScala。
スマホアプリも開発できるのはある種必然的といえるかもしれません。
業務システムとScala
先ほど触れたスイス銀行など、企業が業務を行う上で効率化を求めたり業務で用いるシステムが「業務システム」です。
Scalaはドワンゴやサイバーエージェントなど日本でも有名な企業に採用されている言語です。
Webサービスで紹介しましたが、実行速度の速さと高い堅牢性を持っているScalaは、業務上で使用するシステムにも安心して採用できるということでしょう。
オブジェクト指向プログラミングと関数型プログラミングが融合している
既に触れた通り、Scalaはオブジェクト指向と関数型プログラミング、2つの性質が融合している言語です。
この2つは相容れないものと思いがちな方も多いですが、実際には決して矛盾している関係性というわけではありません。
2つの面を見事に取り込んでいいとこ取りをさせたScalaは、未来に繋がり新たなプログラミングの形式を提案してくれるプログラミング言語だといえます。
Scalaで「Hello, World!」
それでは、ここからは少し実践的な内容に入っていきましょう。
Scalaは難易度の高い言語だといわれています。
まずは、簡単なコードから少しずつ難しくしていくことが大切です。
今回はどのプログラミング言語でも最も基本的なコードとなる「Hello, World!」をScalaで書いてみます。
- object HelloWorld {
- def main(args: Array[String]) :Unit = {
- println(“Hello, World!”)
- }
- }
パッと見ると少し複雑に見えるかもしれませんが、とてもシンプルな構文です。
具体的にチェックしていきましょう。
object
ScalaはJavaとは異なり、静的・staticな扱いがありません。
全てがオブジェクトとなります。
objectは1つのインスタンスのみを使用する際、つまり複数のインスタンスを必要としない場合に使いましょう。
defでメソッド定義
次の行では「def main(args: Array[String]) :Unit = {」と記述しました。
既にお気づきの方もいらっしゃるかと思いますが、Scalaでメソッドを定義する際には「def」を利用します。
「: Unit =」という部分は、戻り値が無いケースのことを指しており、省略も可能です。
println
こちらで出力を行なっています。
Javaでいえば「System.out.println」ですね。
またScalaにおいて基本的に行末にセミコロン(;)は不要です。
これもScalaの特徴の1つといえるかもしれません。
いわゆる「モダンな言語」と呼ばれる部分です。
登場しなかった「val」はfinalのようなもの
また今回のサンプルコードでは登場しませんでしたが、他の言語との違いとして「val」というものが挙げられます。
こちらは他のプログラミング言語でいう「final」のようなもの。
宣言時に代入した変数の値を変更できない(再代入できない)、イミュータブルな変数などを宣言できます。
必要に応じて使い分けることで、イミュータブルなプログラミングにおけるメリットを享受できるでしょう。
型宣言について
続いてはプログラミングをする際に絶対に避けては通れない「型宣言」に注目してみましょう。
今回は比較されがちなJavaと見比べてみます。
とはいったものの、違いは頭文字が大文字か小文字かというポイントのみ。
つまり、Javaの「int」はScalaでは「Int」になるということです。
floatやdouble、booleanも同様で、それぞれ「Float」「Double」「Boolean」と全て頭文字が大文字になります。
サイズなどはJavaと同様なので、Java経験者の方であれば型について躓く部分は少ないといえるでしょう。
頭文字が大文字という点だけ気を付けるようにしてください。
Javaの後継ともいわれるScalaから目が離せない
今回の記事では、Scala言語に注目して、基礎的な知識面をはじめとし、基本的なコードまで一気にチェックしてきました。
記事中で触れた通り、ScalaはJavaの後継言語ともいわれている新時代のプログラミング言語です。
現状はまだまだ発展途上で、仕事の量・案件数・求人数という意味ではまだまだ需要の低い言語かもしれません。
しかしJavaプログラムで作られたシステムなどを簡単に移行できて、しかもコード量が減らせるというメリットなどを持っています。
こういったメリットを考え、Scalaに移行させようという巨大ムーブメントが発生してもおかしくありません。
コード量を減らしてシンプルなソースコードになれば、結果としてデバッグが容易になったり、バグそのものを減らすことに繋がります。
実行速度や堅牢性などのメリットも多く、今後さらにScalaが注目を集めていくことは容易に想像できるのではないでしょうか。
ぜひとも習得しておきたい言語の1つである
Scalaは将来を見据えているプログラマー、中でもJavaエンジニアであればぜひとも習得しておきたい言語です。
オブジェクト指向と関数型プログラミング2つの性質を持っているということもあり敷居が高いといわれているScala。
両方をしっかり理解していなければ、ゼロから勉強をして習得するのは難しいとされています。
しかし、Javaプログラマーであれば比較的容易に移行できるともいわれているのも事実。
自分のこれまでに培ってきたJavaの技術を活かし、繋げ、新たな言語を習得できるかもしれません。
Scalaが今後さらに注目を集めれば「JavaとScala両方を扱えるエンジニア」の需要も必然的に増していくでしょう。
自分の将来のためにも、Scalaを今のうちから勉強・習得しておくのは賢い動きだといえます。
新しい技術を習得したいという方はもちろん、Javaを既に習得されている方はScalaを勉強してみてはいかがでしょうか。