エラーが出たときに解決に向かうための心構え
エラーが出て、
エラーが出て、
エラーが出てどうしようもなくなったとき、
先輩が問題の箇所を突き止めるまでが鮮やかだったので実際に起きた手順をまとめてエラーに立ち向かう心構えとして残しておきます。
ケーススタディ
こんなコードがあったとします
class Menu
attr_accessor :name
attr_accessor :price
def info
return "#{self.name} #{self.price}円"
end
def get_total_price(count)
total_price = self.price *count
if count >= 3
total_price -= 100
end
return total_price
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
puts menu1.get_total_price(3)
1、エラー文をよく読む
上のコードを実行すると、下のエラー文が返ってきます。
〜/user/index.rb:10:in `get_total_praice`:wrong number of arguments (given 1 , expected 0 ) (ArgumentError)
〜/user/index.rb:23:in `<main>`
- エラーが起きている行の特定
- エラー内容の把握
ものによっては、親切なエラーが返ってこない場合もありますが上の2点に着目して情報が拾えるとGOODです!
今回はindex.rbファイルの10行目でArgumentErrorが、23行目でも何かエラーが起きていることがわかりました。
2,特定した情報から、仮設を立てて怪しい所を変えてみる
(given 1 , expected 0 ) (ArgumentError)
とありましたので、早速「ArgumentError]について調べてみた所、引数に関わるエラーのようでした。
1与えられているが、0が期待されている。つまり、引数に関わる
- 引数のメソッドの定義
- 引数の呼び出し
どちらかもしくは両方に誤りがあると仮定し、一度引数の表現でない記述に書き直して処理が通るか試してみました。
class Menu
attr_accessor :name
attr_accessor :price
def info
return "#{self.name} #{self.price}円"
end
def get_total_price
count = 3
total_price = self.price *count
if count >= 3
total_price -= 100
end
return total_price
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
puts menu1.get_total_price
3,仮設をもとにエラー文の変化に向き合う
すると、
〜/user/index.rb:11:in `get_total_praice`:wrong number of arguments (given 1 , expected 0 ) (ArgumentError)
〜/user/index.rb:24:in `<main>`
エラーの内容に変化はなく、但しエラーが該当する行数が10→11行、23→24行に変わりました。
該当のコードを抜き出してみると
total_price = self.price *count
puts menu1.get_total_price
ここでじっくりと問題の箇所を眺めて、問題を探します。
テキストエディタ上は色付いていて問題なさそうですが、ふと、 * の後ろにスペースがないことに気づきました。
これに気付いて直し試した所、無事正しく処理が通りました。
下記が正しいコードとなります。
class Menu
attr_accessor :name
attr_accessor :price
def info
return "#{self.name} #{self.price}円"
end
def get_total_price(count)
total_price = self.price * count
if count >= 3
total_price -= 100
end
return total_price
end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
puts menu1.get_total_price(3)
まとめ
基本的にエラーメッセージが返ってきた時、初心者にとっては完全に未知の返答である可能性が高いですが、
1,エラーメッセージ1文字1文字にきちんと向き合うこと
2,不足分は仮設を立てて検証を試し、新しいヒントを取りに行く
3,これを解決するまで繰り返す
今後エラーに立ち向かう時、心構えとして共にあらんことを。
(この考え方、姿勢を胸に勉強を続けてまいります。)
今日はこのあたりで失礼します。
Author And Source
この問題について(エラーが出たときに解決に向かうための心構え), 我々は、より多くの情報をここで見つけました https://qiita.com/morikuma709/items/19f6491418d988f39317著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .