脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Ruby - Ruby编程中的命名风格指南

Ruby编程中的命名风格指南

2020-05-04 12:25脚本之家 Ruby

这篇文章主要介绍了Ruby编程中的命名风格指南,包括变量和自定义方法等的常用命名格式,需要的朋友可以参考下

用英语命名标识符。

  

?
1
2
3
4
5
6
7
8
# bad - identifier using non-ascii characters
 заплата = 1_000
 
 # bad - identifier is a Bulgarian word, written with Latin letters (instead of Cyrillic)
 zaplata = 1_000
 
 # good
 salary = 1_000

    使用snake_case的形式给变量和方法命名。

   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# bad
 :'some symbol'
 :SomeSymbol
 :someSymbol
 
 someVar = 5
 
 def someMethod
  ...
 end
 
 def SomeMethod
  ...
 end
 
 # good
 :some_symbol
 
 def some_method
  ...
 end

    Snake case: punctuation is removed and spaces are replaced by single underscores. Normally the letters share the same case (either UPPER_CASE_EMBEDDED_UNDERSCORE or lower_case_embedded_underscore) but the case can be mixed

    使用CamelCase(駝峰式大小寫)的形式给类和模块命名。(保持使用缩略首字母大写的方式如HTTP,
    RFC, XML)

    

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# bad
  class Someclass
   ...
  end
 
  class Some_Class
   ...
  end
 
  class SomeXml
   ...
  end
 
  # good
  class SomeClass
   ...
  end
 
  class SomeXML
   ...
  end

    使用 snake_case 来命名文件, 例如 hello_world.rb。

    以每个源文件中仅仅有单个 class/module 为目的。按照 class/module 来命名文件名,但是替换 CamelCase 为 snake_case。

    使用SCREAMING_SNAKE_CASE给常量命名。

 

?
1
2
3
4
5
# bad
SomeConst = 5
 
# good
SOME_CONST = 5

    在表示判断的方法名(方法返回真或者假)的末尾添加一个问号(如Array#empty?)。
    方法不返回一个布尔值,不应该以问号结尾。

    可能会造成潜在“危险”的方法名(如修改 self或者 参数的方法,exit! (不是像 exit 执行完成项)等)应该在末尾添加一个感叹号如果这里存在一个该 危险 方法的安全版本。

   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# bad - there is not matching 'safe' method
 class Person
  def update!
  end
 end
 
 # good
 class Person
  def update
  end
 end
 
 # good
 class Person
  def update!
  end
 
  def update
  end
 end

    如果可能的话,根据危险方法(bang)来定义对应的安全方法(non-bang)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Array
 def flatten_once!
  res = []
 
  each do |e|
   [*e].each { |f| res << f }
  end
 
  replace(res)
 end
 
 def flatten_once
  dup.flatten_once!
 end
end

    当在短的块中使用 reduce 时,命名参数 |a, e| (accumulator, element)。

?
1
2
3
4
5
6
7
8
9
#Combines all elements of enum枚举 by applying a binary operation, specified by a block or a symbol that names a method or operator.
# Sum some numbers
(5..10).reduce(:+)              #=> 45#reduce
# Same using a block and inject
(5..10).inject {|sum, n| sum + n }      #=> 45 #inject注入
# Multiply some numbers
(5..10).reduce(1, :*)             #=> 151200
# Same using a block
(5..10).inject(1) {|product, n| product * n } #=> 151200

    在定义二元操作符时,把参数命名为 other (<< 与 [] 是这条规则的例外,因为它们的语义不同)。

?
1
2
3
def +(other)
 # body omitted
end

    map 优先于 collect,find 优先于 detect,select 优先于 find_all,reduce 优先于inject,size 优先于 length。以上的规则并不绝定,如果使用后者能提高代码的可读性,那么尽管使用它们。有押韵的方法名(如 collect,detect,inject)继承于 SmallTalk 语言,它们在其它语言中并不是很通用。鼓励使用 select 而不是 find_all 是因为 select 与 reject 一同使用时很不错,并且它的名字具有很好的自解释性。

    不要使用 count 作为 size 的替代。对于 Enumerable 的 Array 以外的对象将会迭代整个集合来
    决定它的尺寸。

 

?
1
2
3
4
5
# bad
some_hash.count
 
# good
some_hash.size

    倾向使用 flat_map 而不是 map + flatten 的组合。
    这并不适用于深度大于 2 的数组,举个例子,如果 users.first.songs == ['a', ['b', 'c']] ,则使用 map + flatten 的组合,而不是使用 flat_map 。
    flat_map 将数组变平坦一个层级,而 flatten 会将整个数组变平坦。

?
1
2
3
4
5
# bad
all_songs = users.map(&:songs).flatten.uniq
 
# good
all_songs = users.flat_map(&:songs).uniq

    使用 reverse_each 代替 reverse.each。reverse_each 不会分配一个新数组并且这是好事。

?
1
2
3
4
5
# bad
array.reverse.each { ... }
 
# good
array.reverse_each { ... }

延伸 · 阅读

精彩推荐
  • RubyRuby进行文件信息输出实例代码

    Ruby进行文件信息输出实例代码

    Ruby进行文件信息输出实例代码,数据是随机的,所以每次的记录都会不同。 ...

    ruby教程网2962020-04-10
  • RubyRuby环境下安装使用bundler来管理多版本的gem

    Ruby环境下安装使用bundler来管理多版本的gem

    这篇文章主要介绍了Ruby环境下安装使用bundler来管理多版本的gem的方法,举了Ruby On Rails中的应用实例来进行演示,需要的朋友可以参考下 ...

    日拱一卒4332020-05-10
  • Ruby简要说明Ruby中的迭代器

    简要说明Ruby中的迭代器

    这篇文章主要介绍了Ruby中的迭代器,迭代器的概念在动态语言的编程中十分重要,文章中介绍了Ruby中的each迭代器和collect迭代器,需要的朋友可以参考下 ...

    goldensun2772020-04-25
  • RubyRuby迭代器的7种技巧分享

    Ruby迭代器的7种技巧分享

    这篇文章主要介绍了Ruby迭代器的7种技巧分享,Ruby中的迭代器非常人性化,本文既是讲解了7个技巧也是讲解了7种迭代器,需要的朋友可以参考下 ...

    脚本之家4782020-04-20
  • RubyCentOS中配置Ruby on Rails环境

    CentOS中配置Ruby on Rails环境

    经过一个上午的折腾,终于把ROR环境在CentOS中搞定,绕了很多弯路,把文章写下来总结一下 ...

    可乐加糖4762020-04-12
  • RubyRuby设计模式编程中使用Builder建造者模式的实例

    Ruby设计模式编程中使用Builder建造者模式的实例

    这篇文章主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表...

    范孝鹏2192020-05-07
  • Ruby剖析 Ruby 访问控制

    剖析 Ruby 访问控制

    前面,我们说 Ruby 没有函数,只有方法.而且实际上有不止一种方法.这一节我们介绍 访问控制 (accesscontrols). 想想当我们在最高层而不是在一个类的定义里定义...

    ruby教程网3572020-04-08
  • RubyRuby简洁学习笔记(一):字符串、数字、类和对象

    Ruby简洁学习笔记(一):字符串、数字、类和对象

    这篇文章主要介绍了Ruby简洁学习笔记(一):字符串、数字、类和对象,本文是学习笔记第一篇,需要的朋友可以参考下 ...

    脚本之家2472020-04-20