View
2.300
Download
3
Category
Tags:
Preview:
Citation preview
HN:よーく(@youku_s) 新社会人初心者丸出しプログラマ
仕事で使っている(た)もの:
VB.NET, Java
最近興味があるもの:
Scala, C++, HaskeLL, 離散数学,
幸せになるための方法全般, TRPG, etc…
関数型+オブジェクト指向の静的型付け言語
Javaとの互換性がある
Twitterとかで使われてる
便利な機能がたくさん ◦型推論
◦パターンマッチ
◦高階関数+無名関数
◦ immutableなコレクションの操作
◦ Option/Either型(nuLL とか絶対おかしいよ!)
初心者(僕のことです)的にうれしいところ ◦段階的にパラダイムや機能を導入できる柔軟性
◦ とりあえず短く書ける
関数型脳欲しい(;ω;)
Scalaちゃん可愛い! ◦ http://twitter.com/#!/scalachan
◦眼鏡掛けたい(褒め言葉)
フルスタックなWebフレームワーク ◦ foursquareとかSiemensで使われてるっぽい
特徴 ◦ Viewを前面に出したアーキテクチャ
◦ Function Mappingによるイベントの記述
formのsubmit処理
Ajaxの実行とか
◦ Cometのサポート
◦脆弱性への対応
◦設定はScala/DSLで記述
シンプルに書ける
他言語を同時に扱う量が減る ◦ XML
◦ JavaScript
Scalaの強みを生かせる ◦並列処理との親和性
Comet、並列レンダリング…
◦ Javaと同等のパフォーマンス
◦ コンパイル時のチェック
ページを構成するコンポーネントの見た目 ◦ HTMLで記述
レンダリングロジックは直接記述しない ◦動的な部分はSnippetのメソッドへ分離
Snippetによるレンダリング適用位置の指定 ◦ タグのclass属性、接頭語lift:を用いたタグを使用
◦ HTMLとして単体で見た目を確認できる
<body class="lift:content_id=main">
<div id="main"class="lift:surround?with=default;at=content">
<h2>Welcome to your project!</h2>
<p>
<span class="lift:HelloWorld.howdy">
<span id="time">Time goes here</span>
</span>
</p>
</div>
</body>
lift:Snippetのクラス名.メソッド名
コンポーネントの動的な部分のレンダリング
Scalaで記述
テンプレートのタグに処理を流し込む ◦ LiftではScalaのXMLリテラルとしてテンプレートを扱い、Snippetを処理している
◦ なので、Snippetのメソッドの戻り値型はNodeSeq
XMLノードのシーケンスの型
class HelloWorld {
def howdy = "#time *" #> "9:02pm"
}
Snippet
<span class="lift:HelloWorld.howdy">
<span id="time">Time goes here</span>
</span>
Template(抜粋)
id=“time”のタグの内容を#>の右辺で置き換えますヨ!
class HelloWorld {
def howdy = "#time *" #> “9:02pm”
}
Snippet
<span class="lift:HelloWorld.howdy">
<span id="time">Time goes here</span>
</span>
Template(抜粋)
イベントにGUIDを割り当てる ◦ RequestでGUIDを受け取ると、対応する関数オブジェクトがサーバ側で実行される
◦ JavaScriptを生成してテンプレートに注入する関数オブジェクトを与えるとAjaxを記述できる
GUIDはセッション固有
object name extends RequestVar(Full(""))
def form = {
"#txtbox *" #> SHtml.text(name.openOr(""),
v => name(Full(v))) &
"#submit *" #> SHtml.submit("Send",
() => {println(name.openOr(""))})
}
object name extends RequestVar(Full(""))
def form = {
"#txtbox *" #> SHtml.text(name.openOr(""),
v => name(Full(v))) &
"#submit *" #> SHtml.submit("Send",
() => {println(name.openOr(""))})
}
入力文字列を受け取り、nameにセットする 無名関数
object name extends RequestVar(Full(""))
def form = {
"#txtbox *" #> SHtml.text(name.openOr(""),
v => name(Full(v))) &
"#submit *" #> SHtml.submit("Send",
() => {println(name.openOr(""))})
}
nameの中身を取り出し、コンソールに出力する 無名関数
<form method="POST">
<div id="txtbox">
<input value="" name="F1213629648567AELZKU"
type="text">
</div>
<div id="submit">
<input type="submit" name="F1213629748568P2ZWC0"
value="Send">
</div>
</form>
Scala実践プログラミング
Scala+Liftによる実践Webアプリケーション開発 ◦ http://codezine.jp/article/corner/322
Exploring Lift ◦ http://exploring.liftweb.net/
Lift Wiki ◦ http://www.assembla.com/wiki/show/liftweb/
Recommended