よーく(@youku_s)
HN:よーく(@youku_s)新社会人初心者丸出しプログラマ仕事で使っている(た)もの: VB.NET, Java最近興味があるもの: Scala, C++, HaskeLL, 離散数学, 幸せになるための方法全般, TRPG, etc…
 関数型+オブジェクト指向の静的型付け言語 Javaとの互換性がある Twitterとかで使われてる 便利な機能がたくさん    ◦ 型推論    ◦ パターンマッチ    ◦ 高階関数+無名関数    ◦ immutableなコレクシ...
   初心者(僕のことです)的にうれしいところ    ◦ 段階的にパラダイムや機能を導入できる柔軟性    ◦ とりあえず短く書ける   関数型脳欲しい(;ω;)   Scalaちゃん可愛い!    ◦ http://twitter.co...
とりあえずこの本を読みましょう!
   フルスタックなWebフレームワーク    ◦ foursquareとかSiemensで使われてるっぽい   特徴    ◦ Viewを前面に出したアーキテクチャ    ◦ Function Mappingによるイベントの記述     ...
 シンプルに書ける 他言語を同時に扱う量が減る    ◦ XML    ◦ JavaScript   Scalaの強みを生かせる    ◦ 並列処理との親和性      Comet、並列レンダリング…    ◦ Javaと同等のパフォー...
Requestとか                    LiftFilter主に作成する部分             View                テンプレート                          画面中のコンポーネン...
   ページを構成するコンポーネントの見た目    ◦ HTMLで記述   レンダリングロジックは直接記述しない    ◦ 動的な部分はSnippetのメソッドへ分離   Snippetによるレンダリング適用位置の指定    ◦ タグのc...
<body class="lift:content_id=main"> <div id="main"class="lift:surround?with=default;at=content">  <h2>Welcome to your proj...
 コンポーネントの動的な部分のレンダリング Scalaで記述 テンプレートのタグに処理を流し込む    ◦ LiftではScalaのXMLリテラルとしてテンプレートを      扱い、Snippetを処理している    ◦ なので、Sni...
