• ログインログイン
  • 新規登録新規登録

MENU

流行の技術に実際に触れてみよう 「Scala」と「PlayFramework」(5)

連載流行の技術に実際に触れてみよう 「Scala」と「PlayFramework」

ScalaとはJVM上で動作する関数型オブジェク指向言語です。簡潔な文法と実効速度に定評があり、国内でも徐々に浸透してきています。 流行の技術に実際に触れてみながら、動くものを作っていく開発レシピです。

前回までのプログラミング学習コラムに続き5回目の勉強内容です。

ScalaのコレクションAPI

今回はScalaのListなどコレクションのAPIを題材にScalaの関数型言語らしい機能紹介させて頂きたいと思います。コレクションライブラリは大抵の言語でサポートされているとても強力な機能です。Scalaにおいても標準機能としてサポートされています。

配列

配列はC言語やJavaScript,PHPなどプログラミング言語毎に構造が異なるちょっと変わったものの一つです。 Scalaにおける配列を紹介させて頂きます。

//コンテナの生成
>scala val array : Array[String] = new Array[String](3)
//値を入れる
>scala array(0) = "Hello"
>scala array(1) = ","
>scala array(3) = "World!"

ここにScalaの配列生成方法を記載しました。この段階でみておくべき事は配列の要素には値が代入できる事と、些細なことですが配列の要素へのアクセス演算子が[]ではなく()であることです。

また、これまで通り型推論を利用した簡潔な記法で書くことも可能です。

>scala val num = Array("Zero", "One", "Two")

これは Zero,One,Twoという文字列によって初期化された配列を生成します。 要素として文字列が渡されているので配列の型をArray[String]と推論します。

リスト

「メソッドは副作用を持っていてはならない]これは基本的な関数型プログラミングの考え方の大きな特徴です。メソッドの作用は計算して値を返すのみであり、結果に依存するものは引数のみである。このアプローチを取るとメソッドの再利用がしやすくなります。

これを採用したScalaのリストを外観していきましょう。簡単な使い方は配列と同じです。

scala > val oneThree = List(1,3)
List(1,3)

ここで、Listのメソッドを幾つか紹介させて頂きたいと思います。

scala> val twoThree = List(2,3)
List(2,3)
//1とリストの連結したものを返す
scala> val oneTwoThree = 1 :: twoThree
List(1,2,3)
//List それぞれの文字列を要素としたリストを返す
scala> val helloworld = "Hello" :: "," :: World :: Nil
List("Hello",",","World")
//先頭の2つを除去したリストを返す
scala> val world = helloworld.drop(2)
List("World")
//右2つ
scala> val hello = helloworld.dropRight(2)
List(",","world")
//末尾以外の要素
scala> helloworld.init
List("hello",",")
//反転
scala> helloworld.reverse
List("world",",","hello")

これら関数の共通点を探してみましょう。 まず、全ての関数は値を返しています。 もう一つ、元となったリストの値を変更していません。 つまり、大体のメソッドは副作用を持たない構造で実装されています。

もちろん、他にも多くの関数があるため、興味がある方はScalaのリファレンスマニュアルやScalaの作者のMartin Odersky さんの著書『Scalaスケーラブルプログラミング第2版』を読んでください。

今回でScalaの基礎の基礎が終わりです。 次回からはPlayFrameworkを使った実践的なWebアプリケーション開発へ移っていきます。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top