2016-04-23 6 views
1

Лучше проверить условие один раз, определить переменные, а затем использовать эти переменные?Лучше ли определять переменные условия или использовать переменные и проверять условие каждый раз?

<c:if test="${someCondition}"> 
    <c:set var="varOne" value="1" /> 
    <c:set var="varTwo" value="2" /> 
    <c:set var="varThree" value="3" /> 
    <c:set var="varFour" value="4" /> 
    <c:set var="varFive" value="5" /> 
</c:if> 

${varOne} 
... 
${varTwo} 
... 
${varThree} 
... 
${varFour} 
... 
${varFive} 

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

${someCondition ? "1" : ''} 
... 
${someCondition ? "2" : ''} 
... 
${someCondition ? "3": ''} 
... 
${someCondition ? "4": ''} 
... 
${someCondition ? "5": ''} 
+0

«Определить условные переменные»! = «Условно определить переменные». – EJP

ответ

1

Если вы собираетесь показать каждую переменную во многих местах в вас странице, первый подход (если проверять состояние только один раз) будет более предпочтительным. Потому что это позволяет избежать дублирования кода.

Если вы покажете переменные только один раз, вам не нужны дополнительные <c:if, а второй подход - в порядке. Потому что это проще и читабельнее.


Конечно, это только мое мнение, но я предпочел бы переместить эту логику в контроллер:

@Controller 
public class MyController{ 

    @RequestMapping("/my-mapping") 
    public String showView(ModelMap model){ 
     model.addAttribute("varOne", someCondition?1:null); 
     model.addAttribute("varTwo", someCondition?2:null); 
     //etc ... 
     return "view-name"; 
    } 
} 

В этом случае ваше мнение будет оставаться ясным и простым, и все бизнес-логика будет в одном месте (кстати, JSP ничего не покажет, когда вы проходите null в качестве значения).

+0

Спасибо, Кен. Первый подход кажется мне более удобным для меня, потому что вся логика находится в одном месте наверху, и имеет смысл, когда переменные будут использоваться несколько раз. В моем случае я буду использовать переменные только один раз. Я просто не был уверен в соображениях производительности нескольких проверок условий против определенных переменных. Зная это сейчас, вы по-прежнему предлагаете второй вариант в моем случае, так как мне нужно только один раз использовать переменные (если у меня нет доступа к контроллеру)? – Talha

+0

@Talha Простая операция сравнения практически ничего для современных компьютеров. Чтобы почувствовать некоторую разницу в производительности, вам нужно сравнить миллионы ценностей. Не беспокойтесь об этом. В то же время читаемость и производительность разработки очень важны. Когда вы или кто-то еще будете искать код страницы после долгого времени, легко забыть, что переменная '$ {varOne}' определена где-то в другом месте (особенно когда код страницы достаточно большой). Похоже, он пришел из модели. Непонятный момент. Итак, мой ответ - да. Я по-прежнему предлагаю вам второй подход в вашем случае. –

+1

Спасибо за совет, Кен. – Talha