Rubyの例
たとえば ruby であれば 関数名に !
が使えるので 以下のように該当データが見つからない場合 「例外を投げる」のか「nilを返すのか」を明示できると思います。
ruby
1User = Struct.new(:id, :name, :is_admin) 2 3class UserRepository 4 def initialize 5 @users = .... 6 end 7 8 def find_admin_user! 9 u = @users.find(&:is_admin) 10 raise "..." unless u 11 u 12 end 13 14 def find_admin_user 15 users.find(&:is_admin) 16 end 17end
Javascript/Typescript の例
前提) 一般的に見ると例外返す方式 or undefinedを返す方式 どっちが良い、という話ではないと思っています。
この例では findAdminUserは データが見つからない場合 undefined を返します。
typescript
1interface User { 2 id: number; 3 name: string; 4 isAdmin: boolean; 5} 6 7const users: User[] = ... 8 9export function findAdminUser() { // return type は User | undefined 10 return users.find(u => u.isAdmin); 11}
便宜的に、あるアプリーケーション内のコードを "データアクセスレイヤー", "プレゼンテーションレイヤー" と呼ぶとすると、
"プレゼンテーションレイヤー" 側で if( !findAdminUser() ) { Show("Admin user not found" }
みたいに ハンドリングしたい場合もあります。 その場合例外ではなく undefined を返してくれた方がプレゼンテーションレイヤーにとって都合がよいわけです。
一方、型レベルの話として
typescript
1function findAdminUser(): User | undefined { ... }
ではなく
typescript
1function findAdminUser(): User { ... if (..) throw "xxx"; ... }
の方が嬉しい場合もあります。
例えばデータ仕様として、"adminUserが必ず存在する" というアプリーケーションだとこう書きたいと思います。
余計なpossibly undefined のチェック処理(分岐処理)のコードを書かなくて済むので呼び出し箇所が多いとこの関数の方が嬉しいです。
ということで何かいい命名規則はないですか?
1例
findAdminUser(): User | undefined findAdminUserOrThrow(): User
??? んー、まあ、意味は伝わるかもしれないんですが、もっとよい表現ないですかね
回答1件
あなたの回答
tips
プレビュー