2021年2月28日に書いた記事でございます~
detectについて理解していきましょう!
さてさてやっていきましょう!
detectの英語の意味を調べた
detect:見つける、気付く、検波する
という意味らしいです。
つまり、detectメソッドを使うと
何かを見つけたり、気付いたりすることが
できそうです!
detectを使ってみた
array_numbers = [1, 2, 3, 4, 5]
p array_numbers.detect{|number| number % 2 == 0}
p array_numbers
array_words = ["あ","い","う"]
p array_words.detect{|word| word == "う"}
p array_words.detect{|word| word === "い"}
p array_words
実行結果
2
[1, 2, 3, 4, 5]
"う"
"い"
["あ", "い", "う"]
最初に数字の配列を用意しました。
そしてdetectメソッドを使い、2で割り、余りが0の物を探した結果、
integer型の2が返ってきました。
そのあとにarray_numbersを確認すると、値はもとのままです。
非破壊的メソッドですね!
integer型の4の値は取ってきませんでした。
このメソッドは最初に気付いた要素のみを取ってくるようです。
次に文字の配列を用意しました。
そして「う」を探したり、「い」を探しても
戻ってくるのはString型でした!
配列ではなく、要素の型を返してくるわけですね!
まったく同じ動作をするメソッドを紹介
findでーす!
array_numbers = [1, 2, 3, 4, 5]
p array_numbers.find{|number| number % 2 == 0}
p array_numbers
array_words = ["あ","い","う"]
p array_words.find{|word| word == "う"}
p array_words.find{|word| word === "い"}
p array_words
実行結果
2
[1, 2, 3, 4, 5]
"う"
"い"
["あ", "い", "う"]
はい、同じですね。
もし資格の試験などで
detectと同じ働きをするメソッドは?
と、聞かれたら、findと元気よく答えましょう!
detect!で実行してみた
array_numbers = [1, 2, 3, 4, 5]
p array_numbers.detect!{|number| number % 2 == 0}
p array_numbers
実行結果
undefined method `detect!' for [1, 2, 3, 4, 5]:Array (NoMethodError)
Did you mean? detect
はい、「!」をつけて「detect!」を実行すると、
「”detect!” なにそれ?そんなメソッドないよ! detectのこと?」
と言われました~優しい親切。
まとめ
- detectは英語で「見つける、気づく」という意味!
- 非破壊メソッド!「!」を付けたらノーメソッドエラー!
- 複数の該当要素のうち、最初の要素の値を取ってくる!
- findメソッドと同じ働きをする!
以上、detectを理解しよう!でした!
RubySilverに挑戦した
Ruby Silverに挑戦したお話はこちらからどうぞ。