21日目
今日の学習
Ruby
買い物プログラム
Progateでも作成した記憶がある買い物プログラムを自力で作成。
期待通りの動きはしたものの、配列をハッシュにする等をせずにベタ打ちするという最悪の方法でプログラムを作ってしまった。
ちゃんと動いてよかったと思いつつ、解答例を見てみると真っ先に配列を作成となっており、自分のしてきた勉強がまったく活かされていない...となってしまった。打ちながらも商品名や値段が途中で変更になったら大変だよなと思ってはいた。そもそもProgateの時点で配列を使っていたのではないか。
このようなことは今回限りにしたい。
数値など、変更に融通を効かせたいものは積極的に定数で定義しておく。変更に強いプログラムになるように意識したい。
想定している値以外の入力があった場合、再入力させる
例えば、gets
メソッドで1~3の数値を受け取りたかったとする。それ以外が入力された場合は、もう一度入力し直しという繰り返し処理を作る。
while true 繰り返したい処理 break if 条件 end
この書き方に則り、もしifに続く条件がtrueであれば、処理からbreakで脱出する処理をする。
while true puts "1~3の数字を選択してください" number = gets.to_i break if (1..3).include?(number) puts "入力できるのは1~3の整数です" end
このようにすることで、1から3の数値が入力されなかった場合は、再度入力を促す形にできる。
戻り値
(https://hasegawa-note.hatenablog.com/entry/2021/05/17/224033#%E6%88%BB%E3%82%8A%E5%80%A4)[以前]、
プログラムにおける「評価」という単語も、やや理解が難しい。入力された値の計算結果という認識で合っているだろうか。
と書いたが、
やんばるエキスパート教材 | 八百屋プログラム(メソッド)part2
こちらに、
戻り値:メソッドで最後に評価された値、または式の結果の値
とあり、概ね正しかったことが分かった。以下も引用。
基本的には、メソッドの最後に評価された(end の直前に書かれた)値や式が自動的に戻り値になる
これは意識しておきたい。
今日のやらかし
ルーティングでネストさせるとき、do ... end
にするのを忘れた
いいね機能を作成しているときに、いいね関連の「そんなルーティングはない」と言われてやっと気づいた。
ルーティングを確認しても、
likes DELETE /likes(.:format) likes#destroy POST /likes(.:format) likes#create
こんな感じなので、あれ?ネスト先_likesじゃない...と思い確認したら、自分の書き方がまずかった。
resources :posts do resource :likes, only: [:create, :destroy] end
これが正しいが、
resources :posts resource :likes, only: [:create, :destroy]
自分はこうしてしまっていた。気をつけたい。