2014-11-14 5 views
1

나는 Bloch의 Effective Java를 읽었으며 Generics 장에서 "신원 기능"에 대해 이야기하는 한 섹션 만있었습니다. "신원 기능"이라는 프로그래밍 용어는 신원 정보와 무슨 관련이 있습니까? (Java 지향)

public interface UnaryFunction<T> { 
    T apply(T arg); 
} 

// Generic singleton factory pattern 
private static UnaryFunction<Object> IDENTITY_FUNCTION = new UnaryFunction<Object>() { 
    public Object apply(Object arg) { return arg; } 
}; 

// IDENTITY_FUNCTION is stateless and its type parameter is 
// unbounded so it's safe to share one instance across all types. 
@SuppressWarnings("unchecked") 
public static <T> UnaryFunction<T> identityFunction() { 
    return (UnaryFunction<T>) IDENTITY_FUNCTION; 
} 

는 이미 "Why is it safe to suppress this unchecked warning?" 읽고 답변이되지 않은 경고 질문을 설명하지만 신원 기능이 보인다 정체성과는 ​​아무 상관이 없을 때 "정체성 기능"의 개념 나를 완전히 불행 둡니다.

블로흐는 내가 그것이 무엇인지 알고 있다고 가정하지만, 그것을 구현하기 위해 사용하는 구현에서, 그것은 신원 또는 신원과는 아무런 관련이 없습니다.

나는 위키 피 디아에서 이것을 확인했다 : Identity Function @ wikipedia 그러나 그것의 순수한 이론적 인 설명은 나에게 정체성과 관련이 있는지에 관해서는 아무것도 말해주지 않는다.

저는 Google에서 검색했고, 사람들은 약간의 의미를 가진 신원 기능으로 .equals().hashCode() 메소드를 참조하지만 입력 매개 변수를 그대로 반환하는 Bloch의 메소드와 완전히 다릅니다. 그게 정체성과 관련이 있니?

다른 사람들은 데이터베이스 기능에 대해 신원 기능으로 말하면서 각 호출마다 새로운 ID를 부여했는데, 이는 더 의미가 있지만 분명히 범위가 제한적입니다.

f(x) = x 

답변

6

는 질문에 코드의 맥락에서, 단순히 전달 같은 인수를 반환하는 함수입니다 기능은 다른 "identity"개념과 유사합니다. 즉, 효과가없는 작업입니다.

예를 들어, 수학에서 곱셈이 발생하지 않는 것처럼 동일한 벡터/행렬에 벡터/행렬 결과를 곱하면 ID 행렬이 생깁니다.

신원 기능에도 동일하게 적용됩니다. 매개 변수를 그대로 반환하며 논리와 관련하여 아무런 효과가 없습니다. 마치 논리적 인 관점에서 말했듯이 함수가 호출되지 않은 것처럼 보입니다. 기술적 인 영향을 볼 수 있습니다. 몇 가지 지시 사항이 실행됩니다.

+0

위키 피 디아가 말한 바입니다. 제 질문은 '무엇'이 아니며, '왜 그렇게 부름 받았습니까?' – Adam

+1

@ Adam 해당 함수에 전달 된 입력이 반환하는 출력과 동일하기 때문에. – Eran

3

정체성 : 수학에서

당신이로 나타낼 수 :는 identity function

+0

하지만 "신원 기능"으로 알려진 이유를 말씀해 주시겠습니까? 사전에있는 "identity"라는 단어는 '자신이나 다른 사람이 아니라 자신의 상태'를 의미합니다. – Adam

+0

@ Adam 예, 수학적 의미에서 ID 연산은 해당 속성, 즉 "들여 쓰기"함수를 유지합니다. f (x) = x'는 값의 "동일성"을 유지합니다. 즉, 반환 된 값은 여전히 ​​매개 변수로 전달 된 값과 같습니다. – Thomas