Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Escopo

Aula 6

Vimos na aula anterior sobre variáveis, e vimos também, bem superficialmente, como declarar variáveis como locais.

Você pode se perguntar: "Qual a utilidade de uma variável local?", "O que ela tem de diferente de uma variável global?" ou "Se elas são tão importantes, por que quase ninguém usa?".

Vamos por passos. Imagine a seguinte situação: "Você tem uma variável chamada var, e ela vale 1, mas em certo ponto do script você quer que ela receba o valor 2, execute alguma coisa (Como um print) e, depois que executar, ela retorne ao valor anterior (1).". Um dos modos de fazer isto é usando uma outra variável temporária para armazenar o valor antigo, ficando assim:


var = 1

temp_var = var

var = 2

print(var)

var = temp_var

temp_var = nil

print(var)

Veja que o código possui 7 linhas para fazer algo tão simples, por isso usar a variável temporária foi uma idéia de girico chamada carinhosamente de Gambiarra. Vamos fazer a mesma coisa que antes, mas agora do modo "correto":

var = 1

do

  local var = 2

  print(var)

end

print(var)

Observe que agora, mesmo tendo ficado com quase o mesmo número de linhas, está mais "charmoso". Vamos agora entender o do e o end. O do é uma estrutura de controle (Abre/Fecha um Escopo) que abre um novo escopo. O end é uma estrutura de controle (Abre/Fecha um Escopo) que fecha o escopo mais alto. Você não deve ter entendido. Imagine que os escopos são como uma pirâmide, que começa inicialmente no andar 0 (Estes números são "imaginários", somente para facilitar o entendimento). As estruturas de controle tem o poder de construir ou destruir um degrau desta pirâmide, no caso o do constrói um andar e o end destrói o andar mais alto da pirâmide. Vamos tentar entender:
-- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0.
Importante: Você deve terminar no andar que começou, ou seja, no andar 0. Vamos ver o mesmo código um pouco maior:
-- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. do -- Construímos mais um andar. Agora estamos no andar 2. do -- Construímos mais um andar. Agora estamos no andar 3. end -- Destruímos o andar 3 e voltamos para o 2. end -- Destruímos o andar 2 e voltamos para o 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0.
A definição ideal para escopo (Em Lua) seria: Até onde as variáveis locais são alcançáveis. Isso porque se você estiver no andar 1 e tiver declarado uma variável no andar 2, quando o andar 2 tiver sido destuido pelo end, a variável será apagada e você não poderá mais chamá-la no andar 1, embora você possa chamar variáveis do andar 1 se estiver no andar 2. Se esta variável existir no andar 1 e no 2, vai sempre pegar a que estiver mais perto (No caso, a do andar 2). Se existir uma local alcançável e uma global, sempre pegará a local ao invés da global. A global só será pega se não houver nenhuma local alcançável. Você pode declarar uma variável local em um andar e modificar seu valor em outro escopo. Esta é uma tática muito útil:

var = 1

do

  local var

	do

	  var = 2

	end

	do

	  print(var)

	end

end

print(var)

Preste bastante atenção quanto à isto:

var = 1

do

	do

	  local var = 2

	end

	do

	  print(var)

	end

end

Se você está pensando que o valor escrito será 2, está muito enganado. A variável local "var" do primeiro andar 2 será apagada assim que o end destruir o andar, então o valor escrito será 1. Essa "pegadinha" pode frustrar vocês, então prestem atenção. Vale lembrar que, como as funções são armazenadas em variáveis, elas também podem ser locais:

teste = function() end -- Variável Global

function teste() end -- Variável Global

local teste = function() end -- Variável Local

local function teste() end -- Variável Local

OBS: Toda Estrutura de Controle deve terminar com o end. São estruturas de controle:
  • do
  • function
  • while
  • repeat
  • if
OBS: O repeat é um caso especial e não usa end para finalizar o escopo. Ele usa o until. Veremos as 4 últimas em aulas futuras. bye1.gifExercício Descubra o que acontece em cada um dos casos e por quê:

var = 1

local var = 2

print(var)


var = 1

do

  local var = 2

end

print(var)


var = 1

local var

do

  var = 2

end

print(var)


var = 1

local var = 2

do

  print(var)

end


var = 1

do

  local var = 2

	do

	  var =  3

	end

  print(var)

end

Creditos:

99% Skyen Hasus

1% Vittu

Editado por Vittu (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

essa aula vai chegar ate o 10 se deixar :S

Oque aconteceu com a assinatura antiga?

drama3.gif

Eu editei Prayboy Fucking You the drama

Pow se te ajudei clickar rep_up.png nao vai quebrar a mão

Att: Grimmjow

Link para o post
Compartilhar em outros sites

Ele ta ensinando fazer script mais muita gente n intende "A MAIORIA DAS PESSOAS PEGAM PRONTO OS SCRIPTS"

Oque aconteceu com a assinatura antiga?

drama3.gif

Eu editei Prayboy Fucking You the drama

Pow se te ajudei clickar rep_up.png nao vai quebrar a mão

Att: Grimmjow

Link para o post
Compartilhar em outros sites

Não tem como por em só um tópico, enfim se tiver ensinando há maioria pra mim esta bom.

Edit: quem deseja ter seus propios sistemas e ser um grande programmer um dia precisa aprender LUA então não vem com essa, não é todo mundo que coloca seus scripts para ser free use.

Edit2:

Novatos que estão disposto a aprender, script concerteza sim. você falou que é scripter entao você nunca leu um tutorial para aprender, enfim você nunca foi "Iniciante"

Vamos matar essa discusão por MP.

Sem mais.

Editado por Vittu (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

se fosse em um so topico bixao ficaria 30 min abaixando a pagina

Edit: mais voce nao acha que e muito dificil um iniciante aprender isso?? pra mim e facil pq eu so scripter e ja postei muitos scripts aqui mais pra novatos eles nem le ^^

Editado por Grimmjow (veja o histórico de edições)

Oque aconteceu com a assinatura antiga?

drama3.gif

Eu editei Prayboy Fucking You the drama

Pow se te ajudei clickar rep_up.png nao vai quebrar a mão

Att: Grimmjow

Link para o post
Compartilhar em outros sites
  • Administrador

Que vá até a décima, quanto mais aprendizado melhor!

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites
  • 2 months later...

eu estou gostando.. e aprendendo gostaria de saber se oque estou fazendo está correto.

Boa Aula e bem explicada!

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo