Lista de exemplos de código Euphoria

Origem: Wikipédia, a enciclopédia livre.

Esta é uma lista de exemplos de Euphoria, onde vários códigos em Euphoria são colocados, para ajudar no aprendizado nessa linguagem.

Exemplos[editar | editar código-fonte]

Olá Mundo[editar | editar código-fonte]

Ver artigo principal: Programa Olá Mundo
puts(1, "Olá, Mundo!\n")

Testando o tipo de dado[editar | editar código-fonte]

O exemplo a seguir testa o tipo de dado da variável “valor”, se é um integer (atom de valor inteiro), ou se é um atom fracionário.[1]

object valor -- Declara a variável “valor”
valor = 1 -- E atribui-lhe um valor

if integer(valor) then -- Se valor for integer
   puts(1, "A variável 'valor' é um integer.") -- Lance esta mensagem
else
   puts(1, "A variável 'valor' é um atom.") -- Caso contrário, lance esta
end if
Nota: Comentários de código iniciam com um hífen duplo (--) e o comentário se prolonga até o fim da linha. Ele não é um comentário multi-linha (não se propaga para outras linhas). Sua funcionalidade é equivalente à barra dupla (//) de C++.[2]

Retornando elementos de sequences[editar | editar código-fonte]

O exemplo a seguir declara uma variável e a atribui uma sequence, com três nomes de cores diferentes. Em seguida, joga-as na tela, porém, em uma ordem diferente:[3][4]

object lista
lista = {"Azul", "Preto", "Branco"} -- Atribui três elementos à “lista”

puts(1, lista[1]) -- Põe na tela o elemento 1 de “lista” (Azul)
puts(1, lista[2][1]) -- Põe na tela o 1º elemento do elemento 2 (P)
puts(1, lista[3][3..6]) -- Põe na tela o 3º, 4º, 5º e 6º elemento do elemento 3 (anco)

A variável lista também podia ser declarada como sequence, que o programa funcionaria da mesma forma.

Ordenando elementos de sequences[editar | editar código-fonte]

O exemplo a seguir, ordena alfabeticamente os elementos de uma sequence, de forma automática, e depois os manda à tela:[5]

include sort.e -- Biblioteca necessária para a função “sort()”

object lista
lista = {"Azul", "Preto", "Branco"}
lista = sort(lista) -- Atribui a lista, elementos de “lista”, ordenados
                    -- “lista” agora vale a: {"Azul", "Branco", "Preto"}

puts(1, lista[1])
puts(1, lista[2])
puts(1, lista[3])

Atribuindo valores aleatórios[editar | editar código-fonte]

O exemplo a seguir pega um valor de uma lista, aleatoriamente, e a joga na tela:[6]

object lista, fortuito
lista = {"Azul", "Preto", "Branco"}
fortuito = rand(3) -- Gera um valor aleatório e o atribui a “fortuito”

puts(1, lista[fortuito]) -- Lança à tela, um dos elementos de “lista”

A cada execução do código, é lançada à tela uma palavra diferente (que estejam dentro da lista).

Esperando até que uma tecla seja pressionada[editar | editar código-fonte]

O exemplo a seguir, aguarda até que uma tecla (qualquer tecla) seja pressionada, e depois encerra o programa imediatamente:[7]

puts(1, "Pressione qualquer tecla...")

while get_key() = -1 do -- Repete, até que uma tecla seja pressionada
end while

abort(0) -- Então, encerra imediatamente o programa

Manipulação de argumentos da linha de comando[editar | editar código-fonte]

Mesmo sendo uma linguagem interpretada, Euphoria pode usar e manipular argumentos da linha de comando, como se fosse uma linguagem compilada, estando em forma de código, “coberto”, ou “encadernado”. Essa característica é útil na criação de compiladores, interpretadores, e outros programas que utilizem a linha de comando, para passar comandos para o programa.[8] Exemplo:

object arg, cmd
cmd = command_line() -- Associa “cmd” a função “command_line()”
arg = find("-r", cmd) -- Agrega a função de procura o valor "-r" dentro
                      -- de “cmd”, para “arg”

if arg <= 2 or arg = length(cmd) then
   puts(1, "Sem argumentos.")
elsif arg >= 3 then
   if match("abc", cmd[arg+1]) then -- Se “cmd” contiver "-r" e "abc"…
      puts(1, "Argumentos -r e abc usados.") -- …Mandará esta mensagem
   elsif match("def", cmd[arg+1]) then
      puts(1, "Argumentos -r e def usados.")
   else -- Caso o argumento seja inválido, mandará estas mensagens:
      puts(1, "Terceiro argumento invalido: \"" & cmd[arg+1] & "\".")
   end if
end if
Nota: Os argumentos da linha de comando devem estar em minúscula. Porém, isso pode ser mudado, fazendo-se mudanças no código.

Contando palavras[editar | editar código-fonte]

O exemplo a seguir abre um arquivo de texto, conta e diz quantos caracteres, palavras e linhas, o arquivo possui:[9]

object arquivo, fonte, caracteres, linhas, palavras, texto
fonte      = ""
caracteres = 0
linhas     = 0
palavras   = 0
texto      = ""

arquivo = open("arquivo.txt", "r") -- Abre o arquivo para leitura
if arquivo = -1 then -- Se não conseguir abrir o arquivo
   abort(1)
end if

while sequence(fonte) do -- Enquanto tiver uma linha
   fonte = gets(arquivo) -- Põe a linha dentro de “fonte”
   texto &= fonte -- E o adiciona ao fim de “texto”
end while

if texto[1] != -1 then -- Se houver algo na primeira linha
   linhas += 1 -- Contar a primeira linha
   for i = 1 to length(texto) do
      if i > 1 then
         if texto[i] = ' ' or texto[i] = '\t' or texto[i] = '\n' then
            if texto[i-1] != ' ' and texto[i-1] != '\t' and texto[i-1] != '\n' then
               palavras += 1
            end if
         end if
         if i = length(texto) then
            if texto[i-1] != ' ' and texto[i-1] != '\t' and texto[i-1] != '\n' then
               palavras += 1
            end if
         end if
      end if
      if texto[i] = '\n' then -- Se for um marcador de nova-linha
         linhas += 1
      elsif texto[i] != '\t' and texto[i] != ' ' and texto[i] != -1 then
         caracteres += 1
      end if
   end for
end if

if linhas > 0 then -- Reporta quantos caracteres, palavras e linhas o arquivo possui
   printf(1, "O arquivo possui %d caracteres, %d palavras e %d linhas.\n",
            {caracteres, palavras, linhas})
else
   printf(1, "%s", {"O arquivo está vazio.\n"})
end if

A expressão letras += 1 é o mesmo que letras = letras + 1.[10] Na linha 42 desse código, %d significa que o valor será colocado na tela como inteiro decimal. Essa mesma linha poderia ser escrita de forma diferente, que funcionaria do mesmo modo:[11]

printf(1, "%s%d%s%d%s", {"O arquivo possui ", caracteres, " caracteres, ", palavras,
          " palavras e ", linhas, " linhas."})

Ou ainda:

puts(1, "O arquivo possui ")
printf(1, "%d", caracteres)
puts(1, " caracteres, ")
printf(1, "%d", palavras)
puts(1, " palavras e ")
printf(1, "%d", linhas)
puts(1, " linhas.")
Nota: Neste código, se não existir um arquivo chamado “arquivo.txt”, no mesmo diretório, o programa será encerrado. Isso acontece por causa do código na linha 9, que diz para ele fazer isso. Se esse código e o arquivo, não existirem, o programa irá gerar um erro.

Referências

  1. «Euphoria Reference Manual Part II - Section 3: integer» (em inglês). Consultado em 27 de novembro de 2010 
  2. «Euphoria Reference Manual Part I - Section 2: Comments» (em inglês). Consultado em 27 de novembro de 2010 
  3. «Euphoria Reference Manual Part I - Section 2: Subscripting of Sequences» (em inglês). Consultado em 27 de novembro de 2010 
  4. «Euphoria Reference Manual Part I - Section 2: Slicing of Sequences» (em inglês). Consultado em 27 de novembro de 2010 
  5. «Euphoria Reference Manual Part II - Section 3: sort» (em inglês). Consultado em 27 de novembro de 2010 
  6. «Euphoria Reference Manual Part II - Section 3: rand» (em inglês). Consultado em 27 de novembro de 2010 
  7. «Euphoria Reference Manual Part II - Section 3: get_key» (em inglês). Consultado em 27 de novembro de 2010 
  8. «Euphoria Reference Manual Part II - Section 3: command_line» (em inglês). Consultado em 27 de novembro de 2010 
  9. «Euphoria Reference Manual Part II - Section 3: open» (em inglês). Consultado em 27 de novembro de 2010 
  10. «Euphoria Reference Manual Part I - Section 2: Assignment with Operator» (em inglês). Consultado em 27 de novembro de 2010 
  11. «Euphoria Reference Manual Part II - Section 3: printf» (em inglês). Consultado em 27 de novembro de 2010 

Ver também[editar | editar código-fonte]