Ruby勉強会@札幌-27に参加しました

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
}

次回からはクロージャとかの説明に入る。
理解を深めたい部分であります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください