Como informado na décima parte desta série de artigos sobre apresentação da linguagem Lua, esporadicamente seriam mostrados outros artigos complementares com recursos que anteriormente não foram abordados. Cumprindo o prometido, apresenta-se neste artigo recursos relacionados a definição de pausa (aguardar o acionamento da tecla Enter para continuar o fluxo do programa), definição e uso da função sleep()
com o objetivo de aguardar um certo tempo em segundos e a ordenação decrescente de elementos em uma matriz do tipo vetor.
Os detalhes aqui descritos são assuntos que surgiram durante os cursos de linguagem Lua ministrados.
Pausa no Programa
A realização de pausa na execução de um programa Lua que aguarde o acionamento da tecla Enter pode ser definida com a instrução io.read '*l'
.
-- inicio do programa P11_01 io.write("Entre o 1o. valor: ") A = tonumber(io.read()) io.write("Entre o 2o. valor: ") B = tonumber(io.read()) X = A + B io.write("Soma = ", X, "\n\n") io.write("Acione <Enter>... ") io.read '*l' -- fim do programa P11_01
Em seguida escreva o código do programa em um editor de texto, gravando-o com o nome P11_01.lua
e execute-o com a linha de comando lua 5.1 P11_01.lua
.
O programa P11_01.lua
além do uso do recurso de pausa que aguarda o uso da tecla Enter faz uso da função tonumber()
para a leitura de um valor numérico.
A leitura de valores numéricos na linguagem Lua pode ser efetuada com o uso da forma io.read("*number")
ou com o uso da forma tonumber(io.read())
. A diferença entre os dois métodos de entrada é que o segundo faz a limpeza do buffer do teclado após a entrada dos valores.
Função sleep()
A linguagem Lua não possui definida uma função que efetue uma pausa controlada por tempo, mas por meio da função clock()
da biblioteca io
é possível criar tal função. Note o código seguinte.
-- inicio do programa P11_02 function sleep(TMP) local I = os.clock() while (os.clock() - I <= TMP) do end end function pause() io.read '*l' end FAT = 1 CONT = 1 for CONT = 1, 5, 1 do FAT = FAT * CONT end sleep(4) -- 4 segundos print(FAT) io.write("\nAcione <Enter>... ") pause() -- fim do programa P11_02
Em seguida escreva o código do programa em um editor de texto, gravando-o com o nome P11_02.lua
e execute-o com a linha de comando lua 5.1 P11_02.lua
.
A função definida sleep()
recebe como valor de parâmetro o limite de tempo de espera em segundos e marca o tempo inicial para a variável I
a partir do tempo atual. O ciclo while
consome o tempo de execução dentro do limite estabelecido para TMP
enquanto o tempo atual descontado do valor inicial de tempo em I
seja menor ou igual ao valor definido para TMP
.
Ordenação Decrescente/Descendente
Anteriormente, no artigo 7, foi abordado o uso da função sort()
da biblioteca table
para a colocação de elementos em ordem crescente ou ascendente, mas nada foi dito sobre como proceder para a definição de uma ordem de disposição inversa.
Neste sentido o uso da função sort()
é efetuado de maneira diferenciada. Observe o programa exemplo a seguir.
-- inicio do programa P11_03 local VETOR = {} for I = 1, 5 do NOME = io.read() table.insert(VETOR, NOME) end for I = 1, 5 do print("["..I.."] = "..VETOR[I]) end table.sort(VETOR, function(A, B) return A > B end) print() for I = 1, 5 do print("["..I.."] = "..VETOR[I]) end -- fim do programa P11_03
Em seguida escreva o código do programa em um editor de texto, gravando-o com o nome P11_03.lua
e execute-o com a linha de comando lua 5.1 P11_03.lua
.
Após entrar cinco nomes serão mostrados os nomes na ordem de entrada e ordenados de forma descendente.
Para conseguir ordenar os elementos do vetor em ordem decrescente faz-se uso no segundo parâmetro de sort()
de um recurso baseado em uma função em estilo lambda: function(A, B) return A > B end
que recebe dois parâmetros e retorna o maior entre os dois valores fornecidos.
Conclusão
Neste artigo foi apresentado o uso de recursos para a definição de pausa, ciclos de tempo em segundos e ordenação de vetor em sentido decrescente/descendente.
Em outras ocasiões serão apresentados outras possibilidades de uso da linguagem Lua. Até lá.