reinaldo_utfpr
3/5/2020 - 6:03 PM

Lua 2 Variáveis

Variáveis, Tipos de Dados, Acance e Manipulação.

Why Lua? Compared to other scripting languages, Lua is very simple and powerful.

Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. — Lua.org

Lua has been used to great effect in a number of similar projects, such as arbitrary re-write rules within the Apache Squid proxy, UDFs in both Redis and Postgres, and other projects.

"Lua é uma linguagem de programação simples e direta, além de possuir uma série de aplicações, é utilizada em diversos jogos mundialmente conhecidos. Além disso, Lua foi desenvolvida na PUC-RJ, no Brasil!" From google.

print("Olá, Mundo!")

-- Explicação breve de print :
-- print é uma função/comando que mostra o dado 
-- que está delimitado por pararentesis. 
-- Para nosso exemplo, este dado é representado por Olá, Mundo!
-- Se o dado também estiver delimitado por aspas, então este dado
-- será mostrado na tela exatamente como se encontra.

Comentários / Documentários

Linha

-- Um comentário começa com um hífen duplo (--) em qualquer lugar fora de uma cadeia.

-- Posso ter outro comentario! 
-- a = b + c 
-- você também pode comentar pedaços de código, assim serão ignorados.

Bloco

    --[[ para comentários introdutórios ou saídas 
    resultado no qual engloba mais de uma linha 
    e assim nomeamos de bloco de comentários.
    ]]

Resultado em Tela

A notação -->> significa algo a ser impresso na tela.

-->> 

Caracteres permitidos

Letras: caracteres 7 bits (sem acentos):

  A até Z 
  a até z

Caracter conectivo:

  underline ( _ )

Números:

  0 até 9

Especiais:

   +     -     *     /     %     ^     #
  ==    ~=    <=    >=    <     >     =
  (     )     {     }     [     ]     ::
  ;     :     ,     .     ..    ...

Palavras reservadas

  and       break     do          else    elseif    end
  false     for       function    goto    if        in
  local     nil       not         or      repeat    return
  then      true      until       while

Variáveis: Identificadores

Inicializa sem valores

local a
local b

Inicializa com valores

a = 10
b = 30

print("valor de a:", a)
print("valor de b:", b)

Troca de valores

a = 5
b = 3
print("valor de a:", a)
print("valor de b:", b)

b, a = a, b
print("valor de a:", a)
print("valor de b:", b)

Vale ressaltar que Lua faz a troca de valores entre variáveis sem precisar de uma variável auxiliar.

Manipula conteudo

f = 70.0/3.0
print("valor de f", f)
litro_de-ar_gramas = 1.3

Evolucao

print (c)  -->> nil  -- Não existe
c = 10     -- foi criada e inicializada
print (c)  -->> 10  -- resultado

Identificadores permitidos

nome_variavel
Nome_
_nome
ExemploABC123

Identificadores não permitidos

2seu nome completo
!exemplo de teste 123
meu* gatopr eto

Atribuição

O símbolo = (igual) atribue dados ou objetos a variáveis/identificadores. Use, por exemplo, a função print para imprimir o conteúdo do identidicador.

Atenção: == (igual igual) é utilizado para comparar uma coisa com outra.

Modo Simples: uma atribuição

x = 7
kg = 1000
grama = 1
miligrama = 10^-3

Modo Encadeado: múltiplas atribuições

var1, var2, var3 = 10, 20, 30
a, b, c = 1, 'isto', 'aquilo'
atm, cmHg, mmHg, torr, kPa = 1, 76, 760, 760, 100
print(atm)
print(kPa)

Saída dos dados

print(x)    
print(var1, var2, var3)
print(a, b, c)

Exemplo de identificadores e as atribuições

a = 5             -- ok 
coisa = 2         -- também ok 
coisadoida = 2.1  -- também ok!
a50000 = 5        -- ok 
_1 = 5            -- também ok!  
1 = 5             -- não ok! 
and = 5           -- não ok! "and" é uma palavra rervada 
_and = 5          -- ok!  
and1 = 5          -- ok!  
and_or = 5        -- ok! "and_or" não é palafra reservada, portanto 
                  -- "and" e "or" são.

