• 検索結果がありません。

Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会

N/A
N/A
Protected

Academic year: 2021

シェア "Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会"

Copied!
48
0
0

読み込み中.... (全文を見る)

全文

(1)

Ruby 2.3 のてざ

わり

新機能と使いどころ

Kunihiko Ito

ESM 富山合同勉強会2016 2016-01-30

(2)

はじめ

まして

(3)
(4)

p self

名前: 伊藤 邦彦 出身: 富山 在住: 東京 所属: ESM アジャイル事業部 仕事: [Rails, neo4j]

(5)
(6)
(7)

From Java To Ruby

変わったこと

IDE を使わなくなった

REPLで試しながら書くようにな った

(8)

プログラムを書くときにして

いること

rails console を立ちあげる console に書いて試していく 1. ファイルに書き移していく 2. 複雑になったらテストを書く 3.

(9)

今日伝え

たいこと

(10)

Ruby お

もしろい

(11)

Ruby を

触ってみた

(12)

今日の内容

昨年の12月25日にリリースされた Ruby 2.3 の新機能とその使いどこ ろを紹介します

(13)
(14)

Ruby

2.3 新機

(15)

すぐに使える

safe navigation operator SQUIGGLY HEREDOC

(16)

使う機会が増えそう

#dig

(17)

その他

the did_you_mean gem NameError#receiver Hash#to_proc

(18)

すぐに使える

safe navigation operator SQUIGGLY HEREDOC

(19)

safe navigation

operator

別名 lonely operator ぼっち演算子

Active Support の try! と同様 の挙動

(20)

safe navigation

operator

obj = nil

obj.hoge #=> NoMethodError:

# undefined method `hoge' for nil:NilClass

(21)
(22)

&. の使いどころ

ユーザーがログインしていないとき

current_user = nil

current_user&.name #=> nil

current_user.try!(:name) #=> nil

currnet_user = User.find_by(name: 'kunitoo') current_user&.name #=> 'kunitoo'

(23)

SQUIGGLY HEREDOC

ヒアドキュメント内のインデントを 取り除く `<<~` リテラルです Active Support の strip_heredoc と同様の動きをし ます

(24)

SQUIGGLY HEREDOC

# 通常のヒアドキュメント <<-HEREDOC hoge fuga HEREDOC #=> " hoge\n\n fuga\n" # SQUIGGLY HEREDOC <<~SQUIGGLY_HEREDOC hoge fuga SQUIGGLY_HEREDOC #=> "hoge\n\nfuga\n"

(25)

SQUIGGLY HEREDOC

# strip_heredoc <<-HEREDOC.strip_heredoc hoge fuga HEREDOC #=> "hoge\n\nfuga\n" # SQUIGGLY HEREDOC <<~SQUIGGLY_HEREDOC hoge fuga SQUIGGLY_HEREDOC #=> "hoge\n\nfuga\n"

(26)

SQUIGGLY_HEREDOC の

使いどころ

簡易なメッセージやQueryのテン プレートとして使う

(27)

SQUIGGLY_HEREDOC の

使いどころ

def calc_billin

query = <<~SQL

INSERT INTO bills (name, total)

SELECT name, sum(amount)AS total

FROM orders JOIN ... WHERE ... SQL

ActiveRecord::Base.connection.execute(query) end

(28)

使う機会が増えそう

#dig

(29)

#dig

追加されたクラス Array Hash Struct OpenStruct 深い階層にある値を取得するこ とができる

(30)

#dig

a = [[1, 2], [3, 4]]

a.dig(0, 1) #=> 2

a.dig(1, 2) #=> nil

h = {foo: {bar: 1}}}

(31)

#dig

dig メソッドを持つオジェクトであ れば、交ざっていても使えます user ={ user:{ address:[ {name:'富山市', ruby:'とやまし'}, {name:'呉羽町', ruby:'くれはまち'} ] } }

user.dig(:user,:address,1,:name)#=> "呉羽町"

(32)

#dig の使いどころ

