Hamamatsu.rb #61

作成日:2016/02/12
最終更新日:2020/07/09

Hamamatsu.rb #61

作成日:2016/02/12
最終更新日:2020/07/09

概要

やったこと

新規参加

  • 新規参加者
    • hagitaさん
    • edaさん

LT

  • 自己紹介

    • hagitaさん
    • 普段はwindows
    • twilloに興味があるらしい
  • Curses

    • Langur
  • 実用的Rubyスクリプティング

    • @es_chuuiさん
    • cursesの使いかたも載っている
    • Ruby/TKいかが?
  • SHOES

    • mobius_bkstさん
    • GUIツールキット
    • Whyの人が作ったらしい
      • 感動的Rubyガイド

RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか

  • @ke_tachibanaさんのメモ

    • ruby-first.md
    • slackで共有
  • tryでblockも渡せる

    • Ruby2.3以降は&.演算子で代用可能
    • 以下はnilならば値を代入する例
ソース1. try文でblockも渡せる
upper_case = user.name.try { |name| name.upcase } || 'No Name'
obj.name && obj.name.upcase
  • Rubyは&& || は左辺が実行されないと右辺が実行されないことが保証される
  • メソッドの戻り値を返すときにreturnを使わない
    • returnを書くのは制御を明示したいとき
    • 以下の例ではUser objectが返る
ソース2. メソッドの戻り値を返すときにreturnを使わない
def build_user
  User.new.tap do |user|
    user.email = "hoge@hoge.com"
    user.name = "Taro Yamada"
  end
end
  • nil

    • to_s
      • 'nil'
    • to_a
      • []
    • to_h
      • {}
    • to_i
      • 0
  • %

    • %r ... 正規表現
      • 後続するセパレータはたいていの記号が使える
      • {}, [], ||, .. ...etc
    • %w ... 配列の自動生成
  • array.map(&:attr)は何が起こっているのか?

    • &を使うことでブロックを呼び出せる
    • &付き引数がprocオブジェクトでなければto_procを呼びProcに変換される
ソース3. array.map(&:attr)は何が起こっているのか?
class MyFunc
  def to_proc
    -> {puts 'called!'}
  end
end

def foo
  yield
end

func = MyFunc.new
foo(&func)

[1].map(&:to_s)
[1].map {|i| i.to_s}
[1].map {|i| to_s.to_proc.call(i)}
  • nilが配列化を区別せずにArray()として処理する
ソース4. nilが配列化を区別せずにArray()として処理する
Array.wrap(1)
(users || []).each #入力が曖昧なときにこうやると良い
                   #eachが実装されていないオブジェクトに対してエラーを見つけられる
  • 数値リテラルを_で区切っても同じ値として扱われる
ソース5. 数値リテラルを_で区切っても同じ値として扱われる
1_00_00
10000
  • 値オブジェクトの作り方

    • attr_attribute
    • OpenStruct
      • hashをarrayに変換
  • 多重代入

    • 要素の順番に意味のある配列は別々の変数で受け取る
    • ハッシュをeachで回した時にブロックが受け取る引数も同じ
ソース6. 多重代入
a, b = 14.divmod(3) # 14.divmod(3)は配列で値を返す
=> a = 4, b = 2
  • 配列の連結に+でなく*(splat)を使う
ソース7. 配列の連結に+でなく*(splat)を使う
numbers = [1, 2, 3]
numbers_with_zero_and_100 = [0, *numbers, 100]
=> [0, 1, 2, 3, 100] # numbersが展開される
numbers_with_zero_and_100 = [0, numbers, 100]
=> [0, [1, 2, 3], 100]
  • nilだったら代入する
ソース8. nilだったら代入する
i == nil
i ||= 1
  • ハッシュのキーは文字列ではなくシンボルを使う

    • 簡潔だし速い
  • Rubyは例外を投げるのではなくエラーを投げる

    • 一度rescueからraiseしたあとに再度raiseできる
  • size - 1ではなくマイナスのインデックスで最後の文字や要素を指定する

  • 配列の便利なメソッドを使って簡略化する

    • find(最初の要素)
    • select(条件に合うものをすべて返す)
    • count(条件に合う要素の数を返す)
  • 残りは各自で勉強する

感想

  • 途中で置いて行かれました
    • 復習します
  • 以前Paizaのコードを書いている時に勉強したはずのメソッドを忘れていました
  • slideshareで初めてslideを公開しました
    • 今後は公開していきたいと考えています
  • 反省会での要望
    • Raspberry PiでRubyを使ったLチカ
    • スライドの配色が暗く怖かった

次回

  • 3/9(水) 19:00〜