Manipulação de Variávés

Operadores Matemáticos


SímboloProposito
+Adição
-Subtração
*Multiplicação
/Divisão
^Potência

--[[
Programa Frutas

Este programa faz a soma de duas frutas, armazena o valor final e mostra o resultado na tela
]]

-- Entrada dos dados
bananas = 5
laranjas = 3

-- Processamento dos dados com armazenamento do processamento
-- na variável frutas
frutas = bananas + laranjas

-- Saída do resultado
print(frutas)
-- Manipulando os identificadores + - * / outros

-- Exemplo 1
a, b, c = 6, 16, "vinte um" 
a, b = b, a
print(a, b)

a, b = a + b, a - b
print(a, b)

a, b, c = a + b, a
print(a, b)

-- Exemplo 2
print(30+31)  -- numero de dias entre Junho e Julho
print(60*60)  -- numero de segundos em uma hora
print(15-9)   -- intervalo entre 3pm e 9am
print(365*24) -- numero de horas em um ano


-- Programa de conversão de temperaturas
tempCelsius = 45

tempKelvin = tempCelsius + 273
print(tempKelvin)

tempCelsius = tempKelvin - 273
print(tempCelsius)


-- Programa para achar a densidade
massa = 18
volume = 2
densidade = massa / volume
print(densidade)
--[[ Intrepretando e Codificando Enunciados
Programa Televisao

Enunciado:

Carlos comprou uma televisão no valor de R$ 950,00, 
dividida em 10 prestações iguais. 
Ao pagar a 4º prestação, recebeu de presente de seu avô, 
o restante do dinheiro para a quitação do aparelho. 
Quanto Carlos recebeu?
]]

--==== Desmembrando ====

--[[O valor do aparelho é igual a R$ 950,00.

Carlos resolveu dividir o televisor em 10 prestações 
iguais, então devemos realizar uma operação de 
divisão: 950/ 10 = 95 reais.

Carlos efetuou o pagamento de 4 prestações, 
dessa forma, ainda faltam 6. 
São as prestações restantes que o avô de Carlos 
resolveu pagar. 

Portanto, 95 * 6 = 570 reais. 
]]

--==== Resultado2 ====

televisao_valor_final = 950

prestacoes_totais = 10

prestacao_valor = televisao_valor_final / prestacoes_totais

prestacoes_pagas = 4

prestacoes_faltantes = prestacoes_totais - prestacoes_pagas

avo_contribuiu = prestacao_valor * prestacoes_faltantes

print( avo_contribuiu)
--[[ Intrepretando e Codificando Enunciados
Programa Porcentagem

Enunciado:

João tinha uma quantia, gastou 35% e 
ainda ficou com R$ 97,50. 
Qual o valor que João tinha inicialmente?
]]

--==== Desmembrando ====

--[[
Quando trabalhamos com porcentagem, 
sempre precisamos nos lembrar de que o 
valor corresponde a 100%. 
Dos 100%, João gastou 35%, 
então: 100% – 35% = 65%.

Os 65% restante, correspondem a R$ 97,50. 
Dessa forma, temos que:

João tinha o valor inicial de R$ 150,00.
]]

-- ==== Resultado ====

porcentagem_gasta = 0.35

valor_restante = 97.5

porcentagem_restante = 1 - porcentagem_gasta

joao_quantia = valor_restante / porcentagem_restante

print(joao_quantia)
--[[ Intrepretando e Codificando Enunciados
Programa Geladeira
 
Enunciado:

O preço de uma geladeira, à vista, é R$ 1 200,00. 
No pagamento em três prestações ocorre um acréscimo 
de 10% de juros. Qual será o valor da prestação 
no pagamento parcelado?

Na compra da geladeira a prazo, 
o valor de cada prestação será de R$440,00
]]

-- === Resultado ===

valor_geladeira = 1200

prestacoes = 3

acrescimo = 0.10

aumento = valor_geladeira * acrescimo

valor_final = valor_geladeira + aumento

print(valor_final)

valor_prestacoes = valor_final / prestacoes

print(valor_prestacoes)

Tipos de Dados

As variáveis são dinamicamente tipadas e são 8 tipos, e trabalharemos com (6): nil, boolean, number, string, function, table

