Как уменьшить число иерархических, если отчетность'


<% @descriptions.each_with_index do |description, i| %>
  <% description.tale2.each do |tax_ref| %>            
    <% if condition %>              
      <% if condition %>
        <% if condition %>                  
          <%= $text_first_describe%> <%= $paren_author_yr %>
             <% ref_sp_uniq.each_with_index do |ref, i| %>
               <% if ref == tax_ref.ref_wo_brace%>
                  <% execution %>                      
               <% elsif i == (ref_sp_uniq.size - 1)%>
                  <%# @ref_desc = "#{@ref_desc_numb}. #{tax_ref.ref_wo_brace}" %>
               <% end %>
             <% end %>
          <% if condition %>
                  <% execution %>                      
          <% elsif condition %>
            <% execution %>
          <% elsif taxon_name.emend_author_year %>                    
             <%= print %>
          <% else %>                    
             <%= print %>                    
          <% end %>
        <% end %>
      <% else %>
        <% if condition %>
          <%= print %>
          <% ref_sp_uniq.each_with_index do |ref, i| %>
             <% if condition %>
                <% execution %>                      
             <% elsif condition %>
                  <% execution %>                      
             <% end %>
          <% end %>
          <% if condition %>
            <% execution %>                      
          <% elsif condition %>
            <% execution %>                      
          <% elsif condition %>
            <% execution %>                      
          <% else %>
            <% execution %>                      
          <% end %>
        <% end %>
      <% end %>
    <% end %>
  <% end %>        
<% end %>


990
1
задан 1 февраля 2011 в 09:02 Источник Поделиться
Комментарии
4 ответа

В общем, можно попробовать поменять условия на внешней, если заблокировать, и работать ваш путь внутрь. Часто результатом этого становится меньше вложенность, например:

if condition1
if condition2
#ifblock
else
#elseblock2
end
else
#elseblock
end

Внутри цикла, как у вас есть код, он станет это м, что меньше вложенных:

if !condition
#elseblock
next
end
if !condition2
#elseblock2
next
end
#ifblock

6
ответ дан 1 февраля 2011 в 03:02 Источник Поделиться

Вещь, чтобы попробовать: оператор Case

case tax_ref
when a then execution1
when b then execution2
end

http://www.tutorialspoint.com/ruby/ruby_if_else.htm

2
ответ дан 2 февраля 2011 в 04:02 Источник Поделиться

Почему вы не можете использовать операторы || и && ?

я не совсем грамотный с синтаксисом, но вы должны быть в состоянии преобразовать:

<% if condition %>            
<% if condition %>
<% if condition %>
<% end %>
<% end %>
<% end %>

в:

<% if condition && condition && condition %>
<% expression %>
<% end %>

Глядя на документы данного логического выражения доступны!

также удаление идентификаторов языка вы должны уметь делать:

<%
if condition && condition && condition
expression
end
%>

Когда дело доходит до еще, если'S, то вы можете увеличить читаемость делая переключатель:

Главное-убрать не так необходимо <% и %> в местах.

http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html#and

2
ответ дан 2 февраля 2011 в 08:02 Источник Поделиться

Есть несколько вещей, которые вы должны сделать с этим шаблоном, и шаблоны, которые выглядят так в общем:


  1. Сломать некоторые элементы в частных производных.

  2. Толкать логику в модель. Вместо

     <% if condition with model %>
    stuff
    <% else %>
    other stuff
    <% end %>

    когда вещество или другое вещество строки с небольшой или никакой разметки, не

     <%= model.display_for_condition %>

  3. Использовать помощников для таких случаев, как 2) где вещей которые будут отображаться есть разметки:

     <% condition_helper(model.condition?) %>

  4. Использовать объекты телеведущий, особенно когда имеешь дело с логикой отображения, который ссылается более чем одной модели.

  5. Наиболее абстрактно, но самое главное, чтобы научиться писать код с меньшим количеством операторов if, усвоить одно из ключевых различий между стилем ОО-процессуальный кодекс стиля: с ОО вы спросите объекты, чтобы делать вещи, которые они умеют делать. Если вы окажетесь всегда задавать объекты для получения информации и решить, что делать с ним, вы используете объекты не более чем структуры и писать процедурный код.

    Или как мой стажер описал его в другой день: (это стало одной из моих любимых цитат о программировании)



если вы все чешется-это нормально брать быка за рога, но это было бы странно поцарапать чужие чешется.

2
ответ дан 5 февраля 2011 в 11:02 Источник Поделиться