2008-09-19 7 views
0

null 객체에 대한 메소드 반환 값을 제공하는 것이 유용할까요? null 객체에 대한 메소드 반환 값을 갖는 것이 유용할까요?

이 목록은 널 (null) 반환 값이 될 수 있습니다 덜 널 (null) 검사가 다음 코드를 허용 할
get(int) : null 
size() : 0 
iterator() : empty iterator 

.

List items = null; 

if(something) { 
    items = ... 
} 

for(int index = 0; index < items.size(); index++) { 
    Object obj = items.get(index); 
} 

이것은 클래스 또는 인터페이스가 정의한 것으로 null 체크가 여전히 작동하는 경우에만 사용됩니다. 때로는 null 체크를하고 싶지 않으므로 옵션으로 사용하는 것이 유리할 수 있습니다. 에서

: http://jamesjava.blogspot.com/2007/05/method-return-values-for-null-objects.html

+0

관련 아이디어 : HTTP : // www.jroller.com/scolebourne/entry/java_7_null_default_and –

답변

0

이것은 좋은 생각이다.

스몰 토크가 수행합니다.

NULL 개체가 있습니다. 개체에서 유래하지 않습니다. (스몰 토크는 자바와 같은 단일 루트 클래스 계층 구조입니다.)

고급 학생의 경우 프록시를 만들기 위해 하위 클래스로 분류 할 수 있습니다!

2

그것은 (다른 사람뿐만 아니라)이 작업을 수행

http://en.wikipedia.org/wiki/Null_Object_pattern

+0

이것은 유형을 생성하는 모든 코드에서 유형을 선언하는 코드로 결정을 이동한다는 점에서 약간 다릅니다. –

0

루비 널 객체라는 패턴입니다. 그것은 null 대신 nil을 가지며 객체입니다.

목록을 반환하는 함수가 null을 반환 할 수있는 경우에는 좋지 않습니다. 빈 목록을 반환하고 사용자가 null (비어 있음)을 확인할지 여부를 결정하도록하는 것이 좋습니다.

+0

좋은 소식이 있습니다. nil은 객체이므로 null 패턴을 구현하는 것은 매우 쉽습니다. 메서드를 무제한 객체에두기 만하면됩니다. :-) – marcospereira

3

NULL을 확인하지 않아도되고 일부 언어가 더 쉽게 사용할 수 있습니다. C#의 NULL이 불가능한 타입, 또는 NULL이 없지만 Maybe 타입의 생성자로 누락 된 값을 표현할 수있는 Haskell.

NULL은 빈 목록과 다릅니다. 여러분은리스트를 필요로하는 곳에서 NULL을 전달하는 누군가가 프로그래밍 에러를 일으키고, 할 일이 NullPointerException을 던진다는 관점을 취할 수 있습니다.

NULL을 허용하는 일반적인 이유는 목록이 필요하지 않은 경우가 종종 발생하기 때문입니다. 특히 효율성에 대한 우려가있는 경우에는 빈 목록 인 새 목록을 만들지 않아도됩니다. 언어를 변경하지 않고도 많은 이점을 얻을 수 있습니다. 대신 사람들이 전달할 수있는 정적 EmptyList가 있으므로 재 초기화 할 필요가 없습니다.

0

C# (다른 언어들)에서는 일반적으로 허용되지 않습니다. Foo의 인스턴스가 없으면 .net은 Foo의 메서드 또는 Foo의 자식 메서드를 호출 할 수 없습니다. 그러나

는, C# 3.0의 확장 방법이 허용 것 푸 유형에 적용 :

Foo x = null; 
if (x.Bar() == 0) 
{ 
    Console.WriteLine("I win"); 
} 

바과 같이 구성 할 수있다 :

public static int Bar (this Foo theFoo) 
{ 
    return theFoo == null ? 0 : 1; 
} 
스티븐 Colebourne에서
관련 문제