配列オブジェクトの生成、 空のハッシュの生成、 <<メソッド
reviewApp.rb
def post_review(a_posts)
# 変数の定義
post = {} # ハッシュの生成(空)
puts "ジャンルを入力してください:"
post[:genre] = gets.chomp
puts "タイトルを入力してください:"
post[:title] = gets.chomp
puts "感想を入力してください:"
post[:review] = gets.chomp
line = "------------------------"
# レビューの描画
puts "ジャンル : #{post[:genre]}\n#{line}"
puts "タイトル : #{post[:title]}\n#{line}"
puts "感想 :\n#{post[:review]}\n#{line}"
a_posts << post # 配列オブジェクトに追加する
return a_posts # a_postsをメソッドの呼び出し元に返す(配列オブジェクトに追加されたデータを返すことになる)
end
def read_reviews(a_posts)
# リストの表示
number = 0
a_posts.each do |post|
puts "[#{number}]:#{posts[:title]}のレビュー"
number += 1
end
puts "\n見たいレビューの番号を入力してください:"
input = gets.to_i
# レビューの取得
post = a_posts[input]
# レビューの描画
line = "------------------------"
puts = "ジャンル : #{post[:genre]}\n#{line}"
puts = "タイトル : #{post[:title]}\n#{line}"
puts "感想 :\n#{post[:review]}\n#{line}"
end
def end_program
exit # プログラムを終了する
end
def exception
puts "入力された値は無効な値です"
end
posts = [] # 配列オブジェクトの生成
while true do # ループ処理
# メニューの表示
puts "レビュー数:#{posts.length}"
puts "[0]レビューを書く"
puts "[1]レビューを読む"
puts "[2]アプリを終了する"
input = gets.to_i
if input == 0 then
posts = post_review(posts) # post_reviewメソッドの呼び出し
elsif input == 1 then
read_reviews(posts) # post_reviewsメソッドの呼び出し
elsif input == 2 then # プログラムを終了する(ループの解除)
end_program # end_programメソッドの呼び出し
else
exception # exceptionメソッドの呼び出し
end
end
まとめ
- メソッド呼び出し元の引数の名前と実行されるメソッドの方の引数の名前は同じにしなくても問題なし。
- 配列オブジェクトの生成は
posts = []
とする。 - 配列オブジェクトに要素を追加するために
<<
メソッドを使う。a_posts << post
でa_posts
の中に配列の要素が追加され、それを呼び出し元に返す目的で上記コードの場合は成り立つ。(posts = a_posts
になっているため) - 空のハッシュの生成をしておくには
post = {}
と書く。 -
posts.length
のようにlength
メソッドを使えば配列オブジェクトのデータ数を取得できる。