Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Conheça Lua: uma linguagem dinâmica com core minimalista

Conheça Lua: uma linguagem dinâmica com core minimalista

More Decks by Evandro Leopoldino Gonçalves

Other Decks in Programming

Transcript

  1. - Evandro Leopoldino Gonçalves, 30 anos - @evandrolg (Github, Twitter,

    Medium, Spekerdeck, etc) - Nutrebem - http://www.nutrebem.com.br - LuaConf - http://www.luaconf.com Sobre mim
  2. Breve História - Criada em 93, na PUC-Rio, por Roberto

    Ierusalimshy, Luiz Henrique de Figueiredo e Waldemar Celes
  3. Breve História - Criada em 93, na PUC-Rio, por Roberto

    Ierusalimshy, Luiz Henrique de Figueiredo e Waldemar Celes - Lua foi precedida pelas linguagens SOL (Simple Object Language) e DEL (Data-Entry Language)
  4. Breve História - Criada em 93, na PUC-Rio, por Roberto

    Ierusalimshy, Luiz Henrique de Figueiredo e Waldemar Celes - Lua foi precedida pelas linguagens SOL (Simple Object Language) e DEL (Data-Entry Language) - Influencias: Modula, CLU, C++, Snobol, AWK, Schema e LISP
  5. Prós - Linguagem pequena (interpretador 180kb) - Poucos tipos (exatamente

    8 tipos!) - Interpretador muito rápido - Metatable
  6. Prós - Linguagem pequena (interpretador 180kb) - Poucos tipos (exatamente

    8 tipos!) - Interpretador muito rápido - Metatable - Função de primeira classe
  7. Prós - Linguagem pequena (interpretador 180kb) - Poucos tipos (exatamente

    8 tipos!) - Interpretador muito rápido - Metatable - Função de primeira classe - OOP via Prototype
  8. Prós - Linguagem pequena (interpretador 180kb) - Poucos tipos (exatamente

    8 tipos!) - Interpretador muito rápido - Metatable - Função de primeira classe - OOP via Prototype - Suporte a Coroutines
  9. Prós - Linguagem pequena (interpretador 180kb) - Poucos tipos (exatamente

    8 tipos!) - Interpretador muito rápido - Metatable - Função de primeira classe - OOP via Prototype - Suporte a Coroutines - LuaJIT
  10. Contras - Falta de debug - Falta de tratamento via

    try, catch e finaly - Comunidade pequena
  11. Sintaxe e Features - Function function fibonacci(n) if n <

    2 then return n end return fibonacci(n - 2) + fibonacci(n - 1) end fibonacci(10)
  12. Sintaxe e Features - Function local fibonacci = function(n) if

    n < 2 then return n end return fibonacci(n - 2) + fibonacci(n - 1) end fibonacci(10)
  13. Sintaxe e Features - Table -- dicionário local person =

    { name = 'Evandro', age = 30, country = 'Brazil' } person.name -- output 'Evandro'
  14. Sintaxe e Features - Table -- dicionário local person =

    { name = 'Evandro', age = 30, country = 'Brazil' } person.name -- output 'Evandro' -- lista local languages = { 'lua', 'python', 'ruby', 'javascript' } languages[1] -- output 'lua'
  15. Sintaxe e Features - Metatable / Metamethods local t1 =

    { sum = 10 } local t2 = { sum = 20 } local object = {} function object.__add(o1, o2) return o1.sum + o2.sum end setmetatable(t1, object) setmetatable(t2, object) print(t1 + t2) -- 30
  16. Sintaxe e Features - Metatable / Metamethods local t1 =

    { a = 1, b = 2 } local t2 = { c = 3, d = 4 } setmetatable(t1, { __index = t2 }) print(t1.c) -- output 3
  17. Sintaxe e Features - OOP local Person = {} function

    Person:new(name, age) local obj = {} obj.name = name obj.age = age return setmetatable(obj, { __index = self }) end function Person:speaks(value) return self.name .. ': ' .. value end
  18. Sintaxe e Features - OOP local evandro = Person:new('Evandro', 30)

    print(evandro:speaks('Hello world!')) local Person = {} function Person:new(name, age) local obj = {} obj.name = name obj.age = age return setmetatable(obj, { __index = self }) end function Person:speaks(value) return self.name .. ': ' .. value end
  19. Sintaxe e Features - OOP local Developer = Person:new(name, age)

    function Developer:makes_code() return self.name .. ' is coding...' end local evandro = Developer:new('Evandro', 30) print(evandro:speaks('Hello world!')) print(evandro:makes_code())
  20. Sintaxe e Features - Modules -- arquivo: module.lua return {

    method_1: function() end method_2: function() end }
  21. Sintaxe e Features - Modules -- outro arquivo =P local

    module = require 'module' module.method_1 -- arquivo: module.lua return { method_1: function() end method_2: function() end }
  22. Comunidade - Pegasus.lua: http://www.github.com/evandrolg/pegasus.lua - Sailor: http://www.github.com/sailorproject/sailor - Torch: http://torch.ch

    - Redis-lua: http://github.com/nrk/redis-lua - Corona: http://coronalabs.com/ - LuaJIT: http://luajit.org/