ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

iterator作った #82

今日やったこと

iteratorつくった

iteratorよくわからなかったので実際に書いてみました。急ぎでドカドカ書いただけなので汚い…。

// 配列作ってiteratorで全件console.log
const products = ['iPhone', 'iPod', 'iPad', 'Mac', 'AppleWatch']

const productsIterator = products[Symbol.iterator]()

let currentProduct = productsIterator.next()
while (!currentProduct.done) {
  console.log(currentProduct.value)
  currentProduct = productsIterator.next()
}

まずは普通に配列をiteratorで回してみた。

まぁJavaとかで触ったiteratorと同じ印象。というかどの言語で書いたってこうなるよな、と言う感じ。

次はiterableなクラスを書いてみた。

// なにかしら商品の在庫を配列で保持するみたいな想定のクラス
class Stock {
  constructor () {
    this.stocks = []
  }

  add (productName) {
    this.stocks.push(productName)
  }

  // iteratorの実装
  [Symbol.iterator] () {
    let currentIndex = 0

    return {
      next: () => {
        if (this.stocks.length <= currentIndex) {
          return {
            value: undefined,
            done: true
          }
        } else {
          return {
            value: this.stocks[currentIndex++],
            done: false
          }
        }
      }
    }
  }
}


const myStock = new Stock()
myStock.add('AppleWatch')
myStock.add('iMac')

for (let item of myStock) {
  console.log(item)
}

カンタンですね。やっぱり読んでいてよくわからない時は書くに限りますね。いい感じ。

ES6を書くのに必要だったのでES6 → ES5なテンプレ的なのを作った

腐るほどありそうですが…。

github.com

npm run buildでsrc配下のファイルをトランスパイルしてbuildに出力するだけです。

…これわざわざテンプレとか作る必要ない気がするw

雑談

埼玉の山奥にかき氷を食べに行ってました。

オール下道で秩父まで…。

近くのカーシェアステーションに入った新型フリードに乗っていきました。

Honda SENSINGとかいうのがついてて、自動車専用道路とかでは車線認識して勝手にハンドルを切ってくれたり、メーターパネルには前方のカメラで認識した交通標識の情報が表示されたりしてすごかったです。

こういう最新装備たくさんのクルマ大好き。

インスタ映えかき氷🍧 #かき氷

Kota Nonakaさん(@uutarou10)がシェアした投稿 -

なんかすごかったです。量多いけど…