zoukankan      html  css  js  c++  java
  • Ruby 编程规范

    翻译itachi007
           个人主页http://rc.org.cn/?uid/1106
    附件为最终修订版下载.
    修订者:drive2me  http://rc.org.cn/?uid/172
    Ruby编程规约
    前言
    本规约记述的是在用Ruby进行编程时所使用的编程规约在实际项目开发的时候,推荐以此为基础,根据项目实际情况进行客户化后再使用。
    代码缩进
    为了增加程序的可读性而进行的适当的缩进,缩进的幅度以2个字符为宜。另外,缩进的时候,只可使用空格,不可使用TAB(编程工具不同的时候,看起来会不一样)
    :
    if x > 0
      if y > 0
        puts "x > 0 && y > 0"
      end
    end
    一行的字符数
    一行的字符数以80字符(半角)为宜
    用空行来区分开复数的类
    :
    class Foo
      ...
    end
     
    class Bar
      ...
    end
    误例:
    class Foo
      ...
    end
    class Bar
      ...
    end
    另外、类中的各个构成要素之间也需要用空行来隔开。但是,最初的要素之前和最后的要素之后不需要插入空行。
    :
    class Foo
      attr :bar
     
      def baz
        ...
      end
     
      def quux
        ..
      end
    end
    :
    class Foo
     
      attr :bar
     
      def baz
        ...
      end
     
      def quux
        ...
      end
     
    end
    注释
    方法的定义中不需要注释行(需要重构的地方应该加上注释)
    但是,对类、模块、或公有方法的注释要使用RDoc的风格来注释。
    :
    # コンマ区切の文字列+str+を分割し、結果を配列にして返す。
    def split_csv(str)
      return str.split(/,/)
    end
    程序结构相关的规约
    类的构成要素以下记的顺序来记述。
    1. 模块的包含
    2. 常数的定义
    3. 类变量、类实例的定义
    4. 方法的定义
    5. 属性方法的定义
    6. initialize的定义
    7. 公有实例方法的定义
    8. 保护类方法的定义
    9. 保护属性方法的定义
    10. 保护实例方法的定义
    11. 私有类方法的定义
    12. 私有属性方法的定义
    13. 私有实例方法的定义
    14. 嵌套类的定义
    属性方法的定义
    属性方法的定义中,使用attr_accessorattr_reader attr_writer (不使用attr)
    方法的定义
    方法的定义中,形参要用括号括起来。但是没有参数的时候,括号可以省略。
    :
    def foo(x, y)
      ...
    end
     
    def foo
      ...
    end
    :
    def foo x, y
      ...
    end
     
    def foo()
      ...
    end
    类方法的定义的时候要使用self
    :
    class Foo
      def self.foo
        ...
      end
    end
    :
    class Foo
      def Foo.foo
        ...
      end
    end
    调用某个方法的时候,参数要用括号括起来但是,没有参数的时候,括号可以省略。另外,printputsp的时候,也可已省略参数
    :
    foo(1, "abc")
    obj.foo(1, "abc")
    bar
    print "x = ", x, "/n"
    :
    foo 1, "abc"
    obj.foo 1, "abc"
    bar()
    一个代码块基本上使用do ... end来包括起来
    :
    foo(x, y) do
      ...
    end
     
    x = bar(y, z) do
      ...
    end
    :
    foo(x, y) {
      ...
    }
     
    x = bar(y, z) {
      ...
    }
    但是,方法链使用的时候,用{ ... }来包括起来。
    :
    s = ary.collect { |i| i.to_s }.join(",")
    :
    s = ary.collect do |i| i.to_s end.join(",")
    方法有返回值的时候必须使用return来明示另外return的括号可以省略。
    :
    def add(x, y)
      return x + y
    end
    :
    def add(x, y)
      x + y
    end
     
    def add(x, y)
      return(x + y)
    end
    yield的调用方法遵照方法的调用规则
    If语句的then可以省略另外如果是if !x的时候请用unless x来置换。但是,unless的时候不使用else还有,非常简单的条件,一行能够写下来的时候,直接使用if/while也可
    :
    if x > 0
      puts "x > 0"
    else
      puts "x <= 0"
    end
     
    unless x
      puts "x is false"
    end
     
    puts "x is true" if x
    :
    if x > 0 then
      puts "x > 0"
    end
     
    unless x
      puts "x is false"
    else
      puts "x is true"
    end
     
    puts "foo && bar && baz && quux" if foo &&
      bar && baz && quux
    能使用case请使用case省略掉then
    :
    case x
    when 1
      ...
    when 2
      ...
    end
    :
    if x == 1
      ...
    elsif x == 2
      ...
    end
     
    case x
    when 1 then
      ...
    when 2 then
      ...
    end
    不要直接使用条件分支作为代入值
    :
    if x > 0
      msg = "x > 0"
    else
      msg = "x <= 0"
    end
    :
    msg = if x > 0
            "x > 0"
          else
            "x <= 0"
          end
    循环
    While语句do省略另外while !x的时候请使用until x
    :
    while cond
      ...
    end
     
    until cond
      ...
    end
    :
    while cond do
      ...
    end
    另外无限循环的时候,使用loop
    :
    loop do
      ...
    end
    :
    while true
      ...
    end
    逻辑运算符
    逻辑运算中,使用!&&||(not/and/or不使用)
    三项运算符
    除非有明确的可读性,尽量不要使用三项运算符特别是括号等必要的条件复杂的时候跨行的时候不使用三项运算符
    字符串
    字符串基本上使用"..."的形式但是,只有在某些特殊文字的场合,使用'...'的形式另外原则上不使用“here document
    命名规约
    全体
    1. 原则上不建议使用省略的单词
    2. 作用域小的变量i, j, k等单字母,顺序使用
    3. 作用域小的变量使用类名的省略语也没有关系(: eo = ExampleObject.new)
    类以及模块名每个单词的头一个字母大写不要使用’_’(下划线)等分隔符但是HTTP这样的通用缩略语,全体大写也可。
    :
    ExampleClass 
    HTTPClient
    :
    Example_Class
    EXAMPLE_CLASS
    HttpClient
    HTTPclient
    HTTP_Client
    方法名は、全部小写各个单词之间用_分隔方法名中请使用动词的原形。
    :
    add_something
    :
    addsSomething
    Add_Something
    返回真假值的方法的命名在动词或形容词后追加?形容词的时候,不用添加is_
    :
    visible?
    :
    is_visible
    is_visible?
    另外破坏性和非破坏性的方法都提供的时候在破坏性的方法名后追加!
    :
    split
    split! # 具有破坏性的split
    常数名
    模块名以外的常数名全部用大写单词之间用_来分隔
    :
    EXAMPLE_CONSTANT
    变量名中全部用小写单词之间用_来分隔。
    :
    tmp
    local_variable
    @instance_variable
    $global_variable
    文件名
    在文件名中全部使用小写字母单词之间用_来分隔另外可以把文件中主要的类名变成小写后作为文件名来使用(把模块作为命名空间来使用的时候,同时使用目录名,可以体现出构造的阶层来。)
    :
    foo.rb # 定义了Foo
    foo-bar.rb # 定义了FooBar
    foo/bar-baz.rb # 定义了Foo::BarBaz
    Copyright (C) 2007 Shugo Maeda
    licensed under Creative Commons Attribution License
  • 相关阅读:
    【CF1194F】Crossword Expert(数学 期望)
    关于Miller-Rabin与Pollard-Rho算法的理解(素性测试与质因数分解)
    分布式架构理解(云时代架构文章读后感10)
    程序员一个充满可能的行业(云时代架构文章读后感09)
    互联网架构安全意识(云时代架构文章读后感08)
    消费金融大数据风控架构与实践(云时代架构文章读后感07)
    余额宝技术架构理解(云时代架构文章读后感06)
    弹性架构(云时代架构文章读后感05)
    Maven理解(云时代架构文章读后感04)
    对https的一些理解(云时代架构文章读后感03)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470861.html
Copyright © 2011-2022 走看看