範囲はある程度知っていると思いますが、いつ、どこで、どのように使用するかについては、まったくわかりません。範囲を「取得」できません。次の例を検討してください。
新しいデータがあるたびに、何らかのスレッドでコールバック関数を呼び出す、制御できないネットワーク ハンドラーがあるとします。
void receivedData(ubyte[] data)
このデータ ストリームには、レイアウトのパケットが含まれています。
{
ushort size;
ubyte[size] body;
}
ただし、ネットワーク ハンドラーはこれを認識しないため、 への呼び出しにdataReceived()
は、1 つまたは 2 つの部分的なパケット、1 つまたは複数の完全なパケット、またはそれらの組み合わせが含まれる場合があります。data.length == 0
簡単にするために、破損したパケットはなく、接続が閉じられたときに を受け取ると仮定しましょう。
私たちが今求めているのは、このすべての混乱を適切な呼び出しに変える美しい D コードです。
void receivedPacket(ubyte[] body)
これを達成するための「ブルートフォース」の方法は確かに考えられます。しかし、ここでおそらく私の混乱が生じます。範囲はこれで役割を果たすことができますか? receivedData()
素敵な範囲で締めくくることができますか?どのように?それとも、これは範囲を使用するような問題ではありませんか? なぜだめですか?
(範囲を使用する方が理にかなっている場合は、自由に例を再定義してください。)