[Script] Switch-case em Lua? |
![]() ![]() « Citoyen » 1591055100000
| 1 | ||
Boa noite! Espero que vejam isso à noite. Quem nunca viu o laço condicional switch-case em alguma outra linguagem de programação? Code de exemplo 1 2 3 4 5 6 7 8 9 10 11 switch(2) { Em alguns casos é melhor usar um Switch-case do que um If-else, por exemplo, como por exemplo se sua condicional for avaliar um só valor. Mas nossa querida Lua não possui esse laço. :( Então decidi criar um pseudo-switch-case usando funções, caso gostem podem usar :) Script Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 local switch= {cases= {}} Versão linha-única Code Lua 1 local switch= {cases= {}} switch.case= function(caso, callback) table.insert(switch.cases, { caso= caso, callback= callback }) end switch.default= function(callback) switch.cases.default= callback end switch.exec= function(caso) local default= true for pos= 1, #switch.cases do if switch.cases[pos].caso== caso then switch.cases[pos].callback() default= false end end if type(switch.cases.default)=="function" and default then switch.cases.default() end switch.cases= {} end Vamos ver como funciona, vejamos as funções: "Cria um case em seu switch" Parâmetros: - valor (any): o valor que será usado para fazer a análise - callback (function): a função que será chamada caso sua condicional seja validada "Cria um default em seu switch" Parâmetros: - callback (function): a função que será chamada casos seus cases não seja validados Inicia seu laço switch-case Parâmetros: - value (any): o valor que será analisado Vamos refazer aquele exemplo com as funções: Code Lua 1 2 3 4 5 6 7 8 9 10 switch.case(2, function() Saiu até com uma linha a menos :) Obs: recomendo que dê uma pesquisada na net se não sabe o que é um switch-case, é necessário que saiba como funciona o "original" antes de usar este pseudo. Obs 2: se for possível, comentem se seria necessário um switch-case na Linguagem Lua, na minha opinião, sim ;) Dernière modification le 1591182780000 |
![]() ![]() « Citoyen » 1591057080000
| 1 | ||
Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 local function switch() faz a mesma coisa que o seu ... De toda forma, switch-cases em Lua não são realmente necessários, claro que usar um monte de ifs deixa feio mas perde a performance usar várias funções só para testar um valor ... Em python eu também tinha feito um switch case onde vc podia fazer: Code Python 1 2 3 4 5 6 option = switch(input()) O jeito para implementar switch-cases é baixar o código fonte do lua e compilar sua própria versão, foi isso que fiz para corrigir o problema do metamethod __len no lua 5.1 Dernière modification le 1591057620000 |
![]() ![]() « Citoyen » 1591062540000
| 0 | ||
Contistente3 a dit : Achei o seu bem interessante, vou até testar. E sobre o Python, eu pretendo aprender também, e vou voltar nesse tópico só pra entender o que você escreveu kkkkk @edit: gostei do seu código, consiso e funcional :) @edit2: sua opinião faz sentido de Lua não precisar. If-else de mais fica realmente estranho. Em Lua nem tanto assim, até porque sua sintaxe é bem mais bonita (if/elseif/then/end), então demais não ficaria uma monstruosidade. Mas, por exemplo, em Javascript aquele jogo de {} as vezes fica estranho, ainda bem que Js tem switch kkkk Dernière modification le 1591182540000 |