[.net] 'null'또는 빈 배열을 반환해야합니까?



5 Answers

빈 배열을 반환합니다. - 할 일이 옳은 것처럼 보입니다.

Question

어떤 종류의 배열을 생성하고 리턴해야하는 메소드가 있다고 가정하십시오. 배열에 데이터가 채워지지 않으면 어떻게 될까? 빈 배열 또는 null / nothing을 반환합니까?




어떤 이유로 인해 null 배열과 평범한 오래된 빈 행과의 결과에 대한 코드에서 의미의 차이가 없으면 빈 행을 반환합니다. 이것은 또한 특정 언어 일 수도 있습니다. 일부 언어에는 하나의 옵션 만있을 수 있습니다.




글쎄, 그것은 정말로 당신이 당신의 반환에주고 싶은 의미론에 달려 있습니다.

일반적으로 거의 모든 함수 / 메소드에 대해 사전 및 사후 조건을 사용합니다. 즉, 내 메서드가 특정 처리에서 데이터가있는 배열을 반환해야하는 경우이 처리가 실패하면 개체가 null이어야하고 게시 조건이 실패합니다.

하지만 귀하의 경우에는 귀하가 DbC를 사용하지 않는다고 가정합니다.

배열에 데이터가 채워지지 않으면 어떻게 될까?

그렇다면 나는 당신의 말투에서 someting이 잘못되었다고 생각했기 때문에 null을 리턴 할 것입니다.




C #을 사용할만큼 운이 좋다면 정적 읽기 전용 속성을 다음과 같이 선언하십시오.

public static class ArrayUtil<TElement> 
{
    public static readonly Empty = new TElement[0];
}

(이것은 BCL에 있습니까? 왜 안됩니까?)

이제 ArrayUtil<int>.Empty 또는 무엇이든 반환 할 수 있습니다. 이것은 null 대신 빈 배열을 사용하는 데 드는 런타임 비용을 거의 없애고 호출자에게 null을 처리하는 것보다 간단한 시간을줍니다.




질문을 면밀히 읽으면 자신이 실제로 이미 대답했음을 깨닫게 될 것입니다. 여러분은 "어떤 종류의 배열을 생성하고 반환해야하는 메서드가 아니라" 정렬 또는하지 않음 ".

실제로 그것은 사양에 따라 다릅니다. 그러나 당신이 그것을 표현한 방식으로, 메서드가 null을 반환 할 수있는 방법이 없습니다. 어쨌든 내가 선호하는 스타일은 어느 것인데, 가장자리 처리만으로 쉽게 처리 할 수 ​​있습니다.




이 언어가 정말로 언어 독립적 인 경우, 대부분의 컨테이너에는 IsEmpty ()와 같은 함수가 있어야합니다. 그래서 함수의 호출자는 Array IsEmpty가 무엇인가를하기 전에 검사 할 것입니다.

이 C ++ 경우 null 중 하나를 볼 수 또는 배열에 대한 참조를 전달한 다음 배열 크기 반환 ...



Related