Template(抜粋)<span class="lift:HelloWorld.howdy">   <span id="time">Time goes here</span></span>                        id=...
Template(抜粋)<span class="lift:HelloWorld.howdy">   <span id="time">Time goes here</span></span>Snippetclass HelloWorld {  ...
Template(レンダリング後)<span class="lift:HelloWorld.howdy">   <span id="time">9:02pm</span></span>
   イベントにGUIDを割り当てる    ◦ RequestでGUIDを受け取ると、対応する関数オブ      ジェクトがサーバ側で実行される    ◦ JavaScriptを生成してテンプレートに注入する関数      オブジェクトを与え...
object name extends RequestVar(Full(""))def form = {     "#txtbox *" #> SHtml.text(name.openOr(""),        v => name(Full(...
入力文字列を受け取り、object name extends RequestVar(Full(""))                               nameにセットするdef form = {                  ...
object name extends RequestVar(Full(""))                             nameの中身を取り出し、def form = {                 コンソールに出力する ...
<form method="POST">   <div id="txtbox">      <input value="" name="F1213629648567AELZKU"type="text">   </div>   <div id="...
 Scala実践プログラミング Scala+Liftによる実践Webアプリケーション  開発    ◦ http://codezine.jp/article/corner/322   Exploring Lift    ◦ http://...
ご清聴ありがとうございました!
Upcoming SlideShare
Loading in …5
×

ScaLa+Liftとか

2,516 views

Published on

需要があるかわからないし、前回のスライドと共通部分多いけど一応。

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,516
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
14
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

ScaLa+Liftとか

  1. 1. よーく(@youku_s)
  2. 2. HN:よーく(@youku_s)新社会人初心者丸出しプログラマ仕事で使っている(た)もの: VB.NET, Java最近興味があるもの: Scala, C++, HaskeLL, 離散数学, 幸せになるための方法全般, TRPG, etc…
  3. 3.  関数型+オブジェクト指向の静的型付け言語 Javaとの互換性がある Twitterとかで使われてる 便利な機能がたくさん ◦ 型推論 ◦ パターンマッチ ◦ 高階関数+無名関数 ◦ immutableなコレクションの操作 ◦ Option/Either型(nuLL とか絶対おかしいよ!)
  4. 4.  初心者(僕のことです)的にうれしいところ ◦ 段階的にパラダイムや機能を導入できる柔軟性 ◦ とりあえず短く書ける 関数型脳欲しい(;ω;) Scalaちゃん可愛い! ◦ http://twitter.com/#!/scalachan ◦ 眼鏡掛けたい(褒め言葉)
  5. 5. とりあえずこの本を読みましょう!
  6. 6.  フルスタックなWebフレームワーク ◦ foursquareとかSiemensで使われてるっぽい 特徴 ◦ Viewを前面に出したアーキテクチャ ◦ Function Mappingによるイベントの記述  formのsubmit処理  Ajaxの実行とか ◦ Cometのサポート ◦ 脆弱性への対応 ◦ 設定はScala/DSLで記述
  7. 7.  シンプルに書ける 他言語を同時に扱う量が減る ◦ XML ◦ JavaScript Scalaの強みを生かせる ◦ 並列処理との親和性  Comet、並列レンダリング… ◦ Javaと同等のパフォーマンス ◦ コンパイル時のチェック
  8. 8. Requestとか LiftFilter主に作成する部分 View テンプレート 画面中のコンポーネントの レンダリングBoot.scala Snippet データアクセス Model
  9. 9.  ページを構成するコンポーネントの見た目 ◦ HTMLで記述 レンダリングロジックは直接記述しない ◦ 動的な部分はSnippetのメソッドへ分離 Snippetによるレンダリング適用位置の指定 ◦ タグのclass属性、接頭語lift:を用いたタグを使用 ◦ HTMLとして単体で見た目を確認できる
  10. 10. <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> lift:Snippetのクラス名.メソッド名 </div></body>
  11. 11.  コンポーネントの動的な部分のレンダリング Scalaで記述 テンプレートのタグに処理を流し込む ◦ LiftではScalaのXMLリテラルとしてテンプレートを 扱い、Snippetを処理している ◦ なので、Snippetのメソッドの戻り値型はNodeSeq  XMLノードのシーケンスの型
  12. 12. Template(抜粋)<span class="lift:HelloWorld.howdy"> <span id="time">Time goes here</span></span> id=“time”のタグの内 容を#>の右辺で置きSnippet 換えますヨ!class HelloWorld { def howdy = "#time *" #> "9:02pm"}
  13. 13. Template(抜粋)<span class="lift:HelloWorld.howdy"> <span id="time">Time goes here</span></span>Snippetclass HelloWorld { def howdy = "#time *" #> “9:02pm”}
  14. 14. Template(レンダリング後)<span class="lift:HelloWorld.howdy"> <span id="time">9:02pm</span></span>
  15. 15.  イベントにGUIDを割り当てる ◦ RequestでGUIDを受け取ると、対応する関数オブ ジェクトがサーバ側で実行される ◦ JavaScriptを生成してテンプレートに注入する関数 オブジェクトを与えるとAjaxを記述できる GUIDはセッション固有
  16. 16. object name extends RequestVar(Full(""))def form = { "#txtbox *" #> SHtml.text(name.openOr(""), v => name(Full(v))) & "#submit *" #> SHtml.submit("Send", () => {println(name.openOr(""))}) }
  17. 17. 入力文字列を受け取り、object name extends RequestVar(Full("")) nameにセットするdef form = { 無名関数 "#txtbox *" #> SHtml.text(name.openOr(""), v => name(Full(v))) & "#submit *" #> SHtml.submit("Send", () => {println(name.openOr(""))}) }
  18. 18. object name extends RequestVar(Full("")) nameの中身を取り出し、def form = { コンソールに出力する 無名関数 "#txtbox *" #> SHtml.text(name.openOr(""), v => name(Full(v))) & "#submit *" #> SHtml.submit("Send", () => {println(name.openOr(""))}) }
  19. 19. <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>
  20. 20.  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/
  21. 21. ご清聴ありがとうございました!

×