最近行われたディスカッションの中で、Caché ObjectScript における for/while loop のパフォーマンンスが話に出ましたので、意見やベストプラクティスをコミュニティの皆さんと共有したいと思います。 これ自体が基本的なトピックではありますが、他の点では合理的と言える方法のパフォーマンスが意味する内容を見逃してしまうことがよくあります。 つまり、$ListNext を使って$ListBuild リストをイテレートするループ、または $Order を使ってローカル配列をイテレートするループが最も高速な選択肢ということです。
興味深い例として、コンマ区切りの文字列をループするコードについて考えます。
そのようなループをできるだけ手短に書くと、次のようになります。
For i=1:1:$Length(string,",") {
Set piece = $Piece(string,",",i)
//piece を使って何らかの処理を実行する...
}
とても分かりやすいですね。でも、多くのコーディングスタイルガイドラインは次のようなコードを提案するかもしれません。
Set n = $Length(string,",")
For i=1:1:n {
Set piece = $Piece(string,",",i)
//piece