Ruby編程中的命名風格指南_ruby專題

來源:互聯網
上載者:User

用英語命名標識符。

  

 # 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的形式給變數和方法命名。

   

 # 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)

    

# 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給常量命名。

 

  # bad  SomeConst = 5  # good  SOME_CONST = 5

    在表示判斷的方法名(方法返回真或者假)的末尾添加一個問號(如Array#empty?)。
    方法不返回一個布爾值,不應該以問號結尾。

    可能會造成潛在“危險”的方法名(如修改 self或者 參數的方法,exit! (不是像 exit 執行完成項)等)應該在末尾添加一個驚嘆號如果這裡存在一個該 危險 方法的安全版本。

   

 # 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)。

  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)。

  #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 (<< 與 [] 是這條規則的例外,因為它們的語義不同)。

  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 以外的對象將會迭代整個集合來
    決定它的尺寸。

 

  # 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 會將整個數組變平坦。

  # bad  all_songs = users.map(&:songs).flatten.uniq  # good  all_songs = users.flat_map(&:songs).uniq

    使用 reverse_each 代替 reverse.each。reverse_each 不會分配一個新數組並且這是好事。

  # bad  array.reverse.each { ... }  # good  array.reverse_each { ... }


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.