質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

3037閲覧

Rubyで引数をkind_ofなどを使って型チェックしたほうが良いのでしょうか。

Yussa

総合スコア26

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/03/05 00:30

Rubyで引数をkind_ofなどを使って型チェックしたほうが良いのでしょうか。
Hashの場合は更にその中身も不明です。
呼び出し側で調整したほうがいいのでしょうか。

よろしくお願い致します。

Ruby

1def initialize keys={} 2 keys = {} if keys.nil? 3 #@coll = self.class.collection 4 5 #hashがRailsのPlaceクラスから来た場合:mongodbから来た場合 6 @id = keys[:_id].nil? ? keys[:id] : keys[:_id].to_s 7 8 @address_components = [] 9 acs = keys[:address_components] ||= [] 10 acs.each do |ac| 11 @address_components << AddressComponent.new(ac) 12 end 13end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ケースバイケースだと思います。

メソッド呼び出しが未定義エラーにならないようにという観点では、kind_of?ではなくて、respond_to?で、オブジェクトがそのメソッドを呼び出し可能か調べます。

Ruby

11: 2x.upcase! if x.kind_of? String 32: 4x.upcase! if x.respond_to? :upcase!

ただ、これだと、同名で無関係なメソッドを呼び出してしまう可能性があるので、確かに文字列であると判断したいときには、案1を使うことになります。

逆に、respond_to?で判断しておけば、継承関係にない別のクラスに同名の類似機能のメソッドを定義してそのクラスでも対応できることになります。この場合、kind_of?でチェックしていると修正しないと別クラスに対応できません。
例:IOクラスとStringIOクラスは無関係なクラスですが、どちらも類似のwriteメソッドを持っているので、引数にIOクラスオブジェクトを取るつもりで書いたメソッドでも、kind_of? IOというチェックをしてなければ、StringIOクラスオブジェクトを渡しても多分うまく動きます。
参考:ダックタイピング

投稿2016/03/05 13:19

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yussa

2016/03/09 04:16

有難うございます。ダックタイピングという言葉を初めて知りました。この言語を業務で使うのは未だ怖いです。都度チェックするしか無いですかね。
guest

0

一案です。
0. 作ったスクリプトは自分以外使わない。->どんな書き方でも良い。メンテナンス性も含めてHave Your Own Risk
0. クラスは自分以外の人も使う。->型チェック,エラー処理をクラス側に書いておく。なぜなら,自分以外の人がどんな引数で呼び出すかをコントロールできない。

投稿2016/03/05 10:23

NCC1701

総合スコア1680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yussa

2016/03/09 04:10

有難うございます。人のプログラムも見て見るようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問