16 de set de 2009

Lua - Operadores

Continuando com nosso tutorial de Lua, falaremos hoje de operadores.

Operadores são classes de operações sobre variáveis ou elementos pré-definidos. Em lua nós temos quatro tipo de operadores: aritiméticos, concatenação, lógicos e relacionais. Vamos a eles.

Operadores Aritiméticos

Operadores aritiméticos são utilizados para realização de cálculos matemáticos. Os operadores válidos são: Soma ( + ), Subtração ( - ), Multiplicação ( * ), Divisão ( / ), Raiz ( ^ ) e Resto ( % ).

 

local a,b = 10, 3
print('Soma (+): '.. a + b)
print('Subtração (-): '.. a - b)
print('Multiplicação (*): '.. a * b)
print('Divisão (/): '.. a / b)
print('Raiz (^): '.. a ^ b)
print('Resto (%): '.. a % b)

 

Operador de Concatenação

O operador de concatenação permite juntar duas strings gerando uma nova string. Ele é representado por dois pontos ( .. )

 

local a,b = 'Maria', 'João'
print(a .. b)
print(a .. ' e ' .. b)

Operadores Lógicos

Operadores lógicos são operadores binários. Possui duas variáveis de entrada resultando em apenas uma variável de saída. Em Lua temos os seguintes operadores: E (and), Ou (or) e Não (not).

Para o operador and, o resultado será verdadeiro apenas se as variáveis de entrada forem verdadeiras, caso contrário o resultado será falso.

Para o operador or, o resultado será verdadeiro caso pelo menos uma das variáveis de entrada seja verdadeira. Se ambas forem falsas, o resultado será falso.

Para o operador not, o resultado será a negação da variável de entrada. Caso seja verdadeiro, o resultado será falso. Se a variável for falsa, o resultado será verdadeiro.

A seguir, temos a tabela verdade para os três operadores.

v1 v2 v1 and v2 v1 or v2 not v1
falso falso falso falso verdadeiro
falso verdadeiro falso verdadeiro verdadeiro
verdadeiro falso falso verdadeiro falso
verdadeiro verdadeiro verdadeiro verdadeiro falso
 

local a,b = false, true
print (a and b)
print (a or b)
print (not a)

Operadores Relacionais

Operadores relacionais verificam a relação entre duas expressões ou variáveis. São operadores relacionais: maior que ( > ), menor que ( < ), maior ou igual que ( >= ), menor ou igual que ( <= ), igual ( == ) e diferente ( ~= ).

local a,b = 1, 2

if a == b then
    print('a e b são iguais.')
elseif a > b then
    print('a é maior que b.')
elseif a < b then
    print('a é menor que b.')
end

Para saber mais

Lua – Variáveis e Estruturas de Controle

11 de set de 2009

Lua - Tables

Dando continuidade ao nosso tutorial de Lua, hoje falaremos de Tables.

Tables são estruturas multidimensionais que permitem o armazenamento de dados diversos.

Sua declaração é semelhante a de variáveis.

local tabela = { }

O acesso a estes valores na table é feito a partir da utilização de colchetes.

local tabela = { }
tabela[1] = ‘Carro
tabela[2] = ‘Moto
local variavel = tabela[1]
print(variavel)

Uma outra forma de atribuir valores a uma table é durante a sua declaração.

local tabela = {‘Carro’ , ’Moto’ , 3.14}

Funções Básicas

table.concat()

Concatena os ítens da tabela.

local tabela = {'amarelo','azul','vermelho'}
local var = table.concat(tabela)
print(var)

table.insert()

Insere um valor na tabela.

local tabela = {'amarelo','azul','vermelho'}
table.insert(tabela,'verde')
print(tabela[4])

É possível ainda, incluir o valor em uma posição determinada da tabela.

local tabela = {'amarelo','azul','vermelho'}
print(tabela[1])
table.insert(tabela,1,'laranja')
print(tabela[1])
print(tabela[2])

