Ser Programador

Entendendo o Switch do Adobe ColdFusion

Neste artigo eu demonstro como utilizar o switch do CF nos seus scripts ColdFusion.


A lógica da usabilidade do switch no ColdFusion é praticamente a mesma das demais linguagens, apenas com uma ressalva de que o CF tem por natureza uma notação bastante singular.

Certamente você já sabe que o switch no CF é chamado através do termo cfswitch, mas o que talvez não saiba é que não é necessário utilizar o break em cada case, assim como é feito no PHP e no JavaScript, por exemplo.

O switch é importante quando existe uma cadeia de validações a serem feitas. Portanto ao invés de utilizar um IF com vários ELSE IFs, prefira sempre utilizar o switch. É mais performático e melhor estruturado, beneficiando a leitura do seu código.


Vamos a um exemplo:

		<cfswitch expression="Bugatti">
		    <cfcase value="Bugatti">Ótima escolha!</cfcase>
		    <cfcase value="Ferrari">Boa escolha!</cfcase>
		    <cfcase value="Fusca">Péssima escolha!</cfcase>
		</cfswitch>
	

O atributo expression da tag cfswitch recebe qual o valor será testado pelo switch e sua cadeia de cases;

Como o próprio nome sugere, o termo "cfcase" é o case ("caso" em tradução do inglês), onde será testado o valor recebido pelo atributo expression da tag cfswitch;

O atributo value das tags cfcase é o valor no qual será testado o valor registrado no atributo expression da tag cfswitch;

Neste exemplo acima, o resultado será:

		Ótima escolha!
	

Podemos também fornecer variáveis para o cfswitch através do atributo expression:

		<cfset meu_carro = "Bugatti">

		<cfswitch expression="#meu_carro#">
		    <cfcase value="Bugatti">Você tem muito bom gosto! E muito dinheiro, diga-se de passagem...</cfcase>
		    <cfcase value="Ferrari">Você é do clube dos mimizentos, mas tem bom gosto.</cfcase>
		    <cfcase value="Fusca">Você é colecionador?</cfcase>
		</cfswitch>
	

A variável meu_carro está sendo instanciada com uso do cfset para guardar o carro;

Note que o valor sendo passado para o atributo expression da tag cfswitch está entre cerquilhas. É necessário fornecer o dado entre cerquilhas para que o CF interprete como uma variável e teste o valor guardado na variável, e não o nome da variável em si. Do contrário seria testado o termo "meu_carro" ao invés do termo "Bugatti";


É possível registrar um case default para quando todos os cases testados não convergem com o valor injetado no atributo expression da tag cfswitch:

		<cfset meu_carro = "Bugatti">

		<cfswitch expression="#meu_carro#">
		    <cfcase value="Bugatti">Você tem muito bom gosto! E muito dinheiro, diga-se de passagem...</cfcase>
		    <cfcase value="Ferrari">Você é do clube dos mimizentos, mas tem bom gosto.</cfcase>
		    <cfcase value="Fusca">Você é colecionador?</cfcase>
		    <cfdefaultcase>Compre logo um carro!</cfdefaultcase>
		</cfswitch>
	

A tag cfdefaultcase ("caso padrão" em tradução do inglês) é responsável por resultar um valor padrão, prestabelecido de acordo com a necessidade. Seu funcionamento seria similar ao ELSE numa cadeira de IF com vários ELSE IFs;



Note que em todos os exemplos, estamos apresentando o texto livremente dentro das tags cfcase e cfdefaultcase. Todavia, se você tentar imprimir uma variável, essa variável não será identificada pelo CF. Vejamos:

		<cfset meu_carro = "Ferrari">
		<cfset parte_final_texto = "escolha!">

		<cfswitch expression="#meu_carro#">
		    <cfcase value="Bugatti">Ótima #parte_final_texto#</cfcase>
		    <cfcase value="Ferrari">Boa #parte_final_texto#</cfcase>
		    <cfcase value="Fusca">Péssima #parte_final_texto#</cfcase>
		    <cfdefaultcase>Você não pode fazer #parte_final_texto#</cfdefaultcase>
		</cfswitch>
	

Estamos utilizando a instância de uma variável parte_final_texto para guardar a parte da mensagem ("escolha!") que se repete em todos os cfcase;

Neste exemplo acima, o resultado será:

		Ótima #parte_final_texto#
	

Portanto, para trabalhar com variáveis junto a textos no resultado dos cfcase, precisamos trabalhar com a boa e velha cfoutput:

		<cfset meu_carro = "Ferrari">
		<cfset parte_final_texto = "escolha!">

		<cfswitch expression="#meu_carro#">
		    <cfcase value="Bugatti">
		    	<cfoutput>Ótima #parte_final_texto#</cfoutput>
		    </cfcase>
		    <cfcase value="Ferrari">
		    	<cfoutput>Boa #parte_final_texto#</cfoutput>
		    </cfcase>
		    <cfcase value="Fusca">
		    	<cfoutput>Péssima #parte_final_texto#</cfoutput>
		    </cfcase>
		    <cfdefaultcase>
		    	<cfoutput>Você não pode fazer #parte_final_texto#</cfoutput>
		    </cfdefaultcase>
		</cfswitch>
	

Com o uso do cfoutput podemos apresentar textos sendo construídos em conjunto com o valor de variáveis;

Dentro do cfoutput, utilizamos a variável entre cerquilhas para informar ao CF que ele deve trabalhar com o valor guardado naquela variável;


Agora por último... Prometo que será o último exemplo...

Podemos trabalhar dentro dos cfcase com quaisquer outros scripts que sejam necessários. Podemos fazer instâncias e atribuições de variáveis, e até mesmo inserir novos cfswitch. Nesse quesito o CF consegue ser bastante versátil.

Vamos a um exemplo onde de acordo com o prato escolhido, a pessoa recebe uma nota por seu bom gosto culinário:

		<cfset nota = 0>
		<cfset parabenizacao = "">
		<cfset prato_escolhido = "strogonoff">

		<cfswitch expression="#prato_escolhido#">
		    <cfcase value="strogonoff">
		    	<cfset parabenizacao = " Parabéns!">
		    	<cfset nota = 10000000>
		    </cfcase>
		    <cfcase value="lasanha">
		    	<cfset nota = 500>
		    </cfcase>
		    <cfcase value="macarrão">
		    	<cfset nota = 100>
		    </cfcase>
		    <cfdefaultcase>
		    	<cfset nota = 10>
		    </cfdefaultcase>
		</cfswitch>

		<cfoutput>Você escolheu #prato_escolhido#, e sua nota foi #nota##parabenizacao#</cfoutput>
	

Usamos o cfset em cada cfcase para efetuar novas atribuições de valor para a variável nota;

Usamos o cfdefaultcase para atribuir uma nota mínima como participação caso a pessoa não tenha escolhido nenhum dos pratos eleitos a pontuar;

Por fim usamos o cfoutput para apresentar uma mensagem contendo a nota que a pessoa recebeu;

Portanto o resultado deste exemplo será:

		Você escolheu strogonoff, e sua nota foi 10000000. Parabéns!
	

Note que neste exemplo a variável parabenizacao sempre é apresentada no resultado do cfoutput, porém ela somente recebe preenchimento quando o usuário escolhe strogonoff. Se mudarmos a escolha do prato para lasanha, por exemplo, a mensagem será:

		Você escolheu lasanha, e sua nota foi 500.