Godot: setget関数は自己代入のために呼び出されます

作成日 2016年11月12日  ·  3コメント  ·  ソース: godotengine/godot

これが意図した動作であるかどうかはわかりませんが(そうである場合は、申し訳ありませんが、この問題を閉じてください)、これは明らかに許可されるべきではありません!

私たちに言わせてください、
1)変数fooの値をデフォルトで1にしたいのですが、
2)そして、ユーザーが何らかの方法で対話すると(入力としましょう)、その値が変更されます。
3)ユーザーが完了した後、 fooの値は再び1の値を持つ必要があります。

ここで何が起こるかというと、 setget関連付けられた関数は、値がすでに1の場合、値が1に設定されるたびに呼び出され、元の値が異なる場合は1回(初回)呼び出す必要があります。 これは私にとってパフォーマンスをいくらか殺している、私はこれを行うことができることを知っている:

if (new_value == old_value):
   return

ただし、これは自動的に実行する必要があります。

feature proposal gdscript

最も参考になるコメント

簡単な回避策がある場合、私の意見では古いコードを壊す価値はありません(同じ値の割り当ての試行についてユーザーに通知を表示するためにセッターを利用するコードがあります)。

全てのコメント3件

これを自動的に行うのは良い考えではないと思います。 すでに持っているのと同じ値で変数を設定しても、パフォーマンスに影響はありません。これは、必要に応じてsetget関数が処理する必要があるものです。 また、値チェックを追加すると、1つの新しい(概念的には不要な)分岐であるため、パフォーマンスに影響します。

また、同じ値を設定してもセッターに影響がないため、バイパスできるとは思いません。

これは、毎回1つの値を設定すると、このようなパフォーマンスが低下する可能性がある場合、非常に複雑なセッターがあるように見えます。

さて、通常、自己割り当てだけを行う場合は問題ありませんが、「setget」とは何かのように、新しい値を割り当てるよりも多くの作業を行うと、パフォーマンスが低下します。 特に、値が変更されず、フレームごとに自己割り当てされる場合。

その上、(私が知っている)すべてのC ++コンパイラは、そのような残虐行為からあなたを守ります。 (少なくとも基本的なタイプでは、この保護を無効にしている割り当て演算子をオーバーロードします)実際、amd cpusでの浮動小数点数の自己割り当て後、値が同じままであるかどうかを確認するために、いくつかのコードがそれをチェックすることを表明しています。 これは、あるプロジェクトの健全性チェックとして行われたもので、その名前を忘れてしまいました。

簡単な回避策がある場合、私の意見では古いコードを壊す価値はありません(同じ値の割り当ての試行についてユーザーに通知を表示するためにセッターを利用するコードがあります)。

このページは役に立ちましたか?
0 / 5 - 0 評価