質問: makeuser(from: apiuser) } } 例1は、apiuserが常にuserオブジェクトに変換されることを明示的に示しています。例2は、保証されていても、有効なapiuserが有効なuserオブジェクトにマップされない可能性があることを暗黙的に示しています。例2は、共通ロジックが必要になるたびにコピーされるのではなく、変換で処理されることを示していますが、関数コントラクトで検証がすでに行われているにもかかわらず、変換がオプション/ null可能値を返すことができるという事実は個人的には嫌です実行され、有効な値が失敗することはありません。
回答: makeuser関数は値を受け取り、その値からユーザーを作成します。入力が無効なためにユーザーを作成できない場合は、例外をスローする必要があります。 「何も」を解析してユーザーを取得できないため、nullは間違いなく無効な入力です。これは、intの解析に似ています。入力が無効な場合は、例外をスローし、うまくいったふりをしないでデフォルト値を返します。これを行うと、makeuserを呼び出すたびに、nullではなく実際のuserオブジェクトが確実に存在することがわかります。次に、downloaduserは、ダウンロードしたユーザーが有効であることを検証する必要があります(あなたのケースでは、それがnullではないことを確認しているようです)。この1つの使用例では特に問題ではありませんが、makeuserへの他の呼び出しが機能する(この場合はユーザーオブジェクトがある)か、呼び出し元のコードで明示的に処理する必要があるという利点があります。これにより、アプリ全体でnull参照例外が発生する可能性を減らすことができます。編集:要約すると、例1の方が私には適しています。