9月28日に開催されたRuby勉強会@札幌-27に参加しました。
場所は産業振興センター(直前まで、東区民センターだと思っていました。危なかった….)。
発表が2つと、「初めてのRuby」の読み合わせを行いました。
PumaでSinatraアプリを動かす
米沢さんによる発表。
Sinatraは、1年くらい前に仕事で「Ruby on RailsのアプリをSinatraに書き直す」というのをやったなあ(結構辛かったなあ)というのを思い出しました。
PumaというWebサーバーは初めて聞きました。
ライブコーディング(ライブトラブルシューティング)で、周りが色々なアドバイスをしながら進んでいきました。gistはこちらになります。
勉強会のすぐ後に「Sinatra札幌」を発足しています。見習いたいスピード感。
もっとはじめる Ember.js !!
りゅうのすけさんの発表。[資料]
画面遷移があまりないすごい(リッチな)アプリケーションを作るためのフレームワークであるEmber.js。
コミュニティや世界観がRubyのコミュニティとよく似ているそうです。
- 特徴
- 必ず必要になる処理をサポート
- 協力な命名規約
- オブジェクトと表示のバインド – handlebars
- 便利な仲間
- ember-rails -Asset PipeLine 強力
- ember-middleman – ember-railsとできる事は似てる
- hamlbars – hamlで記述できる
- emblem-rails -jade風
- Ember Data – 魔改造ブーム
- テストしたい – Poltergeist
- PhantomJSのCapybara driver
- JSのdebuggerが使える
自分の手元には、チュートリアルを途中までやったangular.jsのサンプルコードがあるのだけれど、サンプルが面白そうなのでEmber.jsの写経やってみよう。
いろいろなクライアントMVCのソースコードが確認できるToDo MVCを教えてもらったのですが、これすごい!!!
お二人とも、発表できる事があって、きちんと発表されていて、すごいなあと思いました。
見習っていきたい。まだまだ修行が足りないなあ。
初めてのRuby読み合わせ
今回は「7.2.2 多値の返却」から「7.3 ブロック付きメソッド(7.3.1の前)」まででした。
多値の返却:
- 縦と横を返す sizeとかだと使える
- tuppleがある言語だと割と自然 – tuppleがないから仕方なく配列にしているのではないか?
> def some_method(a) > return a, 1, 2, 3 > end #=> nil > some_method(7) #=> [7, 1, 2, 3] > a, b, *c = *some_method(1) #=> [1, 1, 2, 3] > a #=> 1 > b => 1 > c #=> [2, 3]
デフォルト値:
あると便利な場面が多い。RailsのHelperでたくさん出てきた思い出がある。
> def some1(a, b, c=1)
> "this: " + a.to_s + b.to_s + c.to_s
> end
#=> nil
> some1(1,2,3)
#=> "this: 123"
> some1('a','b')
#=> "this: ab1"
Rubyでは末尾以外、複数のデフォルト値を設定できる。これはちょっとわかりにくい。
> def some2(a, b=1, c=2, d)
> "this: " + a.to_s + b.to_s + c.to_s + d.to_s
> end
#=> nil
> some2(1,2,3,4)
#=> "this: 1234"
> some2('a','b','c')
#=> "this: ab2c"
> some('a','b')
#=> "this: a12b"
可変長引数:
Javaでこれ出てきたとき便利だったなあー
> def some3(a=1, *b) > b.each do |i| > p a * i > end > end #=> nil > some3(10,1,2,3,4) 10 20 30 40
可変長引数が引数の末尾じゃないのは気持ち悪い
> def some4(a, *b, c) > p [a,b,c] > end #=> nil > some4(1,2,3,4,5,6,7,8,9) [1, [2, 3, 4, 5, 6, 7, 8], 9] #=> [1, [2, 3, 4, 5, 6, 7, 8], 9]
これらはエラー
> def some3(a, *b, *c, d)
> p[a,b,c,d]
> end
SyntaxError: syntax error, unexpected *
def some3(a, *b, *c, d)
^
syntax error, unexpected ')', expecting '='
syntax error, unexpected keyword_end, expecting end-of-input
> def some3(a, *b, c=3)
> p [a,b,c]
> end
SyntaxError: (irb):44: syntax error, unexpected '=', expecting ')'
def some2(a, *b, c=3)
^
Javaだと、どういう挙動をするんだったかなあと確認。
可変長引数はパラメータの末尾じゃないとだめ。
// 通常の形
public void test1(int a, String... strings) {
// do something
}
// コンパイルエラー
// The variable argument type String of the method test1 must be the last parameter
public void test1(int a, String... strings, int b) {
// do something
}
次回からはクロージャとかの説明に入る。
理解を深めたい部分であります。