Scalaを触ってみた


introduction

Scalaについて学び始めたので備忘録として書いていきます。
開発環境はMacOS Mojave ver10.14.6です。

Scalaのための環境構築fot Mac

Javaのインストール 

こちらはもうわざわざ書く必要はないかもしれません。
適宜公式や必要なQiitaの記事をみて最新版をインストールしてください。

sbtのインストール

MacOSの場合簡単に

brew install sbt

と入力するだけでインストールできます。

そして以下のコマンドでコンソールが出現します。
コンソールを立ち上げる際にはディレクトリを下げてから実行すると良いです。
コンソールを立ち上げた際にはtargetというディレクトリが出現するのでカレントを汚したくない人はディレクトリを下げることをお勧めします。

sbt console

終了したい時には

scala> :quit

と入力すればOKです。

Scalaの基本

Hello,World!

それではconsoleを起動してscalaが動くことを確認してみましょう。

println("Hello, World!")
>>>Hello, World!

printlnの書き方がJavaと似ていますね。
ScalaはJavaと同じく静的な型を持つ言語で、コードの実行時に型がチェックされる仕組みになっています。

変数の取り扱いについて注意

Scalaにも当然変数という概念がありますが、注意が必要なのはScalaの変数にはvalとvarの2種類があることです。

val:一度変数に値を格納したら変更不可能
var:(CやJavaの通常の変数のように)変更可能

Scalaでは基本的にvalのみでプログラミングします。
(ここも関数型っぽさがありますね。。)

val x = 3 * 2
>>>x: Int = 6

となります。Javaなどと異なっているのは変数の型を宣言していないことです。これは3*2の計算結果の型からコンパイラが自動でxの型を推論しているからです。

これを(ローカル)型推論と言います。
またvalを用いたことにより、他の型として扱うとエラーが出ることと、変数の変更(再代入)ができないことを確認してみます。

//新しい変数の宣言
var x = 3 * 3
>>>x: Int = 9

x = "Hello, World!"
>>>
<console>:8: error: type mismatch;
 found   : String("Hello, World!")
 required: Int
       x = "Hello, World!"
           ^

x = 3 * 4
>>>x: Int = 12

//変更できない変数の実験
val y = 3*2
>>>y: Int = 6


y = 3*3
>>>
<console>:12: error: reassignment to val
       y = 3*3
         ^

もちろんScalaで型を明示して宣言することもできます。

'val'もしく'var' <変数名> : <型名> = <>
//例
val x: Int = 3 * 3

このように結果がなります。
ここで "=<式>"と書いているのがきになるかもしれませんが、これはScalaが関数型であるからです。基本的に関数型言語には式しかありません。

Scalaの特徴について

Scalaとは

「Scalaは2003年にスイス連邦工科大学ローザンヌ校(EPFL)のMartin Odersky教授によって開発されたプログラミング言語です。Scalaではオブジェクト指向と関数型プログラミングの両方を行えるところに特徴があります。また、処理系はJVM上で動作するため1、Java言語のライブラリのほとんどをシームレスに利用することができます。」

とのことです。

先にもみた通り、ScalaはJavaにも似ていますが関数型です。つまりオブジェクト志向likeであり、かつ関数型プログラミング言語であるサラブレッドのような言語らしいです。

関数型であるということ

Scalaという言語はオブジェクト指向の概念で関数型の機能を解釈し取り込んでいるそうです。それにより必要以上に言語仕様を肥大化させることなく関数型の機能を実現しています。

また関数型言語の大事な特徴として式の評価に関する話題や、不変性・参照透過性・純粋性などの概念も理解していかなくてはなりません。(今回は大事なんだということを頭に入れて割愛します。)

Javaとの互換性

「ScalaはJavaとの互換性を第一に考えられた言語です。Scalaの型やメソッド呼び出しはJavaと互換性があり、Javaのライブラリは普通にScalaから使うことができます。」

つまり既存のJavaライブラリを存分に使えるらしいです!
ありがたいです。

非同期プログラミング、並行・分散プログラミング

「Scalaでは非同期の計算を表現するFutureが標準ライブラリに含まれており、様々なライブラリで使われています。非同期プログラミングにより、スレッド数を超えるようなクライアントの大量同時のアクセスに対応することができます。」

流行りの並行・分散プログラミングにも対応している言語だそうです。

おわり

以上がScalaのMacへのインストールと簡単なコマンドの実行 になります。通常のプログラミング言語と違った面も多くまだ慣れないです。

次回はコンパイルとInteliJのインストールと基本的な使用方法について勉強してみます。

参考

本文書は、CC BY-NC-SA 3.0


の元で配布されています。