2009-08-05 9 views
1

이것은 일반적인 프로그래밍이지만 차이가 있다면 objective-c를 사용하고 있습니다. 값을 반환하고 일부 동작을 수행하는 메서드가 있다고 가정하지만 반환하는 값은 신경 쓰지 않고 수행하는 작업에만 관심이 있습니다. 메소드를 무효로 그냥 호출할까요? 또는 결과를 변수에 넣은 다음 삭제하거나 잊어 버리시겠습니까? 이 상황에 처했을 때 무엇을하겠습니까?일반 프로그래밍 - 값을 사용하지 않고 무효 메서드 호출

답변

4

이의 일반적인 예는 int를 돌려, printf와는 ...하지만 당신은 거의이 볼 수 없습니다 : 그것은 무효 인 것처럼

int val = printf("Hello World"); 
+0

내가 알아야 할 모든 것 감사합니다. – mk12

+0

메서드가 객체를 반환하면 (가비지 수집기가 없음)? 그렇다면 물체가 유출되지 않을까요? – mk12

+0

함수가 메모리 관리가 필요한 객체를 반환하면 함수를 캡처 할 수 있습니다. 대부분의 경우 반환 값을 무시하면 일반적으로 int 또는 enum'd int 인 상태로 반환됩니다. 그러면 걱정할 필요가 없습니다. 무언가가 객체를 반환하고 무시했을 때 실제 인스턴스를 생각할 수 있습니까? 하지만 그랬다면 그걸 가져 가지 않았을거야, 누수가 될거야 ... – micmoo

0

.Net에서 일반적으로 나타나는 경우 (예 : CQS을 깨는 코드와 관련된 문제 일 수 있음)

내가 무시한 값을 반환하는 함수를 호출하면 일반적으로 테스트에서 동작을 확인하기 때문에 발생합니다. 다음은 C#의 예는 다음과 같습니다 정말 반환 형식에 대한 상관 없어

[Fact] 
    public void StatService_should_call_StatValueRepository_for_GetPercentageValues() 
    { 
     var statValueRepository = new Mock<IStatValueRepository>(); 

     new StatService(null, statValueRepository.Object).GetValuesOf<PercentageStatValue>(); 

     statValueRepository.Verify(x => x.GetStatValues()); 
    } 

, 난 그냥 방법이 가짜 객체에서 호출되었는지 확인합니다.

3

그래 바로 메서드를 호출합니다. 당신은 아마 그것을 알아 채지 않고 항상 그렇게합니다. 할당 연산자 '='는 실제로 값을 반환하지만 매우 드물게 사용됩니다.

2

환경에 따라 다릅니다 (언어, 도구, 코딩 표준 등).

예를 들어 C에서는 값을 사용하지 않고 함수를 호출 할 수 있습니다. int를 반환하는 printf와 같은 일부 함수에서는 항상 수행됩니다.

때때로 값을 사용하지 않을 경우 경고가 발생하므로 바람직하지 않습니다. 값을 변수에 할당 한 다음 사용하지 않으면 사용되지 않는 변수에 대한 또 다른 경고가 발생합니다. 이 경우 해결책은 호출 앞에 (void)를 붙여서 결과를 void로 변환하는 것입니다. 두 개의 별도의 문제는 사실, 여기가

(void) my_function_returning_a_value_i_want_to_ignore(). 
+0

나는 그것을 기억할 것이다. – mk12

1

있습니다

  1. 당신은 반환 값을 걱정해야 하는가?
  2. 당신이 사용하지 않을 변수에 할당해야합니까? 물론, 당신이 불법이 될 것입니다 언어로 작업,하지 않는 한 (초기 터보 파스칼은 마음에 온다) - # 2-

대답은이 울려 퍼지는 "NO"입니다. 변수를 정의하기 만하면 버릴 수 있습니다.

처음 부분이 쉽지 않습니다. 일반적으로, 이유 값이 반환됩니다 - idempotent 함수의 경우 함수의 유일한 목적입니다; 비 멱등 원 (non-idempotent) 일 경우 대개 작업이 정상적으로 완료되었는지 여부를 나타내는 일종의 리턴 코드를 나타냅니다. 물론 예외가 있습니다 (예 : method chaining).

0

C에서는 매우 일반적이지만 실제로 그렇게하지 않는 곳과 그렇지 않은 곳이 있습니다.GCC의 최신 버전은 가지고 function attribute 함수가 반환 값을 확인하지 않고 사용하는 경우 당신은 경고를받을 수 있도록 :

warn_unused_result 속성이 속성과 함수의 호출자가 않는 경우 방출되는 경고를 발생 반환 값을 사용하지 않는다. 이는 결과를 확인하지 않는 것이 보안 문제이거나 항상 realloc과 같은 버그 인 경우에 유용합니다. 라인에 경고에

 int fn() __attribute__ ((warn_unused_result)); 
    int foo() 
    { 
     if (fn() < 0) return -1; 
     fn(); 
     return 0; 
    } 

결과 5.

당신이 제 3 자 코드 당신에게 돈을 컴파일 할 때 문제가 발생 생성 된 경고를 해제의 방법이 없었다 내가 이것을 사용 마지막으로 수정하고 싶지 않습니다. 또한, 사용자가 반환 된 값으로 실제로 의미있는 것을하는지 실제로 확인할 방법이 없습니다.