나는 종종 실패시 예외를 던지거나 null이 반환되는지 여부를 제어하는 추가 부울 매개 변수가있는 메소드 / 함수를 발견합니다.
어떤 경우에 더 좋은 선택인지에 대한 논의가 이미 있으므로 여기에 중점을 두지 마십시오. 예를 들어 매직 값 반환, 예외 발생 또는 실패시 거짓 반환을 참조하십시오 .
대신 두 가지 방법 모두를 지원해야 할 이유가 있다고 가정 해 봅시다.
개인적으로 나는 그러한 방법이 두 가지로 나뉘어 야한다고 생각합니다. 하나는 실패시 예외를 던지고 다른 하나는 실패시 null을 반환합니다.
그래서 어느 것이 더 낫습니까?
A : $exception_on_failure
매개 변수가있는 한 가지 방법 .
/**
* @param int $id
* @param bool $exception_on_failure
*
* @return Item|null
* The item, or null if not found and $exception_on_failure is false.
* @throws NoSuchItemException
* Thrown if item not found, and $exception_on_failure is true.
*/
function loadItem(int $id, bool $exception_on_failure): ?Item;
B : 두 가지 방법이 있습니다.
/**
* @param int $id
*
* @return Item|null
* The item, or null if not found.
*/
function loadItemOrNull(int $id): ?Item;
/**
* @param int $id
*
* @return Item
* The item, if found (exception otherwise).
*
* @throws NoSuchItemException
* Thrown if item not found.
*/
function loadItem(int $id): Item;
편집 : C : 다른 것?
많은 사람들이 다른 옵션을 제안하거나 A와 B 모두에 결함이 있다고 주장합니다. 그러한 제안이나 의견은 환영받으며 관련성 있고 유용합니다. 완전한 답변에는 그러한 추가 정보가 포함될 수 있지만 서명 / 행동을 변경하기위한 매개 변수가 좋은 아이디어인지에 대한 주요 질문도 다룰 것입니다.
노트
누군가 궁금한 경우 : 예제는 PHP로되어 있습니다. 그러나이 질문은 PHP 또는 Java와 다소 유사한 언어에 적용됩니다.
loadItemOrNull(id)
지 고려 loadItemOr(id, defaultItem)
하십시오. item이 문자열 또는 숫자 인 경우 종종 수행합니다.