プログラミング備忘録

プログラミングの学習状況をメモしています

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]

自分はこうしてしまっていた。気をつけたい。