Você pode ver que um novo texto foi incluído na primeira posição da table. O texto que originalmente estava na primeira posição passou a segunda posição.

table.maxn()

Retorna o maior índice numérico positivo da tabela. Caso a tabela não possua índice positivo, será retornado zero.

local tabela = {'amarelo','azul','vermelho'}
print(table.maxn(tabela))

table.remove()

Revome da table o último elemento.

local tabela = {'amarelo','azul','vermelho'}
table.remove(tabela)
for i=1, table.maxn(tabela) do
print(tabela[i])
end

É possível ainda informar qual o índice do elemento que deverá ser removido.

local tabela = {'amarelo','azul','vermelho'}
table.remove(tabela,2)
for i=1, table.maxn(tabela) do print(tabela[i])
end

No exemplo anterior, removemos o segundo elemento da table.

table.sort()

Ordena os elementos da table

local tabela = {'verde','amarelo','azul','vermelho'}
table.sort(tabela)
for i=1, table.maxn(tabela) do
print
(tabela[i])
end

Algumas destas funções permitem a inclusão de outros parâmetros, aumentando a gama de opções, no entanto, iremos no restringir ao básico para desenvolvimento.

No próximo post, falaremos sobre operadores.

Para saber mais:

Lua - Variáveis e Estruturas de Controle

Manual de Referência de Lua - Table

Lua – Exercícios - Variáveis e Estruturas de Controle

 

  1. Fazer um algoritmo que leia um número inteiro e escreva-o se for diferente de zero.
  2. Fazer um algoritmo que leia dois números inteiros. Escreva a soma dos números se o primeiro for maior que o segundo, escreva o produto se o segundo for maior que o primeiro, e escreva um deles se os números forem iguais.

 

As respostas serão postadas na próxima quarta.

 

==  Respostas ==

1.

print('Digite um número: ')
local num = io.read('*number')

if num ~= 0 then
    print('O numero é diferente de zero.')
else
    print('O numero é igual de zero.')
end

2.

local num1, num2

print('Digite o primeiro número: ')
num1 = io.read('*number')

print('Digite o segundo número: ')
num2 = io.read('*number')

if num1 > num2 then
    print('A soma de num1 + num2 é '..num1+num2)
elseif num2 > num1 then
    print('O produto de num1 e num2 é '..num1*num2)
else
    print('Este é num1 = '..num1)
end

 

Para mais informações:

Lua - Variáveis e Estruturas de Controle

10 de set de 2009

Review: XPS-1000 da Proview – Versão 1.6.20

Recentemente escrevi um review do XPS-1000. Hoje, um mês depois da postagem, pude testar uma nova versão do middleware instalado no aparelho e preciso dizer que estou muito surpreso com a evolução entre a versão anterior e a versão atual.

O middleware disponibilizado no XPS está bem pareado com o middleware desenvolvido pela comunidade Ginga NCL. Os módulos canvas e event estão tão funcionais quanto a versão disponibilizada nos STBs virtuais.

Aplicações desenvolvidas totalmente no STB virtual tendem a rodar sem muitos problemas no XPS. Na verdade, dois problemas foram identificados. Na classe key do módulo event o tipo release não está implementado e a codificação de caracteres não permite apresentação de caracteres especiais no módulo canvas.

Segundo a RCASoft, responsável pelo desenvolvimento do middleware, a codificação para caracteres especiais funciona no XPS, no entanto, até a publicação deste post, não tive uma resposta para a aplicação teste para a verificação deste problema.

Ainda segundo a RCA, esta versão do middleware já possui a classe tcp implementada, o que permitirá a utilização do canal de retorno. Assim como a codificação de caracteres, não consegui testar e áté o momento, não tive uma resposta sobre o assunto.

Em resumo, o XPS-1000 deu um grande salto de melhoria e hoje já pode ser considerado como um bom ambiente de testes para aplicações NCLua.