Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/html/pontshbr/www/perfis/colPerfil.inc.php on line 22

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/html/pontshbr/www/truques/colunaTruques.inc.php on line 23

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/html/pontshbr/www/tutoriais/colunaTutoriais.inc.php on line 25

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/html/pontshbr/www/sources/colunaSources.inc.php on line 25
HOME | TUTORIAIS
Objeto array - Arrays X Objetos
por Helen Triolo

1 / 2 / 3

 

Tomando o exemplo do tutorial anterior, uma Array de arrays, você pode notar que, ainda que seja um modo eficiente de economizar dados, não é sempre fácil lembrar qual indicador vai com que. Para obter o montante doado por um indivíduo, por exemplo, você tem que se lembrar que aquele "amount" é o 3º elemento em cada Array. Seria mais fácil lembrar que esse ou aquele valor pode ser acessado utilizando-se o string "amount" no lugar de index=2.

Criar uma classe e um objeto daquela classe

Ao invés de usar uma Array multidimensional, podemos, então, criar um objeto com esse construtor para definir todas as propriedades iniciais do objeto Doador:

function Donor(firstname, lastname, amount, state) {
this.firstname = firstname;
this.lastname = lastname;
this.amount = amount;
this.state = state;
}

Para criar um doador individual, utilizamos esse código:

firstDonor = new Donor("John","Anderson",18,"Ohio");

o qual parece consideravelmente semelhante ao modo com que montamos a ordem na página anterior. Mas agora nós podemos obter o montante de doação de John assim:

trace("John Anderson donated $" + firstDonor.amount);

ao invés da via mais obscura de "entries[0][2]".

Configurar uma Array daqueles objetos

Assim, temos um objeto doador, mas o que queremos realmente é manter uma coleção deles. Para fazer isso, salvamos todos numa Array. Terminamos com uma Array de objetos em vez de uma Array de arrays, como na página anterior. Aqui está o código para fazer isso:

allDonors = [];
allDonors.push(new Donor("John","Anderson",18,"Ohio"));
allDonors.push(new Donor("Carly","North",225,"Florida"));
allDonors.push(new Donor("Simon","Beard",200,"Connecticut"));
allDonors.push(new Donor("Francine","Smith",35,"Alaska"));
allDonors.push(new Donor("Jack","Ferguson",415,"Maine"));

Qual a vantagem de fazer isso? Em primeiro lugar, nós podemos acessar os elementos através de nomes lógicos, em vez de através de índices numéricos aninhados, como vimos acima. Por outro lado, uma vez que temos um objeto de classe definida (o Doador, nesse caso), podemos também criar métodos que podem ser aplicados a qualquer objeto daquela classe.

Aplicar um método para uma classe

Por exemplo, se quisermos solicitar de todos os nossos doadores alguma porcentagem a mais sobre o que eles deram nos últimos tempos (sórdido, muito sórdido...), nós poderíamos criar um método findNewAmount que calcularia isto e utilizá-lo para imprimir uma lista de quantias a solicitar da próxima vez:

function FindNewAmount(percent) {
return Math.round(this.amount * (1 + percent/100));
}
Donor.prototype.findNewAmount = FindNewAmount;

for (i in allDonors) {
// show a 20% increase
trace("Requested contribution for " + allDonors[i].firstname + " " +
allDonors[i].lastname + " is $" + allDonors[i].findNewAmount(20));
}

Assim, agora temos uma array lógica e um modo perfeito para aplicar métodos a ele. Infelizmente, no Flash 5, talvez tivéssemos desistido de fazer isso devido a dificuldade para ordenar usando o método de classificação Objeto Array (desde que ele só se aplica a Arrays verdadeiras, não a objetos). Mas no Flash MX nos foi dado um método novo, sortOn, que é usado para Arrays de objetos.

Classificar uma Array de objetos

Como você pode ver olhando a saída (no final da página) do código seguinte, sortOn trabalha bem para classificar campos de strings, mas não campos numéricos. Para produzir uma ordenação numérica, nós arrancamos o método sortOn do Paul Willoughby do layer51 e o aplicamos:

