Iteradores

Os iteradores são um padrão comum de programação usado para atravessar uma lista de objetos quando:

  • o tamanho da lista não é conhecido desde o início;
  • carregar a lista inteira na memória de uma só vez pode usar excessivamente os recursos.

Os iteradores expõem dois métodos: boolean hasNext() e Object next(). Os scripts do Google AdWords usam o padrão do iterador para coletar entidades do Google AdWords.

Funcionalmente, os iteradores não são muito diferentes das matrizes comuns e podem tornar seu código mais conciso. Compare o código que atravessa uma matriz:

for (var i = 0; i < myArray.length; i++) {
  var myObject = myArray[i];
}
com o código que atravessa um iterador:
while (myIterator.hasNext()) {
  var myObject = myIterator.next();
}

O código a seguir demonstra o uso de um iterador em todas as campanhas na sua conta:

var campaignIterator = AdWordsApp.campaigns().get();

while (campaignIterator.hasNext()) {
  var campaign = campaignIterator.next();
  Logger.log(campaign.getName() +
      "; active? " + campaign.isEnabled() +
      "; budget=" + campaign.getBudget());
}

Nos scripts do Google AdWords, os iteradores de entidades geralmente são limitados a buscar apenas as primeiras 50 mil entidades (consulte Limites para mais informações). No entanto, é possível descobrir o número total de entidades que o iterador buscaria chamando iterator.totalNumEntities(). Isso se você quiser dividir o trabalho. Por exemplo:

var keywords = campaign.keywords()
    .withCondition("Ctr > 0.01")
    .forDateRange("YESTERDAY")
    .get();
// Did we fetch more keywords than we can handle?
if (keywords.totalNumEntities() > 50000) {
    // Adjust the condition to fetch fewer keywords.
    keywords = campaign.keywords()
      .withCondition("Ctr > 0.015")
      .forDateRange("YESTERDAY")
      .get();
}

A aplicação de withLimit() a um seletor não altera o valor de totalNumEntities(). x e y no snippet a seguir terão o mesmo valor:

var x = AdWordsApp.keywords().get().totalNumEntities();
var y = AdWordsApp.keywords().withLimit(5).get().totalNumEntities();

Para conseguir um iterador de entidades do Google AdWords, é necessário primeiro gerar um Seletor.

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.