Euforia - Constantes
Constantes também são variáveis às quais é atribuído um valor inicial que nunca pode mudar durante a vida do programa. A euforia permite definir constantes usando a palavra-chave constante da seguinte forma -
constant MAX = 100
constant Upper = MAX - 10, Lower = 5
constant name_list = {"Fred", "George", "Larry"}
O resultado de qualquer expressão pode ser atribuído a uma constante, mesmo que envolva chamadas a funções previamente definidas, mas uma vez que a atribuição é feita, o valor da variável constante é "bloqueado".
Constantes não podem ser declaradas dentro de uma sub-rotina. O escopo de umconstant que não tem um modificador de escopo, começa na declaração e termina e no final do arquivo em que é declarado.
Exemplos
#!/home/euphoria-4.0b2/bin/eui
constant MAX = 100
constant Upper = MAX - 10, Lower = 5
printf(1, "Value of MAX %d\n", MAX )
printf(1, "Value of Upper %d\n", Upper )
printf(1, "Value of Lower %d\n", Lower )
MAX = MAX + 1
printf(1, "Value of MAX %d\n", MAX )
Isso produz o seguinte erro -
./test.ex:10
<0110>:: may not change the value of a constant
MAX = MAX + 1
^
Press Enter
Se você excluir as duas últimas linhas do exemplo, ele produzirá o seguinte resultado -
Value of MAX 100
Value of Upper 90
Value of Lower 5
Os enums
Um valor enumerado é um tipo especial de constante em que o primeiro valor é padronizado para o número 1 e cada item depois disso é incrementado em 1. Enums só podem aceitar valores numéricos.
Enums não podem ser declarados dentro de uma sub-rotina. O escopo de umenum que não tem um modificador de escopo, começa na declaração e termina e no final do arquivo em que é declarado.
Exemplos
#!/home/euphoria-4.0b2/bin/eui
enum ONE, TWO, THREE, FOUR
printf(1, "Value of ONE %d\n", ONE )
printf(1, "Value of TWO %d\n", TWO )
printf(1, "Value of THREE %d\n", THREE )
printf(1, "Value of FOUR %d\n", FOUR )
Isso produzirá o seguinte resultado -
Value of ONE 1
Value of TWO 2
Value of THREE 3
Value of FOUR 4
Você pode alterar o valor de qualquer item atribuindo a ele um valor numérico. Os valores subsequentes são sempre o valor anterior mais um, a menos que eles também tenham um valor padrão.
#!/home/euphoria-4.0b2/bin/eui
enum ONE, TWO, THREE, ABC=10, XYZ
printf(1, "Value of ONE %d\n", ONE )
printf(1, "Value of TWO %d\n", TWO )
printf(1, "Value of THREE %d\n", THREE )
printf(1, "Value of ABC %d\n", ABC )
printf(1, "Value of XYZ %d\n", XYZ )
Isso produz o seguinte resultado -
Value of ONE 1
Value of TWO 2
Value of THREE 3
Value of ABC 10
Value of XYZ 11
As sequências usam índices inteiros, mas com enum você pode escrever código como este -
enum X, Y
sequence point = { 0,0 }
point[X] = 3
point[Y] = 4