-3

これは宿題の質問ではありません。

次の 2 つのメソッドの正確な違いと呼び出し元での使用方法を説明するとしたら、どうすればよいでしょうか?

方法 1:

public void WriteSpace(int numSpaces) {
        if (numSpaces <= 0) return;
        for (var x = 0; x < numSpaces; x++) {
            Response.Write(" ");
        }
    }

方法 2:

public String WriteSpaceReturn(int numSpaces) {
        var space = "";
        if (numSpaces <= 0) return space;
        for (var x = 0; x < numSpaces; x++) {
            space += " ";
        }
        return space;
    }

発信者:

WriteSpace(4); //1
Response.Write(WriteSpaceReturn(4)); //2

最終結果はどちらも同じです。したがって、最初のメソッドは呼び出し元に値を返さないのに対し、2 番目のメソッドは値を返さないことは明らかですが、それ以上に、これらを他にどのように説明すればよいでしょうか?

最初と2番目の方法の原子性に違いはありますか? 範囲?ブロッキング?最初のメソッドがメソッド内に出力を書き込むのに対し、2 番目のメソッドは呼び出し元にそれをさせるという事実の名前はありますか? これらが大量のデータを書き込んでいる場合、どちらが優先されますか? Response.Write最初は文字ごとに呼び出しを行っているので、遅くなると思いますか?

4

3 に答える 3

5

パフォーマンスに関する主な違い: コードの 2 番目のバージョンでは、ループ内で文字列の連結が使用されていますが、これは非効率的です。それよりも効率的であることを願っています。Response.Write

カプセル化に関する主な違い: 2 番目の形式は純粋なメソッドであり、副作用はありません。これにより、単独でのテストが容易になり、この特定のケースでは、複数の状況での使用が容易になります。

純粋であるために2 番目のバージョンが優れていると言っているわけではありません。コンテキストによって異なります。

(どちらの場合も、numSpaces非肯定的であるという冗長なチェックを削除する必要があります。)

于 2013-01-18T19:54:40.477 に答える
0

1 つはあなたのために書き込みます (最初のもの)

2 番目のものは、最初のもので書き込んだ文字列を返すため、自分で書く必要があります。または、さらに重要なことは、有効な文字列関連の操作を実行できるようにすることです。

于 2013-01-18T19:54:19.273 に答える
0

この最初のメソッドは、スペースを直接応答ストリームに書き込みます

2 番目は、スペースを含む文字列を作成します。次に、呼び出し元は応答にスペースを書き込む必要があります。Response.Write(WriteSpaceReturn(4));

後者の方が柔軟性が高いため、後者が推奨されますが、関数は次のように完全に置き換えることができます。

new String(' ', 4 );

その結果

Response.Write(new String(' ', 4 ));

はるかに効率的で、読みやすくなっています。

于 2013-01-18T19:54:21.913 に答える