2012-05-18 73 views
3

拿樣品紅寶石代碼,如何重寫/縮進它以便下面的紅寶石代碼,使其更具可讀性&確保它適合於一行,即80-90chars?如何讓這個ruby代碼更具可讀性?

%w(survey survey_section question_group question dependency dependency_condition answer answer_type answer_validity validation validation_condition validation_prefix validation_precludes error error_type error_level error_code style style_info style_override user user_model_name user_type).each {|m| require m } 

閱讀它是很痛苦的,因爲我在這個代碼庫中有很長的數組。它需要橫向滾動&的LOT我不喜歡

什麼辦法可以改善嗎?

+1

這類問題會做http://codereview.stackexchange.com/更好 –

回答

8

%w按空白進行分割,所以你可以插入,只要你想換行,並得到相同的結果:

dependencies = %w(survey survey_section question_group question 
    dependency dependency_condition answer answer_type answer_validity 
    validation validation_condition validation_prefix 
    validation_precludes error error_type error_level error_code 
    style style_info style_override user user_model_name user_type) 

dependencies.each {|m| require m } 
2

到@derekerdmann是如何做到的一樣,我威力使用:

%w[ 
    survey    survey_section  question_group  question 
    dependency   dependency_condition answer    answer_type 
    answer_validity  validation   validation_condition validation_prefix 
    validation_precludes error    error_type   error_level  error_code 
    style    style_info   style_override  user 
    user_model_name  user_type 
].each { |m| require m } 

使用Align插件,在Vim中使用這種包裝和對齊很簡單。

但更可能的是,我把所有需要到一個單獨的文件,並要求它,就像使用一個包含文件下,在一堆其他的包含文件來拉。在這種情況下,他們仍然被加載,但他們看不見。所以,在requirements.rb文件我有:

require 'answer' 
require 'answer_type' 
require 'answer_validity' 
require 'dependency' 
require 'dependency_condition' 
require 'error' 
require 'error_code' 
require 'error_level' 
require 'error_type' 
require 'question' 
require 'question_group' 
require 'style' 
require 'style_info' 
require 'style_override' 
require 'survey' 
require 'survey_section' 
require 'user' 
require 'user_model_name' 
require 'user_type' 
require 'validation' 
require 'validation_condition' 
require 'validation_precludes' 
require 'validation_prefix' 

在我的主代碼文件我有require_relative './requirements'

或者,我會名單分成更容易管理的分組,如按字母順序:

%w[ answer answer_type answer_validity ].each { |r| require r } 
%w[ dependency dependency_condition ].each { |r| require r } 
%w[ error error_code error_level error_type ].each { |r| require r } 
%w[ question question_group ].each { |r| require r } 
%w[ style style_info style_override survey survey_section ].each { |r| require r } 
%w[ user user_model_name user_type ].each { |r| require r } 
%w[ validation validation_condition validation_precludes validation_prefix ].each { |r| require r } 

它不是幹,因爲我想,但它更有組織性和可讀性。

+0

我喜歡所有的需要聲明的例子。這實際上不是DRY違規行爲,而且它不僅易於閱讀,而且易於更改。例如,如果你想添加'error_location',你最後一個例子的第三行可能會變得太長,你必須重新組織,而前面的例子中,你可以添加一行。掃描也很容易,因爲您只需沿一個軸移動。 –

+0

喜歡中間示例的好理由。當第一個字母改變時,可能會將列表分開,通過在上面和下面放置一個空行來幫助更多。 –