JSON の値の取得

Hash の値に Array がある場合 request paramter

(33)

#dig の使いどころ

(0..1).map {|index|

user.dig(:user, :address, index, :name) } #=> ["呉羽町", nil]

(34)

Enumerable#grep_v

Enumerable#grep のマッチの条 件を逆にして、pattern === item が成立 しない要素を全て含ん だ配列を返します (1..10).grep_v 2..5 # => [1, 6, 7, 8, 9, 10]

(35)

正規表現クイズ

Bob, John, Jahn の中から Jo から 始まる名前以外を抽出するには? ^[^Jo] 1. ^[^J][^o] 2. ^(?!Jo) 3.

(36)

こたえ

3. ^(?!Jo)

names.grep /^[^Jo]/ #=> ['Bob']

names.grep /^[^J][^o]/ #=> []

(37)

Enumerable#grep_v の

使いどころ

Enumerable#grep では逆の条件 が書きづらいときや型情報を使うと き

['Bob', 'John', 'Jahn'].grep_v /^Jo/ #=> ["Bob", "Jahn"]

(38)

the did_you_mean gem

did_you_mean gem がバンドル されるようになりました。 NameError と NoMethodError の発生時、デバッグを容易にするた め、正しい名前と思われる候補を合 わせて表示します。

(39)

the did_you_mean

gem の使いどころ

irb や rails console でお世話にな ります。自信のないスペルでも調べ なくてもよくなります。

(40)

the did_you_mean

gem の使いどころ

'hello'.revarse

# => NoMethodError: undefined method `revarse' for "hello":String # Did you mean? reverse

# reverse!

'str'.encodeing

# => NoMethodError: undefined method `encodeing' for "str":String # Did you mean? encoding

# encode # encode!

(41)

NameError#receiver

NameError が発生した時のレシー バオブジェクトを返します begin 'abc'.foo rescue => e p e.receiver end #=> 'abc'

(42)

NameError#receiver の

使いどころ

module DidYouMean

class VariableNameChecker ... snip ...

def initialize(exception)

@name = exception.name.to_s.tr("@", "")

@lvar_names = exception.local_variables receiver = exception.receiver

@method_names = receiver.methods + receiver.private_methods @ivar_names = receiver.instance_variables

@cvar_names = receiver.class.class_variables

@cvar_names += receiver.class_variables if receiver.kind_of?(Module)

end

end end

(43)

NameError#receiver の

使いどころ

デバッグするときに呼び出し元のオ ブジェクトそのものを取得できる

(44)

Hash#to_proc

self に対応する Proc オブジェク トを返します。

(45)

Hash#to_proc の使いど

ころ

(46)

その他

frozen string literal

(47)

まとめ

Rails に存在した &. や HEREDOC はすぐに使えそう #dig や grep_v は意識していれ ば、使えるところがありそう Hash#to_proc はだれか使いど ころおしえてください

(48)

Enjoy

Ruby

参照

関連したドキュメント

それでは資料 2 ご覧いただきまして、1 の要旨でございます。前回皆様にお集まりいただ きました、昨年 11

ㅡ故障の内容によりまして、弊社の都合により「一部代替部品を使わ

「新老人運動」 の趣旨を韓国に紹介し, 日本の 「新老人 の会」 会員と, 韓国の高齢者が協力して活動を進めるこ とは, 日韓両国民の友好親善に寄与するところがきわめ

高(法 のり 肩と法 のり 尻との高低差をいい、擁壁を設置する場合は、法 のり 高と擁壁の高さとを合

荒天の際に係留する場合は、1つのビットに 2 本(可能であれば 3

○○でございます。私どもはもともと工場協会という形で活動していたのですけれども、要

この P 1 P 2 を抵抗板の動きにより測定し、その動きをマグネットを通して指針の動きにし、流

モードで./していることがわかります。モータの インダクタンスがÑnˆきいので、 2 Íの NXT パ ルスの'k (Figure 18 のºˆDWをk) )