SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
try!�から�.?�へ
(#11537)
表参道.rb#6
東京糸井重⾥事務所さま
2015-11-04
伊藤�浩⼀�(@koic)
(株)永和システムマネジメント
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
About�Me
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Come�and�Join�Us
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Today's�Topic
Safe�navigation�operator✓
Ruby�2.3.0�に⼊る有⼒な�
Language�Changes�のひとつ
最新の情報は�https://bugs.ruby-
lang.org�などをご参照ください
✓
✓
[2015.11.06追記]�まだ議論
中の内容を取り扱っており、記
法など変わる可能性があります
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
2.3.0-dev
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Safe�navigation�
operator
obj.?foo�という呼び出し⽅
で、Active�Support�の�try!�
に似た振る舞いをする
obj.try!�{}�相当のブロック付き呼び
出しはできないなど違いはある
✓
✓
.�のバリエーションとして
の�.?�と捉えると良さそう
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Other�Languages
Groovy�や�Swift,�C#�6.0�に相
当の機能があるらしい�(風聞)
✓
他の⾔語の�?.�と�.?�は似てい
る?
✓
Ruby�ではメソッド名の最後
に�?�を付けられるため�?.�は使
えず�?.
他の⾔語と逆なので注意✓
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
どう書く?
上がActive�Supportのtry!で、
下がSafe�navigation�operator
✓
������������������
������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Railsむかし話
Safe�navigation�operator�の
振る舞いは�try!�の⽅に似てる
Rails�4�で�try�の動きが変わって�
try!�が導⼊されている
✓
Rails�3�の�try�をアンラーニングさ
れず�(?)�、名残りで�try�を使ってい
るコードをちらほら
✓
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
try�と�try!�(Rails�3)
try!�メソッドはそもそも存在せず
���������������
�����������
�������������������������������
������
��������������������������������
���������������������������������������������������������������������
��������������������������������
�������������������������������������������������������
���������������������������������
������������������������������������������������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
try�と�try!�(Rails�4)
try�メソッドの振る舞いは変わる
���������������
����������
�������������������������������
������
��������������������������������
������
��������������������������������
������
���������������������������������
���������������������������������������������������������������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Safe�navigation�
operator
Rails�3�の�try�あるいは�Rails�4�
の�try!�に似た感じになる
��������������
����������
��������������������������
������
���������������������������
���������������������������������������������������������������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Active�Support�による�
try�のおさらい
Rails�4�での�Active�Support�
のコードを⾒てみましょう
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Rails�4�での�try�の実装
���������������
��������������������������������������������������
���
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
try�の実装を⾒て
条件に⼀致しない場合は�nil�が
返る。つまり�respond̲to?�に
反応するメソッドがなければ�
nil�が返る
✓
つまりレシーバに対応するメソ
ッドがあってもなくても動く
✓
それを期待していることはあま
りないのでは?
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Rails�4�での�try!�の実装
����������������
�����������������������������
��������������������
�����������������������
��������
����������������
�������
������
�����������������������
�����
���
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
try!�の実装を⾒て
try�と異なり�respond̲to?�は
⾒ていないので、メソッドがな
ければエラーになる
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
あれ?(⼀瞬分からなくなる)
try!�はレシーバに存在しないメ
ソッド呼び出しをしたらエラー
になる
✓
nil�への対応のはずなのに、nil�
にないメソッドを呼んだらエラ
ーになるよね?
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Method#source̲locatio
n�を使った解析
メソッドの定義場所が違うらしい
�����������������������������������
����������������������������������������������������
����������������������������������
����������������������������������������������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
nil�専用の�try�実装
try.rb�にレシーバ�nil�専用の振る舞
いがある
��������������
����������������
�������
�����
�����������������
�������
�����
���
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
まとめ
上がActive�Supportのtry!で、
下がSafe�navigation�operator
✓
������������������
������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
考えられる移⾏
期待しているメソッドが存在し
ている前提で戻り値が�nil�の場
合を想定しているケースにおい
て、大体の場合は�try�ではな
く�try!�が良さそう
✓
obj.try!(:foo)�で良い場所は�
obj.?foo�に置き換えてけそう
✓
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
Safe�navigation�
operator�を試してみよう
�����������������������
try!�から�.?�へ�(#11537) Powered�by�Rabbit�2.1.8
To�be�continued...
https://bugs.ruby-lang.org/
issues/11537
✓
https://github.com/ruby/
ruby
✓
https://github.com/rails/
rails
✓

Mais conteúdo relacionado

Mais de Koichi ITO

Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動Koichi ITO
 
アプリがパッチにまみれたら
アプリがパッチにまみれたらアプリがパッチにまみれたら
アプリがパッチにまみれたらKoichi ITO
 
Stairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails ProgrammerStairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails ProgrammerKoichi ITO
 
最軽の開発手法 dX 改
最軽の開発手法 dX 改最軽の開発手法 dX 改
最軽の開発手法 dX 改Koichi ITO
 
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれからRailsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれからKoichi ITO
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Koichi ITO
 
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステムKoichi ITO
 
俺の開発日誌
俺の開発日誌俺の開発日誌
俺の開発日誌Koichi ITO
 
ghq gem-src and more
ghq  gem-src and moreghq  gem-src and more
ghq gem-src and moreKoichi ITO
 
俺たちの新人教育!!
俺たちの新人教育!!俺たちの新人教育!!
俺たちの新人教育!!Koichi ITO
 
スローテスト刑事 (デカ)
スローテスト刑事 (デカ)スローテスト刑事 (デカ)
スローテスト刑事 (デカ)Koichi ITO
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web DevelopmentKoichi ITO
 
RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術Koichi ITO
 
開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作りKoichi ITO
 
Motivationware
MotivationwareMotivationware
MotivationwareKoichi ITO
 
達人プログラマーへの道
達人プログラマーへの道達人プログラマーへの道
達人プログラマーへの道Koichi ITO
 
Let's get ready for next Ruby
Let's get ready for next RubyLet's get ready for next Ruby
Let's get ready for next RubyKoichi ITO
 
プロの無職についての考察:序
プロの無職についての考察:序プロの無職についての考察:序
プロの無職についての考察:序Koichi ITO
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜Koichi ITO
 

Mais de Koichi ITO (20)

Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動
 
アプリがパッチにまみれたら
アプリがパッチにまみれたらアプリがパッチにまみれたら
アプリがパッチにまみれたら
 
Stairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails ProgrammerStairway to The Pragmatic Rails Programmer
Stairway to The Pragmatic Rails Programmer
 
最軽の開発手法 dX 改
最軽の開発手法 dX 改最軽の開発手法 dX 改
最軽の開発手法 dX 改
 
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれからRailsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
 
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
 
俺の開発日誌
俺の開発日誌俺の開発日誌
俺の開発日誌
 
ghq gem-src and more
ghq  gem-src and moreghq  gem-src and more
ghq gem-src and more
 
俺たちの新人教育!!
俺たちの新人教育!!俺たちの新人教育!!
俺たちの新人教育!!
 
スローテスト刑事 (デカ)
スローテスト刑事 (デカ)スローテスト刑事 (デカ)
スローテスト刑事 (デカ)
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web Development
 
RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術RubyKaigi 2015 の Drinkup を支える技術
RubyKaigi 2015 の Drinkup を支える技術
 
開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り開発時の探し物を楽にする習慣作り
開発時の探し物を楽にする習慣作り
 
Motivationware
MotivationwareMotivationware
Motivationware
 
達人プログラマーへの道
達人プログラマーへの道達人プログラマーへの道
達人プログラマーへの道
 
Let's get ready for next Ruby
Let's get ready for next RubyLet's get ready for next Ruby
Let's get ready for next Ruby
 
職と人
職と人職と人
職と人
 
プロの無職についての考察:序
プロの無職についての考察:序プロの無職についての考察:序
プロの無職についての考察:序
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 

Safe navigation operator in Ruby