Más contenido relacionado
La actualidad más candente (20)
Similar a JavaからScalaへ (20)
JavaからScalaへ
- 4. Web開発言語としてのScala
• ステートレス
• HTTPもステートレス
• クライアント側で頑張る流れになってきている
• 関数型言語のステートレスな性質と相性がよい
• コレクション操作
• Webアプリは基本的にデータを加工して表示する
• 強力なコレクションAPIはこのような処理と相性が
よい
• フレームワーク
• ノンブロッキングI/Oを活用
• アクセス数の多いシステムのバックエンドに適して
いる
- 6. たとえばこんなプロジェクト
• JavaベースのWebアプリをScalaにポーティング
• 約170画面、約40,000 lines
• 最大5人×6ヶ月
• コード量を40~50%削減、品質向上
Before
• Seasar2
• Apache Click
• S2JDBC
• PostgreSQL + Tsearch
• Raw JavaScript
After
• Play2 (Customized)
• ScalaQuery (Cuztomized)
• PostgreSQL
• Apache Solr
• jQuery + jQuery UI
Flexibility and Safety
- 13. Play2はタイプセーフ
• ルーティングもタイプセーフ
GET /clients/:id controllers.Clients.show(id: Int)
設定ファイルにルーティングを定義
コントローラやテンプレートで逆引きが可能
def index = Action {
Redirect(routes.Clients.show(1))
}
<ul>
@clients.map { client =>
<li><a href=“@routes.Clients.show(client.id)”>@client.name</a></li>
}
</ul>
- 14. WebSocketも簡単に使えます
def index = WebSocket.using[String] { request =>
// クライアントにメッセージをプッシュするEnumerator
val out = Enumerator.imperative[String]()
// クライアントから送信されたメッセージを処理するIteratee
val in = Iteratee.foreach[String]{ message =>
out.push("Hello " + message + "!")
}
(in, out)
}
クライアントからのメッセージを受信するためのIterateeと、
クライアントにメッセージを送信するためのEnumeratorの
タプルを戻り値として返す
- 15. クライアント側はこんな感じ
@()(implicit request: RequestHeader)
…
<script>
var ws = new
WebSocket("@routes.WebSocketController.index.webSocketURL()");
// サーバーからプッシュされたメッセージをダイアログで表示
ws.onmessage = function (evt) {
alert(evt.data);
}
</script>
<input type="text" id="name">
<input type="button" value="Send" onclick="ws.send($('#name').val())"/>
…
エンドポイントのURLを
タイプセーフに指定できる
- 19. こんな感じ
class MyServlet extends ScalatraServlet with ScalateSupport {
get("/") {
// リクエストパラメータを取得
val name = params("name")
// XMLリテラルでレスポンスを生成
<html>
<body>
<h1>Hello, world!</h1>
Say <a href="hello-scalate">hello to {name}</a>.
</body>
</html>
}
}
- 22. Scala is now glowing up!
• Scalaは業務でも十分に使える言語です。
• ScalaにはJavaでは失われた熱気があります。
• まだ未熟な部分もありますが、一緒に成長して
いきましょう!