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 }
次回からはクロージャとかの説明に入る。
理解を深めたい部分であります。