Iteratoren

Iteratoren sind ein übliches Programmierungsmuster, das zum Traversieren einer Liste von Objekten verwendet wird, wenn

  • die Größe der Liste nicht von Beginn an bekannt ist.
  • das gleichzeitige Laden der gesamten Liste in den Speicher zu einer übermäßigen Ressourcenbelegung führen könnte.

Iteratoren bieten zwei Methoden: boolean hasNext() und Object next(). AdWords-Skripts verwenden das Iteratormuster zum Abrufen von AdWords-Entitäten.

Iteratoren unterscheiden sich funktional nicht wesentlich von herkömmlichen Arrays und ergeben möglicherweise einen etwas prägnanteren Code. Vergleichen Sie den Code zum Traversieren eines Arrays…

for (var i = 0; i < myArray.length; i++) {
  var myObject = myArray[i];
}
mit Code, mit dem ein Iterator traversiert wird:
while (myIterator.hasNext()) {
  var myObject = myIterator.next();
}

Im folgenden Codebeispiel wird ein Iterator für alle Kampagnen Ihres Kontos verwendet:

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

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

In AdWords-Skripts können mit Entitäten-Iteratoren häufig nur die ersten 50.000 Entitäten abgerufen werden. Weitere Informationen zu den Einschränkungen finden Sie hier. Wird jedoch iterator.totalNumEntities() aufgerufen, kann die Gesamtzahl der Entitäten ermittelt werden, die der Iterator abgerufen hätte. Dies ist nützlich, wenn Verarbeitungsabläufe aufgeteilt werden sollen. Beispiel:

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();
}

Wenn withLimit() auf einen Selektor angewendet wird, ändert sich der Wert von totalNumEntities() nicht. x und y im folgenden Snippet haben denselben Wert:

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

Um einen Iterator von AdWords-Entitäten zu erhalten, muss zunächst ein Selektor erstellt werden.

Feedback geben zu...

AdWords Scripts
AdWords Scripts