2012-05-18 2 views
3

Возьмите образец рубинового кода, как его переписать/отложить, чтобы следующий код рубина, чтобы сделать его более читаемым & убедитесь, что он вписывается в одну строку i.e 80-90chars?Как сделать этот рубиновый код более удобочитаемым?

%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 } 

Обтекание и выравнивание, как это делается в Vim, с использованием плагина Align.

Но, скорее всего, я поместил все требования в отдельный файл и потребовал бы его, подобно использованию файла include в C, чтобы вытащить кучу других включенных файлов. В этом случае они все еще загружаются, но они скрыты из виду. Так, в 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 } 

Это не так DRY, как хотелось бы, но это более организованным и читаемым.

+0

Мне нравится ваш пример со всеми операторами запроса. На самом деле это не СУЩЕСТВЕННОЕ нарушение, и его читать не просто: его легко изменить. Если вы хотите добавить 'error_location', например, третья строка вашего последнего примера, вероятно, будет слишком длинной, и вам придется реорганизовать, тогда как в более раннем примере вы можете просто добавить строку. Это также намного проще для сканирования, потому что вам нужно двигаться только по одной оси. –

+0

Хорошие причины для удовлетворения среднего примера. Вероятно, разделение списка по мере того, как меняется первая буква, пустая строка сверху и снизу поможет еще больше. –

Смежные вопросы