カテゴリー別アーカイブ: Scala

Scala関西ビギナーズ 第1回 に参加しました!


前から気になっていたプログラミング言語 scala を勉強してみようということで参加してきました。
初心者向けということで、言語の特色や関数型言語の説明の後にはProject Euler (プロジェクトオイラー)という数学の問題サイトをもとにScalaに触れ合って行く感じの勉強会でした。やっぱり、勉強会で実際に実装するのは楽しかった!!!!

Scala関西ビギナーズ 第1回
開催日:2012年12月22日(土)


セッション中のメモ

  • イミュータブル(状態を変えないこと)を重要視している・・・変数(var)よりも定数(val)を

  • メソッドの引数の書き方が特殊。
    以下の2つのメソッドは同じ意味のメソッド。
    引数の2つあることを表す.カッコで引数を区切ることが出来る。

def hogeList(num: Int)(limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

def HogeList(num: Int, limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

お役立ちサイト
Courser(英語)
Scala Cookbook
hishidamaさんのブログ


ScalaのVim環境

実際にScalaを書いてみようということで、始める前の作業として、、
コンパイル言語でも僕の場合、IDEを使う程でもない時はVimを使うようにしています。まずはVimの環境ということで、シンタックスカラーと補完の設定を入れてみました。

  • Vim Scala統合環境の構築
    vim , scalaの統合環境として、vim-scala というプラグインを入れました。
vimrcに以下の内容を定義
% vim ~/.vimrc
Bundle 'derekwyatt/vim-scala'


インストールを実行
% vim 
:BundleInstall


Project Eulerの第一問を解いてみました

Project Eulerの日本語化されたサイトもあります!
Project Euler 日本語

  • 第一問
    2通りのやり方をかいてみました。
    Scalaでforループを使う方法、Rangeオブジェクトを操作する方法。
    この場合も2つ目のやり方が完結で、直感的で分かりやすいですねー

PlayFramework関西ビギナーズ in OsakanSpace 第1回に参加した


PlayFramework超初心者向け勉強会ということで、参加してきましたー

とりあえず環境構築だけでも自分でやっておこうということで、事前にhomebrewでscalaとplayFrameworkをインストールして参加しました!!

インストールはとても簡単で

% brew install scala
% brew install play

以上!!

PlayFramework関西ビギナーズ in OsakanSpace 第1回
開催日:2012/11/17

では、聞いてきた内容を自分なりに解釈して、まとめてみたいと思います。


PlayFramework1.x 初心者向け講座

@aa7th さん

JavaでのplayFrameworkの使い方の解説でした。
サンプルを動かす時にフレームワークのいろいろな方法を紹介してくださいました。
公式サイトも日本語の情報で結構ドキュメントが整っているなーって感じがしました。
公式サイト

以下は、説明中に気になったキーワードなどをまとめてみました。

【スコープの話】
・セッションスコープ、フラッシュスコープ(http://playdocja.appspot.com/documentation/2.0.3/ScalaSessionFlash)
cookieに保存される!
文字列のみしか保存できない
通常のサーバサイドアプリで使用する、サーバ側のキャッシュに保存されるセッションとは違う

・キャッシュ
サーバサイドに保存される(ファイルキャッシュ、memcachedなど)
オブジェクトを保存できる(これを利用することで通常のサーバサイドアプリで利用するセッション)

【Model層】
トランザクション管理
特にトランザクションを明示しなくても、デフォルトで、リクエスト受けて start レスポンス返す時にcommitする。(地味に便利かもしれん)
レスポンスを返すまでの間にサーバエラーなど発生したらロールバックする。

(きになったコト)
Modelでsaveとかしてもトランザクションはコミットされない?
(テストなどでは明示的にトランザクションを設定する必要があるのかな)

アノテーションにより、
バリデーション条件。
@Tables(“テーブル名”) アノテーションをクラス名につけることでクラス名と実際に生成するテーブル名を変える事ができる

*モデルに紐付かないフォーム用のバリューオブジェクトは作れるのか?

【モジュール(npm(package.json) や gem(bundler) のようなもの)】
conf/dependencies.yml に定義する
CRUDモジュール (DB管理画面を簡単に作れる。CRUDを継承してあげる)
http://playdocja.appspot.com/documentation/1.1/guide7

SECUREモジュール
  認証などのモジュール

(注意)
モジュールを入れたあとはIDE(eclipse)のclasspathをcleanする必要があるらしい。(eclipsifyコマンドを実行)


PlayFramework2.xの現状 及び 実用事例について

@mumoshuさん、 @daiksyさん

2セッション目はフリュー社のソーシャルゲームでScala,Playを利用した実例について話をしてくださいました。だいぶ話を聞いて、まとめてなかったので、今覚えている範囲で書いてみます。

【関数型言語】
手続き型と違って状態を保持しにくくなる。
変数を書き換えていくんじゃなくて、関数に入力値を与えると出力されるという考え方。
マルチスレッドでもスレッドセーフで動く。関数自体には状態がないから。

【Playを使う魅力】
ドキュメント豊富
プラグインも色々ある

【Scalaについて】
LLの動的型付けではできない型チェックによる静的型付けの言語の良い点を利用できる。
その結果、コンパイル時にケアレスミスをなくす

ScalaのORマッパー
anom
scuery
scalar-query(おすすめ)

ScalaとPlayってやっぱり面白いなー!!!
それと、PlayFrameworkのスコープの話のところは普通の考えて違っていて興味深いなーと感じた。