ساختار Switch/Case يک عبارت را در برابر چندين شرط، ارزيابي مي کند و سپس کد مربوطه را اجرا مي کند.

مثلا، تکه کد زير را در نظر بگيريد :

<cfif myVar EQ 1>

            One

<cfelseif myVar EQ 2>

            Two

<cfelseif myVar EQ 3>

            Three

</cfif>

 

تکه کد بالا مقدار myVar را سه بار ارزيابي مي کند و هر بار تست مي کند که آيا مقدار آن برابر مقدار خاصي هست يا نه. کد بالا را مي توان به صورت بهتر مي توان نوشت :

 

<cfswitch expression=”#myVar#”>

<cfcase value=1>

            One

</cfcase>

<cfcase value=2>

            Two

</cfcase>

<cfcase value=3>

            Three

</cfcase>

</cfswitch>

 

هر دو کد يک کار واحد انجام مي دهند اما ساختار cfswitch بهينه تر مي باشد، زيرا مقدار متغير myVar به جاي سه بار، يک بار ارزيابي مي کند. کلدفيوژن عبارات cfswitch را بسيار بهينه تر از عبارات cfif اجرا مي کند ، زيرا براي اجراي cfif، هر دفعه هر مقدار هر عبارت شرطي را ارزيابي مي کند (true يا false) تا آنجا مقدار يک عبارت true شود، ولي cfswitch ابتدا مقدار عبارت را ارزيابي مي کند (يک بار) و سپس قسمت مطابق با آن را اجرا مي کند.

 

مقادير ذکر شده در cfcase بايد از نوع ثابت باشند و نمي توانند متغير  و يا عبارت باشند. به عنوان مثال، تکه کد زير مجاز نيست :

<cfswitch expression=”#MyVar#”>

<cfcase value=”#1+1#”>

                        Two

</cfcase>

</cfswitch>

 

در کد زير cfdefaultcase برابر cfelse در ساختار cfif مي باشد.

<cfswitch expression=”#myVar#”>

<cfcase value=1>

            One

</cfcase>

<cfcase value=2>

            Two

</cfcase>

<cfcase value=3>

            Three

</cfcase>

<cfdefaultcase>

            Some Other Number

</cfdefaultcase>

</cfswitch>

 

کد بالا به اين معناست که اگر هيچ يک از مقادير cfcase برابر مقدار عبارت نبودند، بلوک کد مربوط به cfdefaultcase را اجرا کند.

 

اگر چه ساختار هاي cfswitch مزاياي زيادي دارند، اما در اغلي اوقات نمي توان از آن به جاي cfif استفاده کرد. مثلا به کد زير توجه کنيد :

 

<cfif MyVar GREATER THAN myOtherVar>

            <cfoutput>#MyVar#</cfoutput>

<cfesleif myVar EQUAL   myOtherVar>

            <cfoutput>#MyVar+MyOtherVar#</cfoutput>

<cfelse>

            <cfoutput>#MyOtherVar#</cfoutput>

</cfif>

 

اين کد را نمي توان به وسيله ساختار cfswitch نوشت. زيرا عبارات شرطي کد بالا چيزي بيشتر از يک مقايسه ي برابري ساده مي باشند.