一般的なプログラミング ユーティリティ コードを書いたとき、1 つの機能に対してインプレース ミューテーターと新しいオブジェクト クリエーター メンバー関数の両方を使用するとよいことがわかりました。
たとえば、ファイル システムのパスを表す一部のクラスには、「正規化」機能がある場合があります。パス オブジェクトは、自身を正規化されたものに変更するか、新しい正規化されたパス オブジェクトを返す場合があります。
class path {
...
void normalize_itself()
path get_new_normalized_path()
...
}
私はこれについていくつかの規則を試しましたが、それらのほとんどは満足のいくものではありません.
'ノーマライズ!' ruby のようなインプレース関数の場合 - 良いですが、他のほとんどの言語は、識別子に含まれる特殊文字をサポートしていません。
インプレース関数の「normalize_ip」 - 私の関数の使用のほとんどはインプレースであるため、あまりにも醜いと思います。
非インプレース関数の 'get_normalized' - 許容されますが、メンバーの他の単純な getter 関数と混同される可能性があります。
非インプレース関数の「正規化」 - 均一でない場合があり、インプレースの対応部分と簡単に混同されます。
非インプレース関数をフリー関数として記述 - IDE のインテリセンス支援の欠如、場合によっては可視性の問題。
2つの機能を区別するための適切で実用的な慣習を見つけたいと思います。