【結論】
・sendメソッドとは、レシーバーの持っている
メソッドを呼び出すメソッド
・第二引数に指定した値を
呼び出したメソッドの引数に渡す事も出来る
・呼び出したいメソッドを変数で指定して
条件分岐させる際などに有用である
【目次】
【本題】
sendメソッドについて
sendメソッドとは、
レシーバーの持っているメソッドを呼び出す為のメソッドです。
#Fruitクラスと、そのインスタンスメソッドのappleを定義する class Fruit def apple puts "2万円です" end end #Fruitクラスのインスタンスを生成する fruit = Fruit.new # レシーバであるfruitが持っているメソッドのappleを呼び出す fruit.send(:apple) => 2万円です
第二引数でメソッドの引数を指定可能
また、sendメソッドは、第二引数に値を指定すると、
呼び出したメソッドの引数に渡す事も出来ます。
#Fruitクラスと、そのインスタンスメソッドのappleを定義する class Fruit def apple(money) puts "#{money}万円です" end end #Fruitクラスのインスタンスを生成する fruit = Fruit.new # レシーバであるfruitが持っているメソッドのappleを呼び出す fruit.send(:apple, 100) => 100万円です
利用シーン
sendメソッドは、呼び出したいメソッドを
変数で指定したい場合に有用です。
class Fruit def apple puts "20円です" end def melon puts "100円です" end end fruit = Fruit.new favorite_color = "red" favorite_food = favorite_color == 'red' ? 'apple' : 'melon' # 変数でメソッドを呼び出す事が可能 fruit.send(favorite_food) => 20円です # 直接メソッドを実行する場合、変数は指定出来ない fruit.favorite_food => NoMethodError: undefined method `favorite_food'
これにより出力したい内容を条件分岐させたり、
コードを共通化させる際に役立ちます。
なお、呼び出すメソッドが決まっている場合は
記述が冗長になるので、利用は控えた方が良いと考えています。
#直接メソッドを実行する場合 fruit.apple => 2万円です # sendメソッドの場合 fruit.send(:apple) => 2万円です
参考情報
【Ruby on Rails】sendメソッドのいろんな書き方 - Qiita
《今日の学習進捗(3年以内に10000時間に向けて)》
・業務でのCKEditorの導入がひとまず完了したが、
やはり仕様を把握しきれず、ブラックボックスな箇所が多い。
リファレンスは読み込んだが、フロント周りの知識(npmやyarn)が欠けている事と
英語の読解力が足りていない事が影響していると考えている。
今回のGWは長期間なので、個人アプリ開発を行って、その中で
CKEditorを取り込んで、休み明けまでに理解を深めておきたい。
・社内の勉強会にて、TDDに概要を学んだが、実践のハードルが高いと感じた。
テストコードから書き始めるには、全体の設計を細部まで想定する必要があるが、
まだ通常の開発自体不慣れな為、手戻りが多くなる印象を受けた。
しかし利点は非常に感じたので、お勧めの書籍などを機会をみて読んで、
実際の開発に組み込むことを試してみたい。
学習開始からの期間 :140日
今日までの合計時間:1347h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:1279h
目標との解離:68h
「10,000時間」まで、
残り・・・「8653時間!」