QA@IT
«質問へ戻る

サンプルコードのコメントを間違えていたので訂正します

28
本文
 // ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
 dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。
 
-// ↓追加であり上書きではないことを明示しない記法はある。
+// ↓追加であり上書きではないことを明示する記法はある。
 dic.Add(47, "xyz");
 
 // ↓上書きであり追加ではないことを明示する記法がほしい。

Dictionary クラスは追加と上書きのメソッドを別にした設計が良いですか?

IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示する記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。

Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

```cpp
IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示する記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。

Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

過去の履歴が見れるので、本文はふつうに書き換えたほうが読みやすいと思います。あと、いきなり「たとえば」と質問文で書きだすと、面食らうと思います

1138
タイトル
たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?
Dictionary クラスは追加と上書きのメソッドを別にした設計が良いですか?
本文
 //dic.Update(47, "xyz");
 ```
 
-追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。
-
 上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
+
 Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
 追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。
 
 
 主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。
 
-追記します。
-
-質問のタイトルを質問形式にするために、
-「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う」
-↓
-「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?」
-と末尾だけ変更しました。

Dictionary クラスは追加と上書きのメソッドを別にした設計が良いですか?

IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。

Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

```cpp
IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。

Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

質問のタイトルを質問形式に変更しました

28
タイトル
たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う
たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?
本文
 ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。
 
 主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。
+
+追記します。
+
+質問のタイトルを質問形式にするために、
+「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う」
+↓
+「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?」
+と末尾だけ変更しました。

たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?

IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");

追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

追記します。

質問のタイトルを質問形式にするために、
「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う」

「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?」
と末尾だけ変更しました。

```cpp
IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```

追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

追記します。

質問のタイトルを質問形式にするために、
「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う」
↓
「たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計が良いですか?」
と末尾だけ変更しました。

書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので追記します

28
本文
 // ↓上書きであり追加ではないことを明示する記法がほしい。
 //dic.Update(47, "xyz");
 ```
+
+追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。
+
+上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
+Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
+追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。
+
+ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。
+
+主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う

IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");

追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

```cpp
IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```

追記します(書いてる途中に Enter キーを押したらそれだけで投稿になってしまったので)。

上記のサンプルコードのコメントでほぼ言い尽くしているのですが補足します。
Dictionary クラスに対して同じキーで上書きしたいときは、プロパティー(dic[x])を使えばできるのですが、これだとまだ存在しないキーのエントリーの追加もできてしまいます。
追加だけしたくて上書きをしたくないときは Add メソッドを使えば良いのですが、その逆に上書きだけしたくて追加をしたくないときに使えるメソッドが Dictionary クラスには存在しません。上記のサンプルコードに書いたように、架空の Update メソッドのようなものがあれば便利だと思います。そしてプロパティー(dic[x])では上書きだけ許し、追加はできないように制限したほうが良いと思います。

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

主観的になりがちな話題だと思いますが、「○○というメリット・デメリットがあるので、メソッドを別にしたほうが良い・別にしないほうが良い」というご意見をいただければ幸いです。

質問を投稿

たとえば Dictionary クラスは、追加のメソッドと上書きのメソッドを別にした設計すると良いと思う

IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```cpp
IDictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
    dic[i * i] = "abc"; // ←例題として、キーは整数の2乗とする。
}

// ↓既存の dic[49] のエントリーに対して上書きしようとして、キーを間違えて 47 にした。
dic[47] = "xyz"; // ←エラーにならず、新規のエントリーの追加になってしまう。

// ↓追加であり上書きではないことを明示しない記法はある。
dic.Add(47, "xyz");

// ↓上書きであり追加ではないことを明示する記法がほしい。
//dic.Update(47, "xyz");
```