`
Hooopo
  • 浏览: 335273 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruby Style Guide

    博客分类:
  • Ruby
阅读更多
原则:
引用
Make it Work, Make it Clean, Make it Fast (if necessary)

1.方法名
全部小写,并且用下划线分开
DO THIS:
def calculate_person_data_usage_history_start_date()  
end

NOT THIS:
Date calculatePersonDataUsageHistoryStartDate() {} 

DO THIS:
def active?
end

def attribute=(name)
end

class T
attr_reader :attribute
attr_accessor :attr
end

NOT THIS:
def is_active
end

def set_attribute
end

def get_attribute
end

此处省略若干字...

2.条件控制
Fine:
x = active? ? 3 : 5

Better:
x = if active? then 3 else 5 end


很长的表达式:
x = if a_really_long_boolean_function
    then a_long_true_value
    else a_long_false_value
    end

x = if a_really_long_boolean_function
      a_long_true_value
    else
      a_long_false_value
    end


Better:
def assign_x
  if a_really_long_boolean_function
    a_long_true_value
  else
    a_long_false_value
  end
end

x = assign_x


if语句后置
Better:
return if x.nil?

Better:
unless logged_in?
  do_something_for_unlogged_in_requests
end

不推荐:
until,while,当然unless里面有else也不推荐
3.习惯用法(推荐)
||= as in, @user ||= User.find(params[:id])

&&= as in, @user.name &&= @user.name.downcase

x.nil? rather than x == nil
x.empty? rather than x.size == 0 — in Rails x.blank? is preferred.

4.链式调用
all_users.select(&:is_active).map(&:name).sort

ruby很容易写出这样长的链式调用,太长了还是分开写好...
当然写个脚本到无所谓。
5.And and or or && and ||(99%的时候||&&是你想要的)
x = y || z
x = (y || z)


x = y or z
(x = y) or z

大多数时候我们想要的是上面的形式..

5.begin rescure end语句
Better:
def sample_method
  do_something
rescue
  raise Exception
end

Ps;在方法中可以省去前面的begin和后面的end,这样显得clean多了。

6.默认参数
def(x, a = 3, b = nil)

等号前后有空格。

7.每行80字符,缩进2字符
a_very_long_method_name(argument1,
    a + b, arg_3)

当然这个如果用hash做参数会写的更漂亮。

8.摆脱括号

个人觉得括号没什么不好,反倒是有时候省略括号总会出现warning,很烦,干脆全用括号了。
分享到:
评论
17 楼 jetthink 2009-09-04  
下划线的命名规则明显更加符合人的阅读习惯,用了一段时间后,明显感觉能提高效率。
其他多数语言都是pascal和camel规则,看起来太累。
不得不赞一下ruby是code for fun
16 楼 Xorcerer 2009-08-13  
King.Arthur 写道
丑陋的日本人,丑陋的Ruby代码,丑陋的Ruby代码的end尾巴!

前面2/3我就不作评论了,不过最后1/3,你的面杀伤也太大了吧。
15 楼 King.Arthur 2009-07-28  
丑陋的日本人,丑陋的Ruby代码,丑陋的Ruby代码的end尾巴!
14 楼 check 2009-07-28  
关于end,linus torvalds曾经说过:

If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.

    * Linux 1.3.53 CodingStyle documentation. Retrieved on 2006-08-28.

我个人认为90%的情况下end多了是个逻辑思维的问题,而不是排版问题。剩下的确实不好改变的情况,花点时间看看也不是大问题。Python也是,缩进多了不好看,但是合适的代码本来就不应该有那么多缩进
13 楼 jinleileiking 2009-07-27  
icefishc 写道
RednaxelaFX 写道
Hooopo 写道
night_stalker 写道
5 应该有支持的,不过至今都在手动对齐 ……

长度相差太大就算了,相差小的对齐一下(可能是强迫症 ……)

找到了......这个可能算是完美主义者的癖好..


嗯我也是习惯手动对齐的,很自然的就打了一堆空格 OTL
def initialize
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @log.level = AppConfig.log_level           || Logger::INFO
  yield self if block_given?
end


手动对齐是一种很不人道的事情......
尤其是在修改代码时 如果需要加入一个名字很长的变量 那原先的语句也需要重新对其
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @balablabala = ...... #  :s 

自动对齐的插件很多 还是找一个吧.


netbeans有这个功能么?radrail也行
12 楼 jinleileiking 2009-07-27  
Hooopo 写道
引用
8.看见这堆 end 会很郁闷,分不清哪个是 end 哪个的:
Ruby代码
        end 
      end 
    end 
  end 
end 


看过有人这样写的:

 
        end#end of ...  
      end#end of ...  
    end#end of each  
  end#end of method  
end#end of class  



00后的IDE都可以支持看到哪个end对应哪个if

话说

if ()
{
} /* end if ....*/

if

end #end of if

估计是C科班出身的。likes me。
而且习惯用sourceinsight
11 楼 jinleileiking 2009-07-27  
calculate_person_data_usage_history_start_date() 
cal_person_data_usage_hist_start_date()
10 楼 RednaxelaFX 2009-07-24  
icefishc 写道
手动对齐是一种很不人道的事情......
尤其是在修改代码时 如果需要加入一个名字很长的变量 那原先的语句也需要重新对其
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @balablabala = ...... #  :s 

自动对齐的插件很多 还是找一个吧.

嗯,说得没错。确实是在稍微改动之后都要重新对齐。所以之前读一个关于Standard ML的style guide里面就反对等号对齐的做法。
不过我那些对齐也是review的时候才往里加的就是了,最初写代码的时候不会打那么多空格的
9 楼 icefishc 2009-07-24  
RednaxelaFX 写道
Hooopo 写道
night_stalker 写道
5 应该有支持的,不过至今都在手动对齐 ……

长度相差太大就算了,相差小的对齐一下(可能是强迫症 ……)

找到了......这个可能算是完美主义者的癖好..


嗯我也是习惯手动对齐的,很自然的就打了一堆空格 OTL
def initialize
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @log.level = AppConfig.log_level           || Logger::INFO
  yield self if block_given?
end


手动对齐是一种很不人道的事情......
尤其是在修改代码时 如果需要加入一个名字很长的变量 那原先的语句也需要重新对其
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @balablabala = ...... #  :s 

自动对齐的插件很多 还是找一个吧.
8 楼 RednaxelaFX 2009-07-24  
Hooopo 写道
night_stalker 写道
5 应该有支持的,不过至今都在手动对齐 ……

长度相差太大就算了,相差小的对齐一下(可能是强迫症 ……)

找到了......这个可能算是完美主义者的癖好..


嗯我也是习惯手动对齐的,很自然的就打了一堆空格 OTL
def initialize
  @user      = AppConfig.user
  @password  = AppConfig.password
  @log       = Logger.new AppConfig.log_file || STDOUT
  @log.level = AppConfig.log_level           || Logger::INFO
  yield self if block_given?
end
7 楼 Hooopo 2009-07-24  
引用
9.空间可以提升阅读的舒适感,适当的时候得多空一几行,多空一几格。


会写RDoc就更完美了。


class CGI

  # :stopdoc:

  # String for carriage return
  CR  = "\015"

  # String for linefeed
  LF  = "\012"

  # Standard internet newline sequence
  EOL = CR + LF

  REVISION = '$Id: cgi.rb 12340 2007-05-22 21:58:09Z shyouhei $' #:nodoc:

  NEEDS_BINMODE = true if /WIN/ni.match(RUBY_PLATFORM) 

  # Path separators in different environments.
  PATH_SEPARATOR = {'UNIX'=>'/', 'WINDOWS'=>'\\', 'MACINTOSH'=>':'}

  # HTTP status codes.


6 楼 Hooopo 2009-07-24  
night_stalker 写道
5 应该有支持的,不过至今都在手动对齐 ……

长度相差太大就算了,相差小的对齐一下(可能是强迫症 ……)

找到了......这个可能算是完美主义者的癖好..

某lib:



      if name.kind_of?(Hash)
        values   = name["VALUES"]
        size     = name["SIZE"].to_s if name["SIZE"]
        multiple = name["MULTIPLE"]
        name     = name["NAME"]
      else
        size = nil
        multiple = nil
      end



PS:貌似也是手动的........后面那两个显然没对齐,哇咔咔
5 楼 Hooopo 2009-07-24  
引用
8.看见这堆 end 会很郁闷,分不清哪个是 end 哪个的:
Ruby代码
        end 
      end 
    end 
  end 
end 


看过有人这样写的:

 
        end#end of ...  
      end#end of ...  
    end#end of each  
  end#end of method  
end#end of class  

4 楼 night_stalker 2009-07-24  
5 应该有支持的,不过至今都在手动对齐 ……

长度相差太大就算了,相差小的对齐一下(可能是强迫症 ……)
3 楼 Hooopo 2009-07-24  
night_stalker 写道
个人推荐风格:



1和4最近一直在用。
      @mail.author.link.icon.should ==\
        "http://t.douban.com/icon/u1057620-20.jpg"

        @table[:link] ||= OpenStruct.new
        @table[:link].
          __send__("#{link.attributes['rel']}=", link.attributes['href'])


5是编辑器支持的吗,不过觉得如果语句长度相差很大这种对齐效果也不是很好。

6我就遇到过在A编辑器上格式良好,在B编辑器格式变乱的情况。原来可以把tab展成空格啊........


2 楼 night_stalker 2009-07-24  
个人推荐风格:

1.子句太长了可以用 \ 换行,换行后缩进 2 格
kill you \
  until you.are dead


2.推荐使用 unless 而不是 if not 或者 if !,这样可以省去很多括号 ……

3. ? : 如果太长,可以这样排版(本人已经很少写 if else end 了 ……)
test ?
  true_clause  :
  false_clause ;


4.我喜欢这样把链调用分行 ……
one.
two.
three.
four rescue nil


5.多行相似语句的关键符号尽量对齐!美观很重要!如下面的 =>
/ie8/        => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
/win.*ff/    => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5',
/win.*moz.*/ => 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6',


6.设置编辑器把所有 tab 都展成空格,这样在其它编辑器里都有一致的观感。

7.可以这么理解: and or 是连词, && 和 || 是逻辑运算符
sit down and watch tv if true || false

sit down && watch tv # => 语法错误!


8.看见这堆 end 会很郁闷,分不清哪个是 end 哪个的:
        end
      end
    end
  end
end

所以嵌套不要太深,深了分离出子 routine 或者想个法子减少连续的 end 系列。减少嵌套的一个方法:
def m1
  if xxx
    ...
  end
end

改成
def m1
  return if xxx
  ...
end

ps:_why 的 potion 用 . 代替 end,写起来比较搞笑
.....


9.空间可以提升阅读的舒适感,适当的时候得多空一几行,多空一几格。

10.宽 80 字符是上个世纪的限制了 …… 某些时候超出 80 字符是没办法的事情,勉强换行会变丑的 ……

11.命名的经验:
  多次出现的标识符以言简意赅为上(定义处补个详细说明的注释),
  出现得少的或者生存期很长的以详尽清楚为上。

诗体的崇拜者奉上 …… [ 1.9 就不警告括号的事了 ] …… 有空研究下怎么关掉警告。
1 楼 deng131 2009-07-24  
很好的推荐写法。

相关推荐

    Ruby-Style-Guide-ruby.zip

    Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_ruby.zip Ruby_Style_Guide_...

    Ruby编程,实用程序员指南Programming Ruby, The Pragmatic Programmer's Guide

    - **风格指南**:遵循社区公认的代码风格指南,如《The Ruby Style Guide》。 - **测试驱动开发(TDD)**:编写测试用例,确保代码质量和稳定性。 - **持续集成(CI)**:自动化构建和测试流程,提高团队协作效率。 ###...

    ruby-style-guide:社区驱动的Ruby编码风格指南

    《Ruby编码风格指南》是社区驱动的一份重要资源,它为Ruby程序员提供了统一的编码规范和最佳实践。这份指南旨在提升代码的可读性、可维护性和团队协作效率。Ruby是一种灵活而富有表达力的编程语言,但也因此可能导致...

    Ruby-Ruby样式指南带有linter和自动代码修复程序

    Ruby社区有许多流行的代码风格指南,如《Ruby Style Guide》和《Rails Style Guide》。这些指南提供了关于命名约定、缩进、空格、注释、代码结构等方面的指导。例如,它们可能会建议使用两个空格进行缩进,避免长行...

    ruby trap 初学者使用

    - 遵循Ruby社区广泛接受的编码规范,如Ruby Style Guide,有助于写出更易读、易维护的代码。 9. **闭包和上下文**: - 理解闭包(块、Proc、Lambda)如何捕获并保持其定义时的上下文,特别是对变量的引用,是避免...

    类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范

    Ruby社区有一套广泛接受的编码风格指南,即《Ruby Style Guide》。其中的一些关键点包括: 1. 使用两空格进行缩进,而不是制表符。 2. 方法定义和参数之间使用两个空格。 3. 避免行尾的分号,除非需要在一行内定义...

    Ruby-GitCop强制执行一致的Git提交

    GitCop可以检查提交的代码是否遵循如Ruby Style Guide这样的社区标准,确保代码的可读性和一致性。 3. **原子性**:GitCop还可以确保每次提交都是原子性的,即每次提交只包含一个逻辑上的更改,这样有助于避免因为...

    Ruby程序设计.rar

    10. **代码组织**:Ruby中的文件组织、命名约定以及如何编写可读性高的代码,包括代码风格指南(如Ruby Style Guide)的推荐。 通过深入学习和实践文档中的内容,你将能掌握Ruby的核心概念,并具备编写高效、可维护...

    Apress.Practical.Ruby.Projects.Dec.2007.eBook-BBL.rar

    最后,为了帮助读者更好地理解Ruby社区和生态系统,书中可能包含了一些开源文化、代码风格指南(如Ruby Style Guide)以及最佳实践的介绍,鼓励读者积极参与到开源项目中,提升自身的编程水平。 总而言之,《Apress...

    Ruby-Barkeep友好的代码评审系统

    2. **代码风格检查**:通过遵循特定的编码规范(如Ruby Style Guide),Barkeep可以帮助团队保持一致的代码风格,提高代码可读性和可维护性。 3. **复杂性度量**:Barkeep可以计算函数或方法的Cyclomatic复杂度,这...

    Ruby Best Practices

    - 遵守社区共识的Ruby Style Guide,保证代码风格一致。 - 使用Rubocop等静态代码分析工具检查代码风格和潜在问题。 10. **性能优化** - 学习并理解Ruby的内存管理和垃圾回收机制,避免不必要的对象创建。 - ...

    ruby-style-guide:俄语版:社区驱动的Ruby编码风格指南

    Ruby Style Guide包含了多个方面的编码规范,例如: 1. **命名约定**:变量、方法、类和模块的命名应清晰易懂,遵循snake_case或camelCase,取决于其类型。常量使用ALL_CAPS。避免使用单字母变量名,除非在循环中。...

    拉取请求最佳实践的简单建议列表_Ruby_下载.zip

    4. **遵循代码风格**:在Ruby项目中,应遵循社区普遍接受的代码风格,如Ruby Style Guide。确保你的代码与现有代码风格一致,减少不必要的样式讨论。 5. **测试覆盖**:添加或更新测试以确保更改不会引入新的错误。...

    多个语言的编程规范学习

    Ruby社区有著名的"Ruby Style Guide",它建议使用两空格缩进,使用snake_case命名变量和方法,以及保持代码的DRY(Don't Repeat Yourself)原则。此外,还强调了代码的简洁性和表达性。 9. **Swift编程规范** ...

    hologram-github-theme, 一个用于全息图的Github Styleguide启发主题.zip

    hologram-github-theme, 一个用于全息图的Github Styleguide启发主题 全息图Github主题这是一个非常简单的Github Styleguide 灵感主题,它是用于trulia全息图的主题,它是 ruby 前端doc生成器。预览 视图示例 style...

    ruby-jogging:ruby 的每日提交

    10. **代码风格和最佳实践**:遵循Ruby的编码规范(如Ruby Style Guide)和最佳实践能帮助写出更清晰、更易于维护的代码。 通过参与Ruby Jogging,你将有机会系统地学习和巩固这些知识点,并通过实际操作提升编程...

    styleguide:Ombu Labs优雅风格指南

    OmbuLabs :: StyleGuide Ruby on Rails安装(作为宝石) 将此行添加到您的应用程序的Gemfile中: gem 'ombulabs-styleguide' 然后执行: $ bundle 或将其自己安装为: $ gem install ombulabs-styleguide 用法 ...

    ruby-practice:Ruby和Ecosystem的实践资料库

    9. **代码质量和风格**:Ruby有其自己的编码风格指南,如Ruby Style Guide,实践中可能包含如何遵循这些指南以提高代码可读性和一致性。 10. **社区资源**:Ruby拥有活跃的社区,如Stack Overflow、Ruby Weekly、...

    gem-check:宝石检查

    标签中的“ruby styleguide”指的是Ruby编码规范,它是指导开发者编写一致、可读性强的Ruby代码的一系列规则和最佳实践。遵循风格指南有助于团队协作,提高代码质量。 “gems hacktoberfest”可能意味着这个项目...

Global site tag (gtag.js) - Google Analytics