Scala
オブジェクト指向
関数型

Scalaの良さ(メリット)とは?

More than 1 year has passed since last update.

Scalaとは

プログラミング言語の一種
JVM上で動作し、Javaをシームレス(違いを意識しなくて良い)に利用できる
Scalaのコンセプトはオブジェクト指向関数型の統合
Javaをベースとしたオブジェクト指向言語の上に、関数型の機能を表現している

オブジェクト指向

オブジェクトはモノ
クラスは設計図(分類)
モノに要素(データ,プロパティ)と機能(処理,メソッド)が付いているというイメージ

三大要素

継承

特徴を共有すること

カプセル化

意味:機能とデータの範囲を明確にすること

ポリモーフィズム

使い分け

関数型

「データに何らかの処理を加えていく」の連続で組み立てていくもの

特徴

immutable(不変)

値が不変(val)

副作用がない

本来するべきことを作用とすれば、作用に伴って別のことをしてしまうのが副作用
つまり、特定の処理は同じことをしてくれる

関数はファーストクラス(第一級)

ファーストクラス(第一級)とは、関数を型として扱える
文字列型とか数値型とかと同じにみなせる

おまけ

関数とメソッドの違い

関数:引数に依存する。引数が同じなら常に同じ値を返し、引数が変わったら別の値を返す。
メソッド:オブジェクトと関連づいている。オブジェクトの操作をメソッドという

Scalaのメリット

Javaとの互換性

ScalaはJavaとの互換性を第一に考えられた言語
ScalaからJavaのAPIを呼ぶことができる

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

Future

非同期の計算を実現するライブラリが標準である
非同期プログラミングにより、スレッド数を超えるようなクライアントの大量同時のアクセスに対応

非同期とは

送信側と受信側のタイミングの一致(同期)を気にせずにデータをやり取りすること。つまり、はやい。

Akka

並行・分散プログラミングのためのライブラリ
Akkaにはアクターというスレッドより小さい単位の実行コンポーネントがあり、このアクター間の通信により並行・分散プログラミングをおこなえる。

並行・分散とは

1度に複数の手続きが実行される

パターンマッチ

Scalaのパターンマッチにはフォールスルーがない
フォールスルーはメリットよりも、バグであると考える方が多数

フォールスルーとは

switch文においてbreakを省略した書き方。
以下のような処理があった際に

switch (value) {
    case 0:
        System.out.println(“0″);
    case 1:
        System.out.println(“1″);
        break;
    default:
        System.out.println(“-1″);
        break;
}

value = 0 なら
0
1

value = 1 なら
1

value ≠ 0 ≠ 1 なら
-1

のように本来ならvalue = 0 なら0と返したい所でであるが、0 1を返していまう。

今のところはこのくらい
もうちょっと勉強していきたい

参考

ドワンゴオリジナルの、新卒エンジニア向けの研修資料