Ahhh Javascript… sim, aquela “linguagenzinha” que você usa para validar seus formulários… Se orienta rapaz! Javascript é muito mais que isso e fica melhor ainda orientado a objetos.
Vou começar com esse post uma “série” sobre Javascript e como podemos usa-lo facilitar e melhorar atividades corriqueiras.
Se você não sabe o básico de Javascript (e Programação) recomendo um grande amigo antes de continuar a ler esse post, Google.
Era uma vez um código porco… (ou não)
Se você está lendo essa parte presumo que você já perdeu muitas noites fazendo Hello World, Hello Galaxy, Hello Universe e etc., logo você já fez muito POG, logo você tem muito código porco espalhado por esse mundão. Veja bem, de forma alguma digo que você nunca mais vai fazer sujeira com o que eu vou apresentar a seguir, a orientação a objetos não existe para exterminar código ruim, ela existe para satisfazer e otimizar suas necessidades de desenvolvimento. Se aquele código porco resolveu seu problema quando foi necessário, ótimo, cabe a você depois tentar melhorá-lo (se possível).
Mas vamos ao que interessa, certa vez num curso de UML que fiz, o instrutor perguntou a turma algo que me deixou realmente intrigado… O que é uma instância?
Porque fiquei intrigado? Porque nem eu e nem ninguém na turma sabia responder com convicção, uma pergunta simples pra quem trabalha com orientação a objetos, “O que é uma instância de um objeto?”. Teve gente dizendo que era cópia do objeto, outros disseram que era uma referência, etc.. Se essas respostas estão corretas ou não são outros 500, mas até hoje ninguém conseguiu deixar mais claro para mim o que é uma instância do que aquele professor, foi simples e direto:
Instância é um instante do objeto.
Poesia para os ouvidos, quando você instância um objeto ele não é uma cópia da classe, ele não é independente daquela classe, ele é simplesmente um instante do objeto. Eu manipulo aquele objeto dizendo que naquele instante a classe se comporta da forma X.
Vamos então a prática.
Objetos e Classes
O Javascript contém diversos objetos, muitos deles vocês já devem conhecer, como por exemplo String, Math, Date, Boolean, Number, etc., mas também permite que você crie seus objetos a partir de suas classes. Não sabe criar classes? Uhm, Ok, veja um exemplo abaixo:
function MinhaClasse() {
//-- Implementação
}
O que? É igual a uma função? Isso mesmo jovem, a implementação da classe é idêntica a de uma função, a mágia está nesse próximo exemplo:
function MinhaClasse() {
function meuMetodo() {
//-- Implementação do método
}
}
Viu como é simples? A classe já existe, para instância-la usamos o operador new como em qualquer outra linguagem (OO):
var objClasse = new MinhaClasse();
objClasse.meuMetodo();
Legal, bacana, mas até agora nada de interessante e melhor do que eu faço hoje. Então que tal usarmos encapsulamento? Nossos queridos Getters e Setters:
function MinhaClasse() {
//-- Aqui setamos as variáveis
var ID;
var txtNome;
var txtEmail;
//-- Declaramos ela no escopo da classe
this.getID = getID;
this.getNome = getNome;
this.getEmail = getEmail;
this.setID = setID;
this.setNome = setNome;
this.setEmail = setEmail;
//-- E aqui implementamos
function getID() {return ID;}
function getNome() {return txtNome;}
function getEmail() {return txtEmail;}
function setID(_ID) {ID = _ID;}
function setNome(_Nome) {txtNome = _txtNome;}
function setEmail(_Email) {txtEmail = _txtEmail;}
}
Para consumir essa classe é mais simples ainda, veja:
var objClasse = new MinhaClasse();
objClasse.setID(10);
alert(objClasse.getID());
O uso de encapsulamento e classes em seus projetos podem te ajudar a organizar melhor os dados tanto para manipulação interna (na classe) quanto para distribuição (chamadas de outras funções/classes).
Podemos melhorar a organização de seu código usando outro recurso bem interessante, Literais!
Literais…
Objetos Literais são conjuntos de propriedades com valores préviamente setados, o tipo de dado dessa propriedade pode ser tanto primitivo do javascript quanto uma classe que você criou e etc.. Seu principal e melhor uso é para transporte de grandes quantidade de informações como parametros por exemplo, vamos ilustrar vendo a sintaxe:
var objLiteral = {
ID : 10, //-- Primeiro você declara o nome da variável, adiciona dois pontos ":" separando do valor da propriedade
txtNome : "Edjan", //-- Para criar outra propriedade basta separar por virgula
txtEmail : "edjan@labirintorium.com.br"
}
Está achando que já viu isso em algum lugar né? Literais são usados exaustivamentes em implementações de jQuery, Mootools, Dojo, etc., além de ser a base da estrutura do JSON (Não sabe o que é? Fica pra outro artigo).
Para usar os dados da propriedade também é muito simples:
alert("ID: " + objLiteral.ID + " - Nome: " + objLiteral.txtNome + " - Email: " + objLiteral.txtEmail);
É bem importante entender a sintaxe, funcionamento e o uso do Literal para os nossos proximos passos no Javascript, no próximo artigo vamos falar sobre prototipagem, herança e vamos começar a brincar com JSON e Ajax.
Abraços :}