Следующие два кодовых блока логически эквивалентны? - PullRequest
1 голос
/ 15 декабря 2010

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

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

Ответы [ 2 ]

7 голосов
/ 15 декабря 2010

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

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

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

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

2 голосов
/ 15 декабря 2010

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

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

до

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

на одну строку кода еще яснее, что происходит.

...