Scalaについて非エンジニア向けに解説します!
[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は、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 |
他にもShort
、Long
、Float
、Byte
などの型があります。
型を指定して変数を宣言するには、変数名の後ろに型名を付記してあげましょう。
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
式については、個別の記事でさらに詳しく解説する予定です。