87
Themenabend: Lua Themenabend: Lua twobit c3d2 23. November 2011 1 / 34

Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Themenabend: Lua

twobit

c3d2

23. November 2011

1 / 34

Page 2: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Outline

Outline

1 IntroTIOBE Programming Community IndexDesign-ZieleWer hat’s erfunden?FeaturesProjekte

2 MainHelloDie SpracheMetatafoo

2 / 34

Page 3: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Outline

1 IntroTIOBE Programming Community IndexDesign-ZieleWer hat’s erfunden?FeaturesProjekte

2 MainHelloDie SpracheMetatafoo

3 / 34

Page 4: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

TIOBE Programming Community Index

4 / 34

Page 5: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Design-Ziele

Design-Ziele

Simplicity

Size

Performance

Portability

Embeddability

5 / 34

Page 6: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Design-Ziele

Design-Ziele

Simplicity

Size

Performance

Portability

Embeddability

5 / 34

Page 7: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Design-Ziele

Design-Ziele

Simplicity

Size

Performance

Portability

Embeddability

5 / 34

Page 8: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Design-Ziele

Design-Ziele

Simplicity

Size

Performance

Portability

Embeddability

5 / 34

Page 9: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Design-Ziele

Design-Ziele

Simplicity

Size

Performance

Portability

Embeddability

5 / 34

Page 10: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Wer hat’s erfunden?

Wer hat’s erfunden?

Roberto Ierusalimschy

Waldemar Celes

Luiz Henrique de Figueiredo

6 / 34

Page 11: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Wer hat’s erfunden?

Wer hat’s erfunden?

Roberto Ierusalimschy

Waldemar Celes

Luiz Henrique de Figueiredo

6 / 34

Page 12: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Wer hat’s erfunden?

Wer hat’s erfunden?

Roberto Ierusalimschy

Waldemar Celes

Luiz Henrique de Figueiredo

6 / 34

Page 13: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Wer hat’s erfunden?

7 / 34

Page 14: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 15: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 16: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 17: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 18: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 19: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Features

first-class functions

lexical scoping

proper tail call

coroutines

monkey patching

open source

8 / 34

Page 20: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Portability

Cameras (Canon)

Keyboards (Logitech)

Drucker (Olivetty & Oce)

PSP, PS3, OpenPandora, Nintendo DS

iPhone, Android

9 / 34

Page 21: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Portability

Cameras (Canon)

Keyboards (Logitech)

Drucker (Olivetty & Oce)

PSP, PS3, OpenPandora, Nintendo DS

iPhone, Android

9 / 34

Page 22: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Portability

Cameras (Canon)

Keyboards (Logitech)

Drucker (Olivetty & Oce)

PSP, PS3, OpenPandora, Nintendo DS

iPhone, Android

9 / 34

Page 23: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Portability

Cameras (Canon)

Keyboards (Logitech)

Drucker (Olivetty & Oce)

PSP, PS3, OpenPandora, Nintendo DS

iPhone, Android

9 / 34

Page 24: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Features

Portability

Cameras (Canon)

Keyboards (Logitech)

Drucker (Olivetty & Oce)

PSP, PS3, OpenPandora, Nintendo DS

iPhone, Android

9 / 34

Page 25: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 26: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 27: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 28: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 29: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 30: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 31: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 32: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 33: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 34: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

Projekte

awesome

Grim Fandango

Codea

