孤独プログラマー譚

孤独死が近い。

ループの中のif文が現れたら、Observerパターンを検討する

やはり自分はObserverパターンを理解していなかった。

Observerパターンは、多種多様な輩をループで回す時、真価を発揮する。

以下、よく見るケース。JavaScriptで。

function Student(name, sex) {
  this.name = name
  this.sex = sex
}

var students = [
  new Student('野比のび太', 'boy'),
  new Student('源静香', 'girl'),
  new Student('剛田武', 'boy'),
  new Student('骨川スネ夫', 'boy')
]

for (var i = 0; i < students.length; i++) {
  if (students[i].sex === 'boy') {
    console.log('ムフフ、女子の着替え覗いちゃおうかなぁ。')
  } else if (students[i].sex === 'girl') {
    console.log('変態男子!ケダモノ!')
  }
}

ムフフ、女子の着替え覗いちゃおうかなぁ。
変態男子!ケダモノ!
ムフフ、女子の着替え覗いちゃおうかなぁ。
ムフフ、女子の着替え覗いちゃおうかなぁ。

ループの中にif文。分岐が多いのは良くない。
これがネストしたり、else if が何個も続くと、見てるだけで気分が悪くなってくる。

こういう時は、Observerパターンを使う。

function Boy() {
  Student.apply(this, arguments)
}
Boy.prototype.say = function () {
  console.log('ムフフ、女子の着替え覗いちゃおうかなぁ。')
}

function Girl() {
  Student.apply(this, arguments)
}
Girl.prototype.say = function () {
  console.log('変態男子!ケダモノ!')
}

var students = [
  new Boy('野比のび太', 'boy'),
  new Girl('源静香', 'girl'),
  new Boy('剛田武', 'boy'),
  new Boy('骨川スネ夫', 'boy')
]

for (var i = 0; i < students.length; i++) {
  students[i].say()
}

ムフフ、女子の着替え覗いちゃおうかなぁ。
変態男子!ケダモノ!
ムフフ、女子の着替え覗いちゃおうかなぁ。
ムフフ、女子の着替え覗いちゃおうかなぁ。

最後のfor文からifが消えた。

Observerパターンが実はとんでもない汎用性があることに今さら気付いた。

デザインパターンは言語を跨いで活用できるから、学習のコスパが良い!