Scalaについて非エンジニア向けに解説します!

最終更新:2020年7月11日

[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください

「学校の授業でホームページを作ったことならあるよ!」という方は多いと思います。
それでも、プログラミングはやったことない、という人がほとんどだと思います。
このページを見ている方の大半は「最近Scalaっていうのがあるって聞いたけど、一体何なんだろう?」という印象を抱いているでしょう。

この記事では、普段プログラミングをしないけど、とりあえず「Scala」について簡単に知っておきたい、という人向けに、Scalaとは何なのかについて詳しく解説していきます。

Scalaとは、プログラミング言語です

世の中にはプログラミング言語がたくさんありますよね。

Scalaとは、数あるプログラミング言語のうちのひとつの言語です。

他のプログラミング言語としては、例えばC言語、C++、Java、Ruby、Python、PHP、Perl、Swift、Kotlin、COBOL、Fortranなどがあります。

Scalaはよくインターネット関係のプログラムを動かすのに使われます

Webサービスを動かすのに使われます

スマートフォンアプリを動かすのにも使われます

大企業が採用しています

TwitterはScalaで動いています

その他のインターネット系

その他の金融系

メリットは開発生産性が高いこと

高速で大量のデータを処理するのが得意です

デメリットは扱えるプログラマが少ないこと

Scalaに入門する

さて、それではScalaに入門してみましょう。

実際にScalaのコードを動かしてみましょう。

Scalaのプログラムをお手軽に実行するには、Scastieというサイトを開きます。

外部リンク:Scastie

Scastieは、Scalaのオンラインの実行環境です。
英語版しかありませんが、Scalaの公式が用意しているツールですので、安心して使うことができます。

Scastieを開いてすぐの画面には以下のコードがあらかじめ入力されています。

println("Hello! World")

この状態でSaveボタンを押すと、プログラムが実行され、その結果が下のウィンドウに表示されます。
以下のように表示されれば実行成功です。

Hello! World

Scalaの初歩的な使い方を学ぶ

次に、Scalaの初歩的な使い方について見ていきましょう。

変数を宣言する

まずは「変数」を宣言してみましょう。

変数とは、使用するデータを一時的に置いておく場所のことです。

変数を宣言するということは「このデータはここに置いておきますね!」と周囲に言うようなものです。

さて、変数は以下のようにして宣言することができます。

val x = "immutable"

一度宣言した変数は変更できません。一度置いたものはそのまま動かせません。

これはとても大切な性質です。
このことを「イミュータブル」といい、「再代入できない」「再代入不可」と言い替えられます。

変数を宣言する方法について、詳しくはこちらの記事を参照してください。

基本のデータ型を知る

コンピュータで扱えるデータにはいくつかの種類があるのですが、そのうちでも特によく用いられるものについてはあらかじめ名前がつけられています。

Scalaには以下のような基本のデータ型(「基本型」と呼びます)があります。

名称説明使用例
String文字列val x: String = "これは文字列です"
Int整数val x: Int = 1
Double浮動小数点数val x: Double = 0.1
Boolean真偽値val x: Boolean = true

他にもShortLongFloatByteなどの型があります。

型を指定して変数を宣言するには、変数名の後ろに型名を付記してあげましょう。

val (変数名): (型名) = ...

基本型については、個別の記事で解説する予定です。

関数(メソッド)を宣言する

何らかの処理をするためのプログラムの最小単位を「関数」、「メソッド」といいます。

処理のためにメソッドに渡すデータを「引数」と呼び、その結果として得られるデータを「返り値」と呼びます。

以下のようなメソッドを定義してみましょう。

def double(n: Int): Int = { n + n }

このメソッドは、基本型のIntを引数に取り、これを2倍にして返り値としています。

実際に使ってみましょう。

double(100)
200

このように、渡した値が2倍になって返ってくればOKです。

関数やメソッドについては、個別の記事で解説する予定です。

リストを使う

Scalaにおいてリストを使いたい場合は、Seqクラスを使います。

val list = Seq(100, 200, 300)

Scalaのリストについては個別の記事で解説する予定です。

リストの要素を順次処理する2つの方法

リストの要素を順次処理してみましょう。

順次処理する方法には2つあります。
mapメソッドを使用する方法と、for式を使用する方法です。

それぞれ見てみましょう。

mapメソッドで順次処理する

先程宣言したリストに対して、mapメソッドを使って順次処理をしてみましょう。

list.map(x => double(x))

以下のように、各要素がすべて2倍になっていればOKです。

Seq(200, 400, 600)

mapメソッドについては、以下の記事でさらに詳しく解説しています。

for式で順次処理する

今度は、先程のリストに対してfor式を使って順次処理をしてみましょう。

for (x <- list) yield (double(x))

こちらも、以下のように、各要素がすべて2倍になっていればOKです。

Seq(200, 400, 600)

for式については、以下の記事でさらに詳しく解説しています。

分岐をする2つの方法

Scalaで分岐処理をする方法は実はいくつもあるのですが、最も代表的なものを2つ紹介します。 if式とmatch式です。

if式で分岐する

とっても雑な例ですが、場面に応じて異なる挨拶をするプログラムを書いてみましょう。

以下のように、もし朝なら「おはよう」、そうでなければ「こんにちは」を返すメソッドを宣言してみましょう。

def greet(isMorning: Boolean): String = if (isMorning) { "おはよう" } else { "こんにちは" }

早速このメソッドを使ってみましょう。

greet(true) greet(false)

以下のように出力されればOKです。

おはよう
こんにちは

if式については、個別の記事でさらに詳しく解説する予定です。

match式で分岐する

先程のようなif式では、朝かどうかで判定しているので、夜の場合には対応できていませんでした。(もちろん「こんにちは」でも十分ですが。笑)

今度はmatch式を使って、より柔軟に対応していきましょう。

時間帯に加えて、始まりの挨拶なのか終わりの挨拶なのかも加味してみましょう。

def greet(isStart: Boolean, hour: Int): String = (isStart, hour) match { case (true, _) if 5 <= hour || hour < 12 => "おはよう" case (true, _) if 12 <= hour || hour < 18 => "こんにちは" case (true, _) => "こんばんは" case (false, _) if 5 <= hour || hour < 18 => "さようなら" case (false, _) => "おやすみ" }

これにより、夜の場合と終わりの挨拶にも対応できました。
だいぶ複雑になりましたね。

greet(true, 7) greet(true, 13) greet(true, 18) greet(false, 15) greet(false, 20)

以下のような出力となっていればOKです。

おはよう
こんにちは
こんばんは
さようなら
おやすみ

match式については、個別の記事でさらに詳しく解説する予定です。

サイト内検索