5

純粋なメソッドは、「目に見える状態の変更を行わない」と定義されています。

私のメソッドは、引数の 1 つが null であるか、例外がスローされた場合にログ メッセージを書き込みます。まだ純正ですか?ロガーへの書き込みは目に見える変化ですか?

コードは次のとおりです。

    /// <summary>
    /// Formats with invariant culture - won't throw an exception.
    /// </summary>
    /// <param name="format">A composite format string.</param>
    /// <param name="args">An object array that contains zero or more objects to format.</param>
    /// <returns>A copy of format in which the format items have been replaced by the string representation of the corresponding objects in args.</returns>
    [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "CyanCor.Core.Logging.Log.ExceptionPrevent(System.String,System.String,System.Int32,System.String)", Justification = "It is for the logger (riedl)")]
    [Pure - yes or no?]
    public static string FormatSafe(this string format, params object[] args)
    {
        if (format == null)
        {
            Log.ExceptionPrevent("Argument format is null");
            return NullFormat;
        }

        try
        {
            return string.Format(CultureInfo.InvariantCulture, format, args);
        }
        catch (ArgumentException exc)
        {
            Log.Exception(exc);
            return format;
        }
        catch (FormatException exc)
        {
            Log.Exception(exc);
            return format;
        }
    }
4

1 に答える 1

5

一般に、「状態変更」とは、オブジェクトの状態を変更することを意味します。変数を変更したり、複雑なオブジェクトの構造を変更したりします。この定義に従うと、あなたのメソッドはまだ純粋であるように見えます。

于 2013-04-15T07:27:37.057 に答える