> Tutorial LeekScript
Esta página é válida apenas para LS1.0, em LS1.1 as classes são diretamente utilizáveis: Classes and Objects
Neste artigo, criaremos pseudo OOP (Programação Orientada a Objetos), já que o LeekScript não é uma linguagem orientada a objetos. Primeiro, apresentarei a noção de POO, depois explicarei como o escopo de variável funciona. Para não ser muito teórico, vamos programar uma estrutura chamada "Binary Search Tree", é uma estrutura otimizada para inserção e busca ordenada.
Essa noção é muito importante se você começar a se interessar por outras linguagens como C (++/#), PHP, Java, etc. É uma nova maneira de construir seus programas. Ela apresenta objetos. Com certeza você sabe o que é no dia a dia, é algo transformável/manipulável, mas na programação chamamos de "objeto" uma estrutura formada por variáveis e funções chamadas '''atributos e métodos''. ''. Vamos pegar o exemplo de um carro, ele é caracterizado por uma velocidade, uma aceleração (também não vamos entrar em detalhes) assim como ações como virar, acelerar, frear... Veja como poderíamos representar nosso carro:
Isso permite um código estruturado e limpo. Mas também para simplificar o uso de ações compostas por instruções complexas que ficarão ocultas do usuário. Outra coisa muito importante em OOP é o princípio de encapsulamento... Todos os atributos e métodos não precisam ser manipulados pelo usuário que poderia "quebrar" o objeto se ele não verificar tal e tal coisas. Vamos imaginar que o usuário modifique a velocidade do nosso carro durante o jogo e não leve em consideração a inércia ou qualquer outra coisa, o carro se comportaria de forma estranha, e mesmo isso é apenas uma pequena modificação. O encapsulamento é, portanto, o princípio de tornar partes do objeto invisíveis para o usuário, isso é chamado de atributos/métodos privados, ao contrário, se o usuário tiver a possibilidade de usar atributos/métodos, esses são públicos .
As definições desses objetos são chamadas de "classes", elas são usadas criando uma nova instância da classe como com um tipo normal (números, arrays, strings...). Acontece que na maioria dos compiladores (se não em todos) essa instanciação é implícita: var a = 5; cria uma variável do objeto número com o valor '5'. Falo de objetos numerados por abuso de linguagem. Uma diferença com o OOP são as funções aplicadas a uma variável:
seja a = 1;
//Sem OOP
adicionar(a, 1); // definido pela função (@obj, nbr) { obj += nbr; }
// OOP
a.adicionar(1); // definido pelo método add (nbr) { this += nbr; }
A função 'add' leva um número para adicionar como parâmetro. A diferença entre as duas versões é o contexto, no primeiro caso 'add' não sabe a qual objeto aplicar essas instruções, ele precisa de uma referência a esse número (o parâmetro 'obj'). Já na segunda função, é um método. Portanto, ele conhece o objeto que deve ser modificado, pois 'add' pertence a 'a'. Nota: A sintaxe é totalmente arbitrária, você só precisa entender o princípio.
FYI, 'add' é público se você seguiu, pois o usuário pode chamar a função.
Você provavelmente já usou variáveis globais, elas permitem que você guarde as informações entre as rodadas e possa acessá-las em qualquer lugar do seu código. O que as diferencia das variáveis "locais" é o seu "escopo". Pegue o seguinte código:
global _global;
função escopoTeste () { var localFunction; }
var localMain;
Cada uma das variáveis acima tem um escopo diferente: _global é acessível em qualquer lugar em todas as torres, localMain é acessível apenas no bloco principal (não em funções), localFunction é acessível apenas na função "testScope". O escopo também se aplica a funções, de fato, scopeTest é acessível a todas as torres de qualquer lugar, enquanto uma função anônima só é acessível no espaço onde foi criada (como uma variável).
O escopo de uma variável se aplica a todos os blocos (símbolo do bloco: '{' e '}' ). Assim, uma variável criada em um if, a while, do/while, a for não é acessível fora dela:
se for verdade) { var localIf = 0;// Criação de localIf } // fim da vida de localIf
debug(localIf); // Erro: (localIf) variável ou função desconhecida
for (var i = 0; i < 5; ++i) { // Cria i
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.