Node.JS
特にノンブロッキング スタイルの作業を考える場合、コールバックはコーディングの要件としてますます重要になっています。しかし、多くのコルーチン コールバックを記述すると、すぐに読み返すことが難しくなります。
たとえば、次のPyramid Of Doom のようなものを想像してください。
// This asynchronous coding style is really annoying. Anyone invented a better way yet?
// Count, remove, re-count (verify) and log.
col.count(quertFilter, function(err, countFiltered) {
col.count(queryCached, function(err, countCached) {
col.remove(query, function(err) {
col.count(queryAll, function(err, countTotal) {
util.log(util.format('MongoDB cleanup: %d filtered and %d cached records removed. %d last-minute records left.', countFiltered, countCached, countTotal));
});
});
});
});
は頻繁に目にするものであり、簡単に複雑になる可能性があります。
すべての関数が少なくとも数行長くなると、関数を分離することが可能になり始めます。
// Imagine something more complex
function mary(data, pictures) {
// Do something drastic
}
// I want to do mary(), but I need to write how before actually starting.
function nana(callback, cbFinal) {
// Get stuff from database or something
callback(nene, cbFinal, data);
}
function nene(callback, cbFinal, data) {
// Do stuff with data
callback(nini, cbFinal, data);
}
function nini(callback, data) {
// Look up pictures of Jeff Atwood
callback(data, pictures);
}
// I start here, so this story doesn't read like a book even if it's quite straightforward.
nana(nene, mary);
しかし、常に多くの通過変数が発生しています。他の関数が間に書かれていると、これは読みにくくなります。関数自体は、独自のファイルを提供することを正当化するには、それ自体では重要でない可能性があります。