MofuMofu2 / typescript-sandbox

MIT License
0 stars 0 forks source link

#66 ユーザーデータのフィルタリング #71

Closed MofuMofu2 closed 1 year ago

MofuMofu2 commented 1 year ago

resolve #66

trueとfalseのパターンは網羅するようにした。他に書くべきケースがあれば追加したいが、ChatGPTはレビューできるのか?

MofuMofu2 commented 1 year ago

テストケースを確認しました。良く書かれています。

以下、いくつかのフィードバックポイント:

  1. 基本のシナリオ: isAdmintrueのユーザーを正しく抽出することをテストする基本のシナリオが含まれています。これは非常に重要なテストケースです。

  2. 境界条件のシナリオ: isAdminfalseだけの場合に空の配列を返すことを確認するテストケースも書かれています。これも良いシナリオです。

  3. その他のシナリオを考慮する:

    • 例えば、元の配列が空 ([]) の場合、返り値も空の配列であることを確認するテストケースが追加できる。
    • 入力データにisAdminプロパティが含まれていない場合の挙動もテストすると良いでしょう。
  4. 命名: テストケースの命名も適切です。itブロックの説明が明確で、何をテストしているのかが一目でわかります。

最後に、filterAdminUsers関数の実装も共有していただければ、そのコードに関する具体的なフィードバックも提供できます。


境界値だけでなく、その他のケースも考慮されている。 ただ、isAdminのプロパティの部分はあり得ない(型エラーで入れられない)ので不要そう。空配列のデータも同様。

MofuMofu2 commented 1 year ago

filterAdminUsers関数の実装を確認しました。良い実装ですね!

以下、詳しいフィードバック:

  1. コードの簡潔さ: filter関数を適切に使用して、コードが簡潔になっています。

  2. 型定義: UserInfo[]という型を正しく使用しており、TypeScriptの型安全性の恩恵を受けることができています。

  3. 戻り型: UserInfo[] | [] という戻り型は少し冗長です。空の配列もUserInfo[]型として認識されるので、戻り型を UserInfo[] だけにすることができます。以下のように修正することが推奨されます。

    export const filterAdminUsers = (userLists: UserInfo[]): UserInfo[] => {
  4. 変数名: userListsという名前は複数形になっていますが、一般的には単数形+複数形(例:usersListや単にusers)のような命名が使われることが多いです。しかし、この点は主観的であり、プロジェクトやチームの命名規則によるので、必ずしも変更する必要はありません。

全体的に良い実装です!フィードバックを参考にさらに改善してみてください。

MofuMofu2 commented 1 year ago

空の配列もUserInfo[]型として認識される

これは知らんかった。ということは引数もか?確認してみる。

MofuMofu2 commented 1 year ago

その他のシナリオのフィードバックですが、引数にUserInfoを指定していても空配列が指定できてしまうということでしょうか?

申し訳ありません、説明が不足していました。

UserInfo[] という型は、UserInfo のオブジェクトを要素とする配列を示していますが、その配列の長さに制約はありません。そのため、空の配列([])もこの型に該当します。したがって、空の配列を filterAdminUsers 関数の引数として渡すことは全く問題ありません。

「その他のシナリオを考慮する」というフィードバックのポイントでは、以下のような意味合いでした:

  1. 空の入力: 元の配列が空 ([]) の場合、返り値も空の配列であることを確認するテストケースが追加できる。これは、関数が空の配列に対しても適切に動作することを保証するためです。

  2. 不完全なデータ: 例として、isAdmin プロパティが含まれていないユーザー情報が渡された場合の挙動について考えることができます。ただし、現在の型定義ではこのようなケースは発生しないため、テストの追加は必要ありません。

現在の型定義を考慮すると、1つ目のシナリオ(空の入力)だけがテストとして追加される価値があると考えます。

はい、正確にその通りです。

TypeScriptの型定義を正しく設定していれば、型が保証する範囲でのデータしか関数に渡されないことが期待されます。そのため、UserInfo型にisAdminプロパティが必ず存在することが保証されているので、そのプロパティが欠落しているような「不完全なデータ」は関数に渡されることはありません。

一方で、空の配列([])はUserInfo[]型に完全に合致しますので、そのような入力が関数に渡される可能性は十分に考えられます。そのため、空の配列を入力とした場合の関数の動作を確認するテストケースを追加するのは有意義です。

MofuMofu2 commented 1 year ago

空配列のときのケースと型の指定は修正した方がいい

MofuMofu2 commented 1 year ago

テストケースの修正を確認しました。改善されており、非常に良くなっています!

  1. 基本のシナリオ: isAdmintrueのユーザーを正しく抽出することをテストする基本のシナリオが含まれています。

  2. 特定のシナリオ: isAdminfalseだけの場合に空の配列を返すことを確認するテストケースも書かれています。

  3. 空の入力のシナリオ: 入力として空の配列が与えられたとき、返り値も空の配列であることを確認するテストケースが追加されました。これは、関数が様々な入力に対して適切に動作することを保証するための重要なテストケースです。

全体的に、追加されたテストケースは関数の動作を網羅的に確認するものとなっており、適切に実装されています。良い修正を行っていただき、ありがとうございます!


褒め方が上手いなと思う。参考になる。

MofuMofu2 commented 1 year ago

関数の実装も確認しました。以下、再度のフィードバック:

  1. 型の適用: UserInfo 型が正しく適用されており、関数の引数と戻り値の型が明確に指定されています。

  2. フィルタリングのロジック: .filter を用いたフィルタリングのロジックが正しく、簡潔に実装されています。

  3. 変数名の修正: 先のフィードバックに基づき、userLists という変数名をそのまま使っていますが、これは完全に個人の好みやチームの命名規則に依存する部分です。そのため、現在の命名でも問題はありません。

  4. 不要な変数: 提供されたコードには users という変数が定義されていますが、この変数は filterAdminUsers 関数内で使用されていないようです。この変数が不要であれば削除するか、何らかの意図がある場合はその使用目的を明確にするとよいでしょう。

全体として、非常に良い実装です。filterAdminUsers 関数は明確な目的を持ち、それを簡潔に達成しています。

users のようなテストデータやサンプルデータは、実際の関数やモジュールのロジックとは独立してテストスクリプト内で持っているのが一般的です。これにより、実際の関数やモジュールはクリーンに保たれ、その機能のみに焦点を当てることができます。

もし users をサンプルデータとして提供したい場合、例えばドキュメンテーションやREADMEなどで使用することも考えられます。しかし、コードの実装部分に含める必要はありません。

不要な変数やコードを取り除くことで、コードの可読性やメンテナンス性を向上させることができます。

MofuMofu2 commented 1 year ago

命名などうまく譲歩すべきところは譲歩して、メンテに関わるところはしっかり指摘する、みたいなのが大事なのかもしれないなと思った。