function Donor(firstname, lastname, amount, state) {
this.firstname = firstname;
this.lastname = lastname;
this.amount = amount;
this.state = state;
}
allDonors = [];
allDonors.push(new Donor("John","Anderson",18,"Ohio"));
allDonors.push(new Donor("Carly","North",225,"Florida"));
allDonors.push(new Donor("Simon","Beard",200,"Connecticut"));
allDonors.push(new Donor("Francine","Smith",35,"Alaska"));
allDonors.push(new Donor("Jack","Ferguson",415,"Maine"));

function FindNewAmount(percent) {
return Math.round(this.amount * (1 + percent/100));
}
Donor.prototype.findNewAmount = FindNewAmount;

trace("Original data:");
for (i=0; i<allDonors.length; i++) {
trace(i + " A contribuição requerida a" +
allDonors[i].firstname + " " + allDonors[i].lastname + " is $" +
allDonors[i].findNewAmount(20));
// essas três últimas linhas são juntas
}

allDonors.sortOn("lastname");
trace("\nAfter sort on lastname:");
for (i=0; i<allDonors.length; i++) {
trace(i + " A contribuição requerida a" + allDonors[i].firstname + " " +
allDonors[i].lastname + " is $" + allDonors[i].findNewAmount(20));
// essas duas últimas linhas são juntas
}

// sort numéricos necessitam de uma função customizada
// não funcionará:
allDonors.sortOn("amount");
trace("\nAfter sort on amount (não funciona com o sortOn regular:)");
for (i=0; i<allDonors.length; i++) {
trace(i + " A contribuição requerida a" + allDonors[i].firstname + " " +
allDonors[i].lastname + " is $" + allDonors[i].findNewAmount(20));
// essas duas últimas linhas são juntas
}

// esse funcionará:
// novo método sortOn de layer51.com
Array.prototype.sortOn = function(p) {
Array.$sortprop = p;
var sortfunc = function (a,b) {
var p = Array.$sortprop;
return b[p] < a[p];
}

this.sort(sortfunc);
delete Array.$sortprop;
}

allDonors.sortOn("amount");
trace("\nAfter sort on amount (com o protótipo sortOn de PaulW):");
for (i=0; i<allDonors.length; i++) {
trace(i + " A contribuição requerida a" + allDonors[i].firstname + " " +
allDonors[i].lastname + " is $" + allDonors[i].findNewAmount(20));
// essas duas últimas linhas são juntas
}

Que produz essa saída:

Dados originais:
0 A contribuição requerida a John Anderson é $22
1 A contribuição requerida a Carly North é $270
2 A contribuição requerida a Simon Beard é $240
3 A contribuição requerida a Francine Smith é $42
4 A contribuição requerida a Jack Ferguson é $498

Após classificação pelo sobrenome:
0 A contribuição requerida a John Anderson é $22
1 A contribuição requerida a Simon Beard é $240
2 A contribuição requerida a Jack Ferguson é $498
3 A contribuição requerida a Carly North é $270
4 A contribuição requerida a Francine Smith é $42

Após classificação sobre a quantia (não funciona com o sortOn regular)
0 A contribuição requerida a John Anderson é $22
1 A contribuição requerida a Simon Beard é $240
2 A contribuição requerida a Carly North é $270
3 A contribuição requerida a Francine Smith é $42
4 A contribuição requerida a Jack Ferguson é $498

Após classificação sobre a quantia (com o protótipo sortOn de PaulW)
0 A contribuição requerida a John Anderson é $22
1 A contribuição requerida a Francine Smith é $42
2 A contribuição requerida a Simon Beard é $240
3 A contribuição requerida a Carly North é $270
4 A contribuição requerida a Jack Ferguson é $498


Tradução:
Sérgio Ramalho

 

Estruturas / Classificar (sorting) / Array e Objetos


Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
0 comentário