たとえば、画面の端に沿って時計回りにボタンを移動するなど、友達に簡単なコード例を示す必要がありました。確かにこれは非常に単純なことです。いいえ、これが最も単純です。しかし、私はそれに約30分を費やしていることに気づきました. 私は 20 年以上のプロのプログラマーであり、ボタンが正しい方向に飛ぶ前に何度もプログラムを開始する必要さえあったので、私は恥ずかしかったです。そして、私は考えていました、なぜですか?したがって、この種のコードはすぐに正しく理解するのは難しいと推測しました。これは非常に古いスタイルであり、ケースごとに個別に入力し、各チェックを手動で入力する必要があり、各反復を実行して、すべての数字とチェックは正確に正確ですが、コード スタイルの性質上、これを行うのは困難です。
だから私は、ケースの代わりにループを使用する、テンプレートや他のメタプログラミングを使用する、機能的アプローチを使用する、または少なくとも配列を使用するなど、「現代的な」方法に変換する方法はありますか? そして、これには良い方法が見つからないようです。
var mx = screen.width - b.w, my = screen.height - b.h
setInterval(function() {
var step = 3
if (state == 1) {
b.x += step
if (b.x >= mx) b.x = mx, state++
} else if (state == 2) {
b.y += step
if (b.y >= my) b.y = my, state++
} else if (state == 3) {
b.x -= step
if (b.x <= 0) b.x = 0, state++
} else if (state == 4) {
b.y -= step
if (b.y <= 0) b.y = 0, state = 1
}
b.apply()
}, 1)
これは JavaScript です。C では、型について考える必要があるため、すぐに理解するのはさらに困難です。
これが私が自分で思いついたものです...これはおそらく私が達成しようとしていることを示しています。別のアルゴリズムを選択することについて話しているのではありません。むしろ、言語の機能やプログラミング手法を探求することは避けてください。
var D = 3, name = ['x','y'], delta = [D,D,-D,-D],
limit = [screen.width - b.w, screen.height - b.h,0,0]
setInterval(function() {
b[name[0]] += delta[0]
if (delta[0] > 0 && b[name[0]] > limit[0] || b[name[0]] <= 0)
b[name[0]] = limit[0],
[name,delta,limit].some(function(x){ x.push(x.shift()) })
b.apply()
},1)
これにより、少なくともデータがコードから分離され、より簡単に正しく処理できるようになります。最初の試みからうまくいきました。しかし、私はまだ完全に満足していません)