Ruby 发个同事 (一直搞 java) 刚刚写的代码,看看坑有多少

ane · 2014年05月26日 · 最后由 zw963 回复于 2014年06月07日 · 3539 次阅读

刚刚从天津搬到北京,好累,先发段代码,让大家帮忙查查错。继续搞之前的问题。

class Text

  def demo(_score,_data)
    if _score < 60
      puts "不及格"
    elsif 60 <= _score <= 80
      puts "良好"
    else
      puts "优秀"
    end

    unless _score < 90
      puts "三好生"
    else
      puts "要好好努力"
    end

    case _data
      when "星期一": puts "今天是星期一"
      when "星期二": puts "今天星期二"
      when "星期三": puts "今天星期三"
      when "星期四": puts "今天星期四"
      when "星期五": puts "今天星期五"
      else
        puts "今天周末"
      end
  end

end

哪里冒出来的_data?

你是忍受不了 _name 这种命名方式么?我觉得它挺好的,而且 rails 里也有 @_name 这种方式的变量。

eslif 的确不好,也不方便理解,when...case..是最佳选择。

unless .... else ... end

的阅读感极差!!!

#1 楼 @pynix sorry,我试着跑程序来着,所以有点修改

#2 楼 @liwei78 我想在 pry 中加载这个类,如何处理啊

#2 楼 @liwei78 在 ruby 里下划线开头的变量表示后面的程序不会用到,乱用会给人错觉的

#4 楼 @ane

require './text.rb'

or

require_relative 'text.rb'

elsif 60 <= _score <= 80 这样写可以? when "星期一": piuts "今天是星期一" 这里的 puts 写错了吧

  1. Ruby 是不存在 60 <= _score <= 80 这样的表达的,事实上,这里只需要用 _score <= 80 就行了
  2. when 语句不能用冒号分隔,用 then 或者 分号。
  3. 形参 _score 都拼错了。。。

下划线需要去掉。这条函数接受的是外部参数,下划线会引起混淆。即使是在 Rails 里面,下划线的变量也是少数,代表给库用的而一般不给用户使用。

任何程序,写成一串when "星期一": piuts "今天是星期一"都是该批评的。

简单一点可以这样

return puts puts "今天周末" if data == "星期六“ || data == ”星期天“
puts ”今天#{data}“

另一个问题是,即使是 demo, 输出的几个部分都毫不相干。应该分成几个函数。

#8 楼 @fanyange 能用冒号 1.9 以后就被废除了而已

_data 应该是 _date ?

同事之间要互相帮助,每个人的习惯都不一样,一起齐头并进👍

#12 楼 @501225658 墙裂认同。东北话讲:laowo(乌鸦)落在猪身上,看见别人黑看不见自己黑。。。。。嘿嘿嘿。。。。

大哥,你知足了吧。好歹人家中间还有空行。以前的人家写个文件,一个方法几百行不带空行的。

看到 unless ... else ...直接打脸。:trollface:

官方风格指导里推荐 case when 垂直对齐

case
when song.name == 'Misty'
  puts 'Not again!'
when song.duration > 120
  puts 'Too long!'
when Time.now.hour > 21
  puts "It's too late"
else
  song.play
end

终于明白楼主的险恶用心了,我还居然认真地回复了。原来楼主的潜在含义是想说他自己技能很强。

#17 楼 @billy ...一脸黑,你怎么解读出的这个意思?

#17 楼 @billy 以上的问题,我都是会犯的,写个帖子,让大家指出来,好学习学习啊

@ane 开个玩笑的。

  1. 60 <= _score <= 80 竟然可以通过? Ruby 不是 Python, 应该不支持这种形式.
  2. 既然会用 Ruby 里面的 case, 根本不应该有那个 elseif, if 和 else 条件可以合二为一, 变成一个 case.
  3. unless 通常不会和 else 一起用.
  4. 一个方法里三个条件.... 应该拆分为小方法. ruby def demo(_score, _date) a = meth1(_score) b = meth2(_score) c = meth3(_date) puts a,b,c end

#21 楼 @zw963 "60 <= _score <= 80 "肯定通不过。 第 4 个里拆分我表示不是很赞同,一个 demo 里嵌套方法多了的话,感觉可读性太差,我还得到处找这个具体 meth1 干什么事了。除非a = meth1(_score) #每个都加个注释 。公司现在的代码就有这样的问题,作为新人的我,看的压力好大

写这水平的 dev 月薪多少?

#23 楼 @hxplove01 人家一直是 java dev 业余 ruby

#23 楼 @hxplove01 准确来说是写安卓的,被我拉来写 ruby

#22 楼 @ane

  1. 如果方法名足够好, 方法名就是注释. 你不需要看更多细节.
  2. 你该有一个好的代码浏览工具了. 例如: TAGS 或 干脆用 RubyMine.

#26 楼 @zw963 TAGS 是何物,求进一步普及

Google 下 ctags, 如果仅仅用 Ruby 的话, 有更好的, 叫做: ripper-tags.

就是为所有的方法建立一个索引, 这个索引文件按照惯例, 叫做 TAGS, 大多数编辑器都支持使用 TAGS 文件来方便的定位一个方法的位置.

需要 登录 后方可回复, 如果你还没有账号请 注册新账号