Ruby 正在寻找清理代码的帮助

Ruby 正在寻找清理代码的帮助,ruby,architecture,Ruby,Architecture,这是一个课堂作业。我想为油炸圈饼店创建一个注册类型的应用程序。应用程序应接受“l”以列出口味,“a”以添加口味,“d”以删除口味,以及“e”以退出。价格应按升序排列。添加香精时,应先询问香精,然后询问价格 我的应用程序正在运行。它使用Jekyll(类使用的内容) 但是它比我这里的还要丑陋。我感谢你的任何意见。我感兴趣的是,为了清理,我应该做些什么,也许可以在应该做的地方添加类/方法,并使其更加Rubyesque。我会将代码更改为以下内容。这不是重构,因为它不等同于您的代码。特别是,它不像您的代码

这是一个课堂作业。我想为油炸圈饼店创建一个注册类型的应用程序。应用程序应接受
“l”
以列出口味,
“a”
以添加口味,
“d”
以删除口味,以及
“e”
以退出。价格应按升序排列。添加香精时,应先询问香精,然后询问价格

我的应用程序正在运行。它使用Jekyll(类使用的内容)


但是它比我这里的还要丑陋。我感谢你的任何意见。我感兴趣的是,为了清理,我应该做些什么,也许可以在应该做的地方添加类/方法,并使其更加Rubyesque。

我会将代码更改为以下内容。这不是重构,因为它不等同于您的代码。特别是,它不像您的代码那样不一致。例如,当它提示时,它有时不会更改行,有时也不会像代码中那样更改行;我的代码从不改变一行。我的代码也总是在操作后打印列表,这与您的代码不同,您的代码不打印列表,尤其是在添加项时。此外,与您的代码不同,它有时不以句点结束消息,有时不以句点结束消息;我的代码中的消息永远不会以句号结尾

def prompt s
  print "#{s}: "
  gets.chomp
end
def list_items
  @items.each{|k, v| puts "Flavor: #{k} - Cost: $#{v}"}
end
def sort_items
  @items = @items.sort_by{|flavor, price| price}.to_h
  list_items
end

puts "Welcome to d0nutz flavor menu"
@items = {}
loop do
  puts(
    ?= * 30,
    "(l)ist flavors",
    "(a)dd a flavor",
    "(d)elete a flavor",
    "(e)xit application",
    ?= * 30,
  )
  case prompt("Your choice")
  when ?l
    list_items
  when ?a
    @items[prompt("Enter new flavor")] = prompt("Enter cost").to_i
    sort_items
  when ?d
    @items.delete(prompt("Enter a flavor to remove")){|k| puts "#{k} not found"}
    sort_items
  when ?e
    break
  else
    puts "That is not a recognised command"
  end
end

一个提示:
division\u line='='*30
将division\u line
。在没有任何提示的情况下阅读代码程序应该做什么是没有乐趣的。塔德曼-谢谢!我不知道我真的能做到。梅尔-我补充了一点解释。对不起,您的问题不是关于编码样式(您标记的)。这是关于建筑的。哇,这是很好的输入,谢谢。我没意识到。要知道存在,这很有道理。在你的代码中有一些我还没有学会的东西,所以今晚我将对此进行研究。我真的很感谢你花时间给我展示一个更好的方法。
def prompt s
  print "#{s}: "
  gets.chomp
end
def list_items
  @items.each{|k, v| puts "Flavor: #{k} - Cost: $#{v}"}
end
def sort_items
  @items = @items.sort_by{|flavor, price| price}.to_h
  list_items
end

puts "Welcome to d0nutz flavor menu"
@items = {}
loop do
  puts(
    ?= * 30,
    "(l)ist flavors",
    "(a)dd a flavor",
    "(d)elete a flavor",
    "(e)xit application",
    ?= * 30,
  )
  case prompt("Your choice")
  when ?l
    list_items
  when ?a
    @items[prompt("Enter new flavor")] = prompt("Enter cost").to_i
    sort_items
  when ?d
    @items.delete(prompt("Enter a flavor to remove")){|k| puts "#{k} not found"}
    sort_items
  when ?e
    break
  else
    puts "That is not a recognised command"
  end
end