2016/12/26

PlayScalaによるWebアプリケーション - Scalaテンプレート

PlayScalaによるWebアプリケーション開発では、テンプレートを使う事が出来ます。
Webサイトでは、上の方のヘッダーが同じものがよくありますが、
Scalaではテンプレートを使う事により効率的にページがつくれます。

テンプレートでは、ヘッダーと全体の枠組みを書きます。

・テンプレートのファイル - main.scala.html
@(title: Stringl)(content: Html)
<!DOCTYPE html>
<html>
  <head>
    <title>@title</title>
  </head>
  <body>
  <div class="container">
  <nav class="navbar navbar-inverse navbar-fixed-top">
  <!-- この中にヘッダー部分のHTMLを書きます -->

  <nav class="">
  </nav>
@content
  </div>
  </body>
</html>

テンプレートを利用する側のページでは、下記のように呼び出して使います。
@main と書くことにより、main.scala.html がテンプレートファイルとして読み込まれます。

・一般のページのファイル - fDetail.scala.html
@title = {"ページタイトル"}
@main(title) {
 
  <h1>Home page</h1>
  <!-- ここにホームページの中身を書きます -->
}

のようになっています。

2016/12/14

PlayScala コレクション型 Array,List,Map

Scalaで良く使われるコレクション型について見ていきます。

(1)Array型
Array型は配列として扱う。メモリ上で連続して扱われています。
同じ種類の大量のデータを効率的に扱う事が出来ます。

・データを指定して宣言
scala> var a = Array(10,20,30,40,50)
a: Array[Int] = Array(10, 20, 30, 40, 50)

Array型の要素は、添え字を指定して取得する事も出来ます。
scala> a(0)
res1: Int = 10

・ループで回す
for文を使ってループする事も出来ます。
scala> for(i <- 0 to a.length - 1) { println(a(i)) }
10
20
30
40
50

(2)List型
List型は連結リストのような構造になっています。
Array型と比べてデータの追加、削除が早いというメリットがあります。

・定義
scala> var m = List("abc", "def", "hij", "klm")
m: List[String] = List(abc, def, hij, klm)

・値の追加
リストの末尾に追加されます。
scala> m = m :+ "xyz"
m: List[String] = List(abc, def, hij, klm, xyz)

・ループで回す
for文を使ってループする事も出来ます。
scala> for(l <- list) { println(l) }
abc
def
hij

(3)Map型
Map型はキーと値が対になっています。

・定義
scala> var map = Map("a" -> 10, "b" -> 20, "c" -> 30, "d" -> 40)
map: scala.collection.immutable.Map[String,Int] = Map(a -> 10, b -> 20, c -> 30, d -> 40)

・値の取得 
キーを指定して値を取得します。

scala> map.get("a")
res32: Option[Int] = Some(10)

・値の追加
以下のようにしてキーと値のセットを追加します。
通常のmapでは追加した順番が保証されないようです。

scala> map + ("e" -> 50)
res27: scala.collection.immutable.Map[String,Int] = Map(e -> 50, a -> 10, b -> 20, c -> 30, d -> 40)

・ループで回す
forループで回していきます。
scala> for (d <- map) println(d)
(e,50)
(a,10)
(b,20)
(c,30)
(d,40)

forループで、キーと値をセットで回す事も出来ます。
scala> for ((k, v) <- map) { println("key:%s, value:%d". format(k, v)) }
key:e, value:50
key:a, value:10
key:b, value:20
key:c, value:30
key:d, value:40