nil

a = nil

Usado para diferenciar o valor de ter alguns dados ou nenhum dado (nulo).

boolean

resp = true

Inclui verdadeiro e falso como valores. Geralmente usado para verificação de condição.

number

x = 1
y = 0.45

Representa números reais (ponto flutuante de precisão dupla).

string

nome = 'Reinaldo'
nome2 = "Reinaldo"

Representa um grupo de caracteres rodeado por aspas simples ou duplas.

table

solido = {10,10,20}
minhatabela = {"FRIO", "QUENTE", "MORNO"} 
local a = {
  {1, 3,-2},
  {3,-5, 6},
  {2, 4, 3}
}
local b = {
  {5},
  {7},
  {8}
} 
local o = {{7,7}}

Representa matrizes comuns, tabelas de símbolos, conjuntos, registros, gráficos, árvores etc. e implementa matrizes associativas. Pode conter qualquer valor (exceto nulo).

function

print
math.floor

Representa um método para execução de ação.

-- Testando tipos

print(type("texto qualquer"))
t = 10
print(type(5.8*t))   
print(type(true))                
print(type(print))         
print(type(nil))              
print(type(type(ABC)))           
-- nil: Falta de um valor útil

print (x)
-- boolean: false ou true

-- Exemplo 1
print( 7 == true) 

-- Exemplo 2
a = (7 == true)
print(a)

-- Exemplo 3
y = true 
print(not true) --> false
print(not false) --> true
-- numeric: números inteiros, reais, científicos e hexadecimais

-- Exemplos Miscelaneous
x = 21  
print(2^0.5)

print(5/6)

print(1.2345e6)

print(2.56e-4)
-- string: literais

-- Exemplo 1
print("olá")

-- Exemplo 2
a = "Ola\nQuimicos!"
print(a)

-- Exemplo 3
z = "Cortex"
s = "uma string simples"
nome = "James Tiberius Kirk"
data_nascimento = "17 de Junho de 1938" 

-- Exemplo 4
s2 = [[
um texto longo
que extende
em varias
linhas]]

-- Exemplo 5
print ("Usamos um asequencia de caracteres, aqui!")
-- ou equivalente
messagem = "Usamos um asequencia de caracteres, aqui!"
print(messagem)

Alcance das variáveis

O alcance dos blocos de código é delimitado por do e end e permitem organizar pedaços do seu programa para maior legibilidade

-- parte global
do
    -- parte local
end
do
    -- outra parte local
end
-- parte global
-- Exemplo do alcance da var x


x = 6             -- variavel global x recebendo 6
do                -- inicio do bloco local
   local x = 5    -- variavel local x recebendo 5
   print(x)       -->> 5
end               -- fim do bloco local
print(x)          -->> 6

Escrita multilinha

O alcance dos blocos de código é delimitado por ( ) e permitem distribuir linhas de código.

-- Exemplo 1
print(
  "Olá usuário lua"
)

-- Exemplo 2
print(10 *
    10 +
      5
)
-- Exemplo 1
print([[+-----+
| Lua |
+-----+
]])

-- Exemplo 2
print([[
  +-----+
  | Lua |
  +-----+
]])

-- Exemplo 3
print([[
  Existem alguns
caracteres “\’ estranhos
nesta string.
]])

-- Exemplo 4
frase = [[
  Existem alguns
caracteres “\’ estranhos
nesta string.
]]
print(frase)
-- Problema: Tendo o tempo de vida de uma lampada 
-- que eh indicada para 2200h, e utilizada 6h dia num ano cheio,
-- ache a resposta que se refere ao valor de vida desta lâmpada.

-- maneira 1 um de escrever o codigo
print(2200/6/365) 

-- maneira 2, equivalente
print(2200/(6*365)) 

-- maneira 3, equivalente 
print(2200/6) 
print((2200/6)/365)
-- Este é um comentario em Lua
n = 8
t = {} -- t é uma tabela

-- definicao de funcao
function cubo (x)
    return x^3
end

-- preenche t com os n  cubos
for i = 1, n do
    t[i] = cubo(i)
end

-- apresenta t com os n  cubos
for i = 1, n do
    print(t[i])
end