Являются ли следующие два блока кода логически эквивалентными?

Есть ли логическое различие между следующими двумя блоками? И есть ли одна форма правильнее другой? Они оба будут находиться в своей собственной функции - что-то, что я пропустил здесь.

    <cfset local.result = 1 />
    <cfset local.i = 1 />
    <cfloop from="1" to="5" index="i">
        <cfset result = result * i />
    </cfloop>

И

    <cfset local.result = 1 />
    <cfset local.i = 1 />
    <cfloop from="1" to="5" index="i">
        <cfset local.result = local.result * local.i />
    </cfloop>

person Mohamad    schedule 15.12.2010    source источник
comment
Во втором более ясно, какой result модифицируется, а какой i используется, поэтому я голосую за второй блок. (Отказ от ответственности: я никогда не программировал в Coldfusion).   -  person FrustratedWithFormsDesigner    schedule 15.12.2010
comment
ColdFusion 9, я полагаю?   -  person ale    schedule 15.12.2010


Ответы (2)


Да. Во втором примере вы получаете тот же результат; тем не менее, вы улучшили читаемость, явно указав область, которую вы собираетесь изменить, и это хорошо.

ColdFusion сначала выполнит поиск в ЛОКАЛЬНОЙ области, поэтому вы не сэкономили много времени на обработке ColdFusion; однако теперь код стал чище. Если бы результат существовал в области CLIENT или COOKIE, вы бы избавили ColdFusion от необходимости сначала оценивать четыре или пять других областей.

Я когда-то использовал 'var result = 0;' стиль локализации переменных в функцию, но теперь я явно определяю все свои области видимости, чтобы убедиться, что я правильно определил область действия всех переменных, и сделать код более понятным для других.

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

person Aaron Greenlee    schedule 15.12.2010

Одно предложение... изменить:

<cfset local.i = 1 />
<cfloop from="1" to="5" index="i">

to

<cfloop from="1" to="5" index="local.i">

одной строкой кода меньше, даже понятнее, что происходит.

person bpanulla    schedule 15.12.2010