質問

常に理解しているように、プログラムの状態(またはIOに関連するもの)の変更は副作用です。変更がグローバル変数で発生するか、メソッドが呼び出されるオブジェクトのプライベートフィールドで発生するかは関係ありません。結果として、何も返さないメソッドはまったく何もしないか、副作用があります。副作用はありません。

役に立ちましたか?

解決

あなたのインストラクターは間違っています。ここに記事全体を貼り付けていないことをSOエディターに謝罪して、これがウィキペディアの発言です:

http://en.wikipedia.org/wiki/Side_effect_(computer_science)

お金の引用#1:

  

コンピューターサイエンスでは、値を生成することに加えて、関数または式が値を生成することに加えて、状態を変更したり、呼び出し元の関数または外部世界と観察可能な相互作用を持っている場合、副作用があると言われています。

お金の引用#2:

  

副作用が存在する場合、プログラムの動作は過去の履歴に依存します。つまり、評価の順序が重要です。

非NOPセッターは常にその基準を満たします。

他のヒント

ゲッターとセッターは、get_メソッドとset_メソッドの単なる構文上の砂糖です。それらは副作用を 持つ可能性があります(ただし、呼び出し側がカウンターや何かをインクリメントすることだけを望んでいたときに、多くのフィールドを微調整することはおそらく悪い考えです)。

まず:言語に依存しないタグを認識しています!" runako"質問に正解しました。しかし、しばしばあなたはあなたの知識を現実の世界に応用したいと思うので、この問題にもっと現実的な方法で対処する答えを提供したいと思います。

c ++、c#、javaなどの実世界の言語を扱う場合、nop関数でさえ実際の副作用があり、コードが実行される可能性があります!

静的コンストラクターについて考えるだけです。仕様は常にクラスの静的コンストラクターが実行される時間を指定するわけではありませんが、ほとんどの場合、メソッドまたはクラスのメンバーが最初にアクセスされる時点になります。

C#の例:

class NotSoObvious
{
    static NotSoObvious()
    {
        CauseSomeSideEffects();
    }

    // calling this can cause the constructor to run first!
    public static void DoNothing()
    {
        return;
    }
}

さらに、呼び出されていないメソッドでさえ副作用を引き起こす可能性があるということです! リフレクション(プログラムが自身の構造に関する情報を照会する能力)を考えてください。 メソッドが存在するが呼び出されていない場合でも、リフレクションによって検出できます。

メソッドを呼び出さないメソッドは、内部のメソッドの数を出力するプログラムに必ず副作用があります!

すべてこれに要約します:メソッドの実際の副作用について知りたい場合は、まず「副作用」とみなすものを判断する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top