love (http://stabyourself.net/)

Lego Mindstorms NXT

WoW

renoise

vim, vlc, Wireshark, nmap

luvit

. . .

10 / 34

Page 35: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Intro

Projekte

11 / 34

Page 36: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Outline

1 IntroTIOBE Programming Community IndexDesign-ZieleWer hat’s erfunden?FeaturesProjekte

2 MainHelloDie SpracheMetatafoo

12 / 34

Page 37: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Hello

13 / 34

Page 38: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Hello

Code: ”hello.lua”

1 #!/usr/bin/lua

2

3 -- say hello

4 -- try it out: http://www.lua.org/demo.html

5

6 print("Hello, world!")

14 / 34

Page 39: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 40: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 41: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 42: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 43: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 44: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 45: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 46: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Datentype

nil

bool

number

string

function

coroutine

table

userdata

15 / 34

Page 47: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”scoping.lua”

1 do

2 local x = 1

3 do

4 local x = 3

5 print(x) -- 3

6 y = "global"

7 end

8 print(x) -- 1

9 end

10 print(x) -- nil

11 print(y) -- global

16 / 34

Page 48: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”control1.lua”

1 -- ite and numeric for

2 for i = 1, 100 do

3 if i % 3 == 0 and i % 5 == 0 then

4 print("FizzBuzz")

5 elseif i % 3 == 0 then

6 print("Fizz")

7 elseif i % 5 == 0 then

8 print("Buzz")

9 else

10 print(i)

11 end

12 end

17 / 34

Page 49: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”control2.lua”

1 -- while

2 local x = 1

3 while x < 100 do

4 x = x * 2

5 end

6 print(x)

7

8 -- repeat until

9 repeat

10 local input = io.read()

11 print(input)

12 until input == "exit"

18 / 34

Page 50: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt. . .

19 / 34

Page 51: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt. . .

19 / 34

Page 52: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt. . .

19 / 34

Page 53: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt. . .

19 / 34

Page 54: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

Liste

HashtabelleSetModuleObjekt. . .

19 / 34

Page 55: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelle

SetModuleObjekt. . .

19 / 34

Page 56: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSet

ModuleObjekt. . .

19 / 34

Page 57: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModule

Objekt. . .

19 / 34

Page 58: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt

. . .

19 / 34

Page 59: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Tables

assoziatives Array

jede Value kann Index sein

effiziente Implementierung

DIY Objekt-System

ListeHashtabelleSetModuleObjekt. . .

19 / 34

Page 60: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”list.lua”

1 local list = { "one", "two", "three" }

2 list[4] = "four"

3

4 for i = 1, #list do -- numeric for

5 print(i, list[i])

6 end

7

8 for i, v in ipairs(list) do -- generic for

9 print(i, v)

10 end

11

12 print(list[5]) -- ???

20 / 34

Page 61: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”hash.lua”

1 local hash = {

2 ["null"] = 0,

3 ["eins"] = 1,

4 ["zwei"] = 2

5 }

6 hash["drei"] = 3

7

8 for key, value in pairs(hash) do

9 print(key, value)

10 end

21 / 34

Page 62: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”set.lua”

1 local set = {}

2

3 local x = 0xc3d2

4 local y = 0xcccb

5

6 set[x] = true

7 set[y] = true

8

9 if set[50130] then

10 print("found it!")

11 end

22 / 34

Page 63: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”module.lua”

1 print("Enter your name, please.")

2

3 local name = io.read()

4

5 print(string.format("Hello %s, nice to meet you.", name))

6

7 print("Enter a number, please.")

8

9 local n = io.read()

10 local s = math.sin(n)

11

12 print("Sinus is " .. s)

23 / 34

Page 64: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Die Sprache

Code: ”object.lua”

1 local player = { x = 0 }

2

3 function player.move(self, dx)

4 self.x = self.x + dx

5 end

6 player.move(player, 3)

7

8 -- syntactic sugar

9 function player:move(dx)

10 self.x = self.x + dx

11 end

12 player:move(3)

24 / 34

Page 65: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeqindexnewindex

...

25 / 34

Page 66: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeqindexnewindex

...

25 / 34

Page 67: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

call

addmulconcatmodeqindexnewindex

...

25 / 34

Page 68: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladd

mulconcatmodeqindexnewindex

...

25 / 34

Page 69: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmul

concatmodeqindexnewindex

...

25 / 34

Page 70: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcat

modeqindexnewindex

...

25 / 34

Page 71: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmod

eqindexnewindex

...

25 / 34

Page 72: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeq

indexnewindex

...

25 / 34

Page 73: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeqindex

newindex...

25 / 34

Page 74: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeqindexnewindex

...

25 / 34

Page 75: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Metatables

jeder Table kann einen haben

spezielle Schlussel

calladdmulconcatmodeqindexnewindex

...

25 / 34

Page 76: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”meta1.lua”

1 local pet = {}

2 pet.noise = "squeak"

3

4 function pet:greet()

5 print(self.noise)

6 end

7

8 pet:greet() -- "squeak"

26 / 34

Page 77: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”meta2.lua”

1 local cat = { noise = "miaow" }

2

3 -- make pet prototype of cat

4 setmetatable(cat, { __index = pet })

5

6 cat:greet() -- "miaow"

7 pet:greet() -- "squeak"

27 / 34

Page 78: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”class.lua”

1 Class = {}

2 function Class:new(o)

3 o = o or {}

4 setmetatable(o, self)

5 self.__index = self

6 self.__call = getmetatable(self).__call

7 return o

8 end

9 setmetatable(Class, { __call = function(self, ...)

10 local o = self:new()

11 if o.init then o:init(...) end

12 return o

13 end })

28 / 34

Page 79: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”game1.lua”

1 require "class"

2

3 Enemy = Class:new { strength = 5 }

4 function Enemy:init(x, y)

5 self.x = x

6 self.y = y

7 end

8

9 function Enemy:attack()

10 -- ...

11 end

29 / 34

Page 80: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”game2.lua”

1 Boss = Enemy:new { strength = 100 }

2

3 function Boss:attack()

4 -- some other implementation

5 end

6

7 local enemylist = {

8 Enemy(-10, 10), -- calls init

9 Enemy( 0, 13),

10 Enemy( 10, 10),

11 Boss(0, 5)

12 }

30 / 34

Page 81: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”privacy.lua”

1 -- closures

2 function new_player()

3 local x = 0

4 local function move(dx)

5 x = x + dx

6 print(x)

7 end

8 return { move = move }

9 end

10

11 local player = new_player()

12 player.move(10) -- no colon here!!

31 / 34

Page 82: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Code: ”nicestring.lua”

1 -- python-like string formating

2 getmetatable("").__mod = function(s, a)

3 if not a then

4 return s

5 elseif type(a) == "table" then

6 return s:format(unpack(a))

7 else

8 return s:format(a)

9 end

10 end

11

12 print("0x%02X" % 42) -- 0x2A

32 / 34

Page 83: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Ende

Mechanismen

Flexibilitat

keine vorgeschriebene Herangehensweise

no batteries

33 / 34

Page 84: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Ende

Mechanismen

Flexibilitat

keine vorgeschriebene Herangehensweise

no batteries

33 / 34

Page 85: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Ende

Mechanismen

Flexibilitat

keine vorgeschriebene Herangehensweise

no batteries

33 / 34

Page 86: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Ende

Mechanismen

Flexibilitat

keine vorgeschriebene Herangehensweise

no batteries

33 / 34

Page 87: Themenabend: Luac3d2.de/media/ta-lua/lua.pdfThemenabend: Lua Outline Outline 1 Intro TIOBE Programming Community Index Design-Ziele Wer hat’s erfunden? Features Projekte 2 Main Hello

Themenabend: Lua

Main

Metatafoo

Fragen

Traut Euch!

34 / 34