主页 > 知识库 > 网络编程 > Ruby >

Ruby 编程风格介绍(6)

来源:ruby-china 作者:网络 发表于:2012-06-20 09:50  点击:
有关RE集合[...], 他们只有以下几个特殊关键字值得注意: ^, -, \, ] , 所以, 不要在集合中, 转义 . 或者 [ , 他们是正常字符. 注意, ^ 和 $ , 他们匹配行首和行尾, 而不是一个字符串的结尾, 如果你想匹配整个字符串
  • 有关RE集合[...], 他们只有以下几个特殊关键字值得注意: ^, -, \, ], 所以, 不要在集合中, 转义.或者[, 他们是正常字符.
  • 注意, ^$, 他们匹配行首和行尾, 而不是一个字符串的结尾, 如果你想匹配整个字符串, 用\A和\E. (译者注, A和Z分别为英文的第一个和最后一个字符)
    string = "some injection\nusername"
    string[/^username$/]   # matches
    string[/\Ausername\Z/] # don't match
    
  • 使用x修饰符来匹配复杂的表达式, 这将使得RE更具可读性, 你可以添加一些有用的注释.
    注意, 所有空格将被忽略.
    regexp = %r{
     start # some text
     \s # white space char
     (group) # first group
     (?:alt1|alt2) # some alternation
     end
    }x
    
  • gusb和sub也支持哈希以及代码块形式语法, 可用于复杂情形下的替换操作.
  • 百分号

  • 应该大量的使用%w.
  • 应该使用%()的方式, 来定义需要字符串插值以及包含"符号的单行字符串.多行字符串, 尽量使用here doc格式. (译者注: 我好喜欢%()的方式, 可能是%()比%{}写起来方便的缘故)
    # bad (no interpolation needed)
    %(<div class="text">Some text</div>)
    # should be '<div class="text">Some text</div>'
    
    # bad (no double-quotes)
    %(This is #{quality} style)
    # should be "This is #{quality} style"
    
    # bad (multiple lines)
    %(<div>\n<span class="big">#{exclamation}</span>\n</div>)
    # should be a heredoc.
    
    # good (requires interpolation, has quotes, single line)
    %(<tr><td class="name">#{name}</td>)
    
  • 使用%r的方式定义包含多个/符号的正则表达式.
    # bad
    %r(\s+)
    
    # still bad
    %r(^/(.*)$)
    # should be /^\/(.*)$/
    
    # good
    %r(^/blog/2011/(.*)$)
    
  • 尽量避免%q, %Q, %x, %s, 和%W.
  • 优先使用()作为%类语法格式的分隔符.(译者注, 本人很喜欢%(...), 不过Programming Ruby中, 显然更喜欢使用%{}的方式)
  • 元编程

    • 在写自己的库时, 不要进行不必要的元编程(例如修改核心库, 不需要给他们猴子补丁).

    杂项

    • 总是打开Ruby -w开关. 应该写没有警告提示的代码.
    • 通常情况下, 尽量避免使用哈希作为方法参数. (此时应该考虑这个方法是不是功能太多?)
    • 避免一个方法内容超过10行代码, 理想情况下, 大多数方法内容应该少于5行.(不算空行)
    • 尽量避免方法的参数超过三个.
    • 有时候, 必须用到全局方法, 应该增加这些方法到Kernel模块.
    • 尽可能使用类实例变量代替全局变量. (译者注:是类实例变量, 而不是类的实例变量. 汗~~)
      #bad
      $foo_bar = 1
      
      #good
      class Foo
        class << self
          attr_accessor :bar
        end
      end
      
      Foo.bar = 1
      
    • 尽可能的使用alias_method 代替 alias.
    • 使用OptionParser来解析复杂的命令行选项, 较简单的命令行, -s参数即可处理.
    • 按照功能来编写方法, 当方法名有意义时, 应该避免方法功能被唐突的改变.
    • 避免不需要的元编程.
    • 除非必要, 避免更改已经定义的方法的参数.
    • 避免超过三级的代码块嵌套.
    • 应该持续性的遵守以上指导方针.
    • 尽量使用(生活中的)常识. (译者注: 这应该是编程的最高境界?)

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%