13 de out. de 2009
Lua - Strings - Parte 1
Strings devem estar entre aspas (simpes ou duplas).
local texto1 = 'Ola mundo.'
local texto2 = "Versão Digital"
Funções Báscias
string.byte()
Retorna o valor da tabela ASCII
s = string.byte('A')
print(s)
string.char()
Retorna um caracter a partir do valor numérico da tabela ASCII.
s = string.char(66)
print(s)
string.len()
Retorna o tamanho da string.
s = 'Programar em LUA é muito fácil.'
a = string.len(s)
print(a)
string.lower()
Retorna um string com os caracteres maiúsculos convertidos para minúsculo
s = 'Programar em LUA é muito fácil.'
a = string.lower(s)
print(a)
string.rep()
Retorna uma cadeia de caracteres concatenada N vezes.
s = 'Lua '
a = string.rep(s,3)
print(a)
string.reverse()
Retorna a string invertida
s = 'Programar em LUA e muito facil.'
a = string.reverse(s)
print(a)
string.sub()
Retorna uma substring a partir da string. É necessário informar a posição inicial e a posição final.
s = 'Programar em LUA é muito fácil.'
a = string.sub(s,13,16)
print(a)
string.upper()
Retorna a string com os caracteres minúsculos convertidos para maiúsculo
s = 'Programar em LUA e muito facil.'
a = string.upper(s)
print(a)
No próximo post falaremos sobre mais algumas funções para strings.
Para saber mais
Lua - Variáveis e Estruturas de Controle
Manual de Referência Lua - Strings
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
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 – Exercícios - Variáveis e Estruturas de Controle
- Fazer um algoritmo que leia um número inteiro e escreva-o se for diferente de zero.
- 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.
31 de ago. de 2009
Lua - Variáveis e Estruturas de Controle
print(variavel1)
variavel1 = 'Ola, como vai?'
print(variavel1)
Ao executar o script acima, percebemos que no primeiro print, a variável possui valor nulo. No segundo print, a variável possui o valor determinado na segunda linha. Variáveis locais tendem a existir apenas dentro do seu escopo. Sua declaração é definida pela palavra chave local. Um exemplo de declaração de uma variável local seria:
local variavel2
Uma outra forma de declarar variáveis globais e locais seria atribuindo o valor durante a declaração:
variavel3 = 'Versao Digital'
local variavel4 = 'Linguagem Brasileira: Lua'
É possível ainda atribuir valores a várias variáveis em uma mesma linha:
variavel5, variavel6, variavel7 = 'Cachorro','Gato',3.14
No exemplo acima atribuimos dois textos as duas primeiras variáveis e um valor numérico na última variável A table por ser uma estrutura especial, dedicaremos um post futuro apenas para ela. Estruturas de Controle Lua possui quatro estruturas de controle: if, while, repeat e for if A estrutura if, executa um bloco de comandos apenas se uma sentença é verdadeira. Sua sintaxe é a seguinte:
if {sentença} then
{bloco de comandos}
elseif {sentença} then
{bloco de comandos}
else
{bloco de comandos}
end
Um exemplo simples é testar se o conteúdo de uma variável maior ou menor que um determinado número.
print('Digite um numero: \n')
local var1 = io.read("*number")
if var1 > 5 then
print('var1 e maior que 5.')
elseif var1 < 5 then
print('var1 e menor que 5')
else
print('var1 e igual a 5')
end
while A estrutura while, irá executar o bloco de comandos enquanto a sentença for verdadeira. Sua sintaxe é a seguinte:
while {sentença} do
{bloco de comandos}
end
No exemplo a seguir, o bloco de comando irá ser executado enquanto o valor da variável for menor que 10.
local var1 = 0
while var1 < 10 do
print('O valor de var1 e: '..var1)
var1 = var1 + 1
end
repeat A idéia do repeat é a mesma do while, no entanto, o teste para verificação se a sentença é verdadeira é realizado após a execução do bloco de comandos, ou seja, caso a sentença seja verdadeira inicialmente, o bloco de comandos será executado pelo menos uma vez.
repeat
{bloco de comandos}
until {sentença}
Sabendo desta diferença, vamos executar o mesmo exemplo anterior, adaptado para o repeat.
local var1 = 0
repeat
print('O valor de var1 e: '..var1)
var1 = var1 + 1
until var1 > 10
Compare os dois exemplos e veja se o resultado final, apesar da semelhança das estruturas, é o mesmo. for A estrutura de controle for irá executar um bloco de comandos, enquanto uma variável de controle varia de acordo com uma progressão aritimética. Sua sintaxe é:
for {sentença} do
{bloco de comandos}
end
Um exemplo simples é a interação de uma variável dentro de um intervalo numérico e a impressão do seu valor, assim como fizemos no while e no repeat.
for var1 = 1, 10 do
print('O valor de var1 e: '..var1)
end
Durante este post, utilizamos algumas funções, que você pode não estar familiarizado, vamos a elas: print() - Esta função é utilizada para imprimir na tela o valor de uma variável ou uma string. io.read() - Esta função inclui uma pausa na execução do programa e aguarda o pressionamento de uma tecla para retomar a execução da aplicação. Os dois pontos, utilizados na maioria dos exemplos, é o operador que indica concatenação. Com isso finalizamos mais um post. No próximo post falaremos de table.
Saiba Mais
Preparando um ambiente de desenvolvimento
Manual de Referência Lua
27 de ago. de 2009
Cobertura do SET 2009 – Terceiro dia
Dia 3:
* A fala é de Fernando Bittencourt, da Globo. Para ele não haverá massificação sem padronização, com plataformas proprietárias. “Acho que só vai massificar se todo mundo puder oferecer um padrão. Se continuar a Samsung com o Terra a Lg com outro, não vai…”
* Samsung acha muito difícil a padronização de plataformas entre fabricantes. Podem é aceitar conteúdos através de padrões abertos.
* @DeLuca: Em resumo, a forma de fornecer o conteúdo é padrão. Como vc trabalha esse conteúdo na sua TV é que é difícil padronizar.
* “Acredito que o anúncio, em qualquer espaço, em qualquer janela, obedecerá regras que surgirão, paulatinamente”, diz advogado.
* DeLuca: #set2009 – Fernando Bittencourt diz; por convicção pessoal, acredita que o controle remoto pode ser individualizado. Se aproximar do celular.
* A Samsung não acredita que o simples acesso à internet seja indutor de venda do seu produto. “É só mais um entre muitos recursos.”
* Samsung diz que a experiência da Internet na TV é complementar.
* Como a oferta de conteúdo descontrolado (internet) vai conviver com a TV, com o broadcast, que é totalmente controlado, regulamentado?
* Luiz Fernando, da Puc-rio mostrando aplicativos interativos comunicando com multidispositivos iphone e android.
* Fabio Angeli da Record bem lembrou que um grande desafio da interatividade é o tamanho da aplicação.