Estrutura UDF

ColdFusion tem mais de 250 funções em sua língua. Tem seqüência de funções de manipulação, funções de matriz, as funções de estrutura, e muitos outros tipos de funções. Mesmo com essa ampla variedade de funções, no entanto, às vezes você pode querer definir sua própria função que faz as coisas que as funções internas do ColdFusion não pode. Este artigo não descreve como usar CFSCRIPT somente como usar CFSCRIPT em conjunto com funções definidas pelo usuário. A função definida pelo usuário, ou UDF, podem ser construídas em CFSCRIPT, CFML, ou uma combinação dos dois. As partes seguintes descrevem como criar UDFs usando CFSCRIPT. CFSCRIPT UDFs são muito natural porque imitam criação de função em JavaScript, Java e muitas outras linguagens de programação que você pode já estar familiarizado. Em geral, as funções de receber um ou mais argumentos e retornam um único resultado. Algumas funções (como ColdFusion's Now () a) não ter argumentos, mas quase todas as funções retornam um resultado. UDF A base construída usando CFSCRIPT é o seguinte:

 GetCurrentTime function () (return TimeFormat (Now (), "h: mm: ss");) 
  

A apenas quatro coisas necessárias para cada função são a chave de função, o nome da função, os parênteses após o nome, e as chaves ao redor do corpo da função. Embora a declaração de retorno é tecnicamente opcional, o retorno é o que faz uma função verdadeiramente útil, já que esta afirmação representa o resultado retornado para o código que chama a função. Nós chamamos a função que acabamos de criar como seria qualquer função built-in ColdFusion, como segue:

 # GetCurrentTime () # 

Podemos expandir a minha função, definindo uma variável local, como segue:

função GetCurrentTime () (var = szTime TimeFormat (Now (), "h: mm: ss"); szTime retorno;)

Mais sobre a palavra-chave var na parte seguinte. Podemos também adicionar um código para a nossa função entre a declaração de variáveis e a instrução de retorno, como segue:

função GetCurrentTime () (var = szTime TimeFormat (Now (), "h: mm: ss"); szTime = ReplaceNoCase (szTime, "am", "de manhã"); szTime = ReplaceNoCase (szTime, "pm" , "na noite"); szTime retorno;)

Esta UDF é um exemplo muito simples que não tem quaisquer argumentos. Agora, para dar uma olhada var em mais detalhes. var declara uma variável que é local para uma função. Se não usar var, por exemplo, poderíamos fazer o seguinte:

 myFn function () (myVar = 1; return TRUE;)  # myFn () # # # myVar 

Depois que você chamar myFn (), myVar está disponível para o código fora da função. Isso porque qualquer variável definida dentro CFSCRIPT também está disponível para CFML. Esta é a programação muito desleixado, porque você pode estar inadvertidamente a criação ou substituição de variáveis que não estavam a intenção de afetar. Para manter o local para myVar myFn () tal que não pode vazar fora da função, var utilização, como segue:

 myFn function () (var myVar = 1; return TRUE;) 

Agora, tentar usar myFn fora myVar () gera um erro, que é exatamente o que você quer fazer. Todas as variáveis criadas usando var deve ser inicializado; ColdFusion gera um erro se não o são. E note, também, que você não pode colocar a palavra-chave var em qualquer lugar que não seja no topo de uma declaração de função. Funções retornam um único valor, como mostra o exemplo a seguir:

myFn function () (return TimeFormat (Now (), "h: mm: ss");)

Tão logo CFSCRIPT encontra uma instrução de retorno, ColdFusion pára de executar a função e retorna o seguinte valor da chave voltar ao código de chamada. Condicionalmente Você também pode retornar valores diferentes com base em circunstâncias diferentes, como no seguinte código:

myFn function () (if (IsDefined ( "Client.myVar")) (return Client.myVar;) else (return TimeFormat (Now (), "h: mm: ss");))

Cada caminho de controle em uma função deve retornar um valor ou você receber resultados inconsistentes. Uma prática, portanto, é definir um valor de retorno padrão e utilizar apenas uma instrução de retorno na sua declaração de função, como segue:

myFn function () (var resultado = TimeFormat (Now (), "h: mm: ss"); if (IsDefined ( "Client.myVar")) (result = Client.myVar;) return result;)

A maioria das funções levar um ou mais argumentos, como mostra o exemplo a seguir:

 função ADD2 (firstNumber, secondNumber) (return firstNumber secondNumber +;)  # ADD2 (1,2) # 

Os nomes dos argumentos são definidos em uma lista dentro dos parênteses após a declaração da função. Veja mais avançado usa de argumentos mais adiante neste artigo. O exemplo anterior usou argumentos posicionais, o que significa que o primeiro argumento na chamada da função foi passada para o primeiro argumento na função, o segundo no convite se tornou o segundo na função, e assim por diante. Você pode também nomear os argumentos na chamada, se você quiser passá-los em uma ordem diferente, como segue:

 # ADD2 (secondNumber = 2, firstNumber = 1) # 

Esta sintaxe não é amplamente usado, pois ele é um pouco mais difícil de ler, que pode ajudá-lo, no entanto, se você não lembrar a ordem dos parâmetros de uma função. Se algum dos argumentos de uma chamada de função são nomeados, no entanto, todos os argumentos devem ser nomeados. As funções podem ser chamados em qualquer lugar dentro de um modelo de ColdFusion, mesmo dentro de outra função do ColdFusion. Tome o seguinte exemplo:

 myFn função (myNum, yourNum) (return * myNum yourNum;) myOtherFn function () (var num1 = randRange (1,10); var num2 = randRange (1,10); myFn return (num1, num2);) 

Uma função também pode ligar para si. Nós escrevemos a seguinte função, por exemplo, para calcular o fatorial de um número (um fatorial serão definidos em um momento):

 função Factorial (myNum) (if (myNum EQ 1) (return 1;) else (return myNum * Factorial (myNum - 1);  # Factorial (6) # 

O factorial de 6, por exemplo, é 6 x 5 x 4 x 3 x 2 x 1, ou 720. Para calcular o fatorial, podemos retornar o número passado para a função, multiplicado pelo próximo menor fatorial (porque o fatorial 6 também pode ser representado como fatorial 6 x 5). Você deve ter cuidado na criação de funções recursivas para se certificar de que você tem uma condição de parada. No nosso caso, nós paramos a recursão sempre myNum é 1. Se você não construir uma condição de parada em sua lógica, que colocou a solicitação em um loop infinito. Nós mostrar-lhe que as estruturas são acessadas por referência, enquanto que outras variáveis são referenciadas por valor. O mesmo vale para passar variáveis para uma função. Se você passar um número para uma função, a função tem uma cópia local desse número, e quaisquer modificações que faz as funções do número não são repetidas fora da chamada de função. Estruturas são passadas para uma função por referência, no entanto, assim qualquer modificação que a função faz o parâmetro de estrutura pode ser visto fora da chamada de função.

um artigo submetido por Nina Lachey


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "UDF" estrutura foi traduzido por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 326 users browsing the articles directory