惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
Y
Y Combinator Blog
V
V2EX
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
B
Blog
G
Google Developers Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
N
Netflix TechBlog - Medium
腾讯CDC

博客园 - 不再年轻.NET

PHP 面向对象技术(全面讲解) 入门级PHP程序员面试题 VS 2008 and .NET 3.5 Beta 2 Released (转) 股市与广告(转) 相声文本《我是黑社会》--郭德纲、于谦 股票与幽默 - 不再年轻.NET - 博客园 武林外传之炒股风波 武林外传经典对话大全(转) 简洁、明晰!数据库设计三大范式应用实例剖析 计算机程序设计课程教学之我见 探索CSS实现三行三列等高布局 Div+CSS布局入门教程(转) 夺取月薪之冠-Oracle认证 数据库设计中的14个技巧 关于SQLServer的若干注意事项 数据库设计三大范式应用实例剖析(天极网) 脱离 Rails 看 Ruby Borland,一路走好 VB光环褪去 Java、C/C++/C#成编程主流(CSDN)
Ruby编程规范
不再年轻.NET · 2007-11-11 · via 博客园 - 不再年轻.NET

源代码的整形

代码缩进
为了增加程序的可读性而进行的适当的缩进,缩进的幅度以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_accessor、attr_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

方法调用
调用某个方法的时候,参数要用括号括起来。但是,没有参数的时候,括号可以省略。另外,print、puts、p的时候,也可已省略参数。
正例:
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) {
  ...
}

但是,方法链使用的时候,用{ ... }来包括起来。([color = red]我觉得这里应该是当块代码写一行的时候用{})
正例:
s = ary.collect { |i| i.to_s }.join(",")
误例:
s = ary.collect do |i| i.to_s end.join(",")
return
方法有返回值的时候、必须使用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
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