きっかけ2016年のTEDインタビュー(14:10)で、Linus Torvaldsは、コーディングにおける自分の考えるgood taste(良いセンス)について語っている。例として、単方向リンクリストから要素を削除する2つの実装を紹介している(以下に再掲)。リストの先頭要素を削除する際、一方の実装では特別な場合分けが必要で、もう一方では不要だ。もちろん、Linusが好むのは後者だ。mkirchner/linked-list-good-taste: Linus Torvaldsの「good taste」に関するリンクリストの議論を解説(github.com)気づきここから得られる気づきは、こういうことかもしれない。ノードを二次元的なものと見なすなら(ノードの中には線形に格納された情報が含まれている)、そのメンバーを操作するには単一ポインタがエレガントな方法だろう。ノードをつないでリンクリストにすると、構造全体は三次元的になる。だとすれば、そのメンバーを操作するには二重ポインタがエレガントな方法なのかもしれない。これらは全部、私がでたらめを言っただけで、検証もしていない。ただし、彼が例にしているのは順序付きリンクリスト、すなわち順序が指定されて挿入が行われるケースだ。順序のないリンクリストなら、こうしたことを考える必要はない。
もっとエレガントなリンクリスト操作
きっかけ
2016年のTEDインタビュー(14:10)で、Linus Torvaldsは、コーディングにおける自分の考えるgood taste(良いセンス)について語っている。例として、単方向リンクリストから要素を削除する2つの実装を紹介している(以下に再掲)。リストの先頭要素を削除する際、一方の実装では特別な場合分けが必要で、もう一方では不要だ。もちろん、Linusが好むのは後者だ。
mkirchner/linked-list-good-taste: Linus Torvaldsの「good taste」に関するリンクリストの議論を解説(github.com)
気づき
ここから得られる気づきは、こういうことかもしれない。
ノードを二次元的なものと見なすなら(ノードの中には線形に格納された情報が含まれている)、そのメンバーを操作するには単一ポインタがエレガントな方法だろう。ノードをつないでリンクリストにすると、構造全体は三次元的になる。だとすれば、そのメンバーを操作するには二重ポインタがエレガントな方法なのかもしれない。
これらは全部、私がでたらめを言っただけで、検証もしていない。
ただし、彼が例にしているのは順序付きリンクリスト、すなわち順序が指定されて挿入が行われるケースだ。順序のないリンクリストなら、こうしたことを考える必要はない。