איטרטורים

מחזוריים הם תבנית תכנות נפוצה שמשמשת לסריקה של רשימת אובייקטים כאשר

  • יכול להיות שהגודל של הרשימה לא ידוע מראש.
  • טעינה של כל הרשימה לזיכרון בבת אחת עשויה להיות יקרה מדי מבחינת משאבים.

למערכי Iterator יש שתי שיטות: boolean hasNext() ו-Object next(). סקריפטים של Google Ads משתמשים בתבנית Iterator כדי לאחזר ישויות של Google Ads.

מבחינה פונקציונלית, מערכי איטראציה לא שונים בהרבה מערכי רגילים, והם יכולים לשפר את אופן הכתיבה של הקוד. השוואה בין הקוד שחוזר על מערך:

for (var i = 0; i < myArray.length; i++) {
  let myObject = myArray[i];
}

עם קוד שחוזר על איטרטור:

while (myIterator.hasNext()) {
  let myObject = myIterator.next();
}

הקוד הבא מדגים את השימוש ב-iterator בכל הקמפיינים בחשבון:

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

while (campaignIterator.hasNext()) {
  let campaign = campaignIterator.next();
  console.log(`${campaign.getName()}; active? ${campaign.isEnabled()}; ` +
      `budget=${campaign.getBudget().getAmount()}`);
}

אפשר גם להשתמש בחזרה (iteration) מובנית ב-JavaScript:

for (const campaign of AdsApp.campaigns()) {
  console.log(`${campaign.getName()}; active? ${campaign.isEnabled()}; ` +
      `budget=${campaign.getBudget().getAmount()}`);
}

החלת withLimit() על בורר לא משנה את הערך של totalNumEntities(). הערך של x ו-y בקטע הקוד הבא יהיה זהה:

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

כדי לקבל Iterator של ישויות Google Ads, קודם צריך ליצור Selector.