A partir de hoje iniciaremos uma série de posts falando sobre as novidades da nova versão do Javascript, conhecida como ES6 (EcmaScript 6). Que esta recheada de novidades e contemplando features muito legais como você verá na série.
Como post de abertura vou falar hoje sobre iterators.
O que são?
Iterator é um objeto com uma determinada interface. E essa interface consiste de um método chamado next() que retorna um objeto como resultado.
Esse objeto de resultado, tem duas propriedades value referente ao valor corrente e done que é um valor booleano qual é setado para true quando não existem mais valores para serem retornados.
O iterator mantém uma referência à posição correta do próximo valor dentro da coleção de valores. Deste modo, toda vez que o método next() é chamado ele retorna o valor correto. Caso o método next() for chamado após o último valor ser retornado o iterator irá retornar o objeto de resultado com os seguintes valores: done = true e value = undefined.
Show me the code!
Com esse entendimento vamos ver na prática a implementação de um iterator:
var criarIterator = function(items){
var i = 0;
return {
next: function(){
var done = (i>= items.length);
var value = !done ? items[i++] : undefined;
return {
done: done,
value: value
};
}
}
};
var iterator = criarIterator([1, 2, 3]);
console.log(iterator.next()); // "{ value: 1, done: false}"
console.log(iterator.next()); // "{ value: 2, done: false}"
console.log(iterator.next()); // "{ value: 3, done: false}"
console.log(iterator.next()); // "{ value: undefined, done: true}"
Simples, neh!?
Imagino que se você tenha conhecimentos em Java ou C# já tenha se perguntado, será? E a resposta é sim! Iterator em Javascript funciona de uma maneira bem semelhante ao iterator dessas linguagens.
Legal! Mas e onde eu uso isso?
Iterator é uma peça fundamental na nova forma de manipular coleções de dados no ES6. Sendo assim, todos os tipos de coleções (Arrays, Sets, Maps e até mesmo Strings) já vem com essa interface implementada. Liberando novas formas de interação com esses objetos.
Além disso um bom entendimento sobre iterators irá te dar uma base sólida e te ajudar muito no entendimento de outras features do ES6. Assim como collections, for of e generators que serão assuntos dos próximos posts da série.
Até a próxima!