간단히 말해서, 제한 사항은 사물을 결합하는 올바른 방법이 적다는 것을 의미하며, 일류 함수는 루프 구조와 같은 요소를 더 쉽게 추출 할 수있게합니다. 이 답변 에서 루프를 가져옵니다. 예를 들면 다음과 같습니다.
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
iterator.remove();
}
}
이것은 Java에서 반복하는 동안 컬렉션에서 요소를 제거하는 안전한 방법 중 하나입니다. 매우 가깝게 보이지만 잘못된 방법이 많이 있습니다. 이 방법을 모르는 사람들은 때로는 사본을 반복하는 것처럼 문제를 피하기 위해 복잡한 방법을 사용합니다.
이 제네릭을 만드는 것은 끔찍한 일이 아니기 때문에의 컬렉션 이상에서 작동 Strings
하지만 일급 함수가 없으면 술어 ( if
) 안의 조건을 바꿀 수 없으므로이 코드는 복사되어 붙여 넣는 경향이 있습니다 약간 수정되었습니다.
당신에게주는 일류의 기능을 결합 능력 그렇게하지 않으면 매우 성가신하게 불변성의 제한 매개 변수로의 술어를 통과를, 그리고 당신은 같은 간단한 빌딩 블록 마련 filter
이 스칼라 코드와 같이, 그것은 같은 일을합니다 :
list filter (!_.isEmpty)
스칼라의 경우 컴파일 타임에 타입 시스템이 당신을 위해 무엇을 검사하는지 생각해보십시오. 그러나이 검사는 처음으로 그것을 실행할 때 동적 타입 시스템에 의해 수행됩니다.
list
filter
메소드 를 지원하는 일종의 유형 , 즉 컬렉션 이어야합니다 .
- 의 요소 에는 부울을 리턴
list
하는 isEmpty
메소드가 있어야합니다 .
- 출력은 동일한 유형의 요소를 가진 (잠재적으로) 더 작은 모음입니다.
일단 그러한 것들이 확인되면 프로그래머가 망치는 다른 방법은 무엇입니까? 실수로를 잊어 버렸기 때문에 !
테스트 사례가 매우 명백하게 실패했습니다. 그것은 유일하게 할 수있는 유일한 실수이며, 역 조건을 테스트 한 코드에서 직접 번역했기 때문에 실수했습니다.
이 패턴은 반복해서 반복됩니다. 일급 함수를 사용하면 정확한 의미를 가진 재사용 가능한 작은 유틸리티로 사물을 리팩토링 할 수 있으며, 불변성과 같은 제한 사항으로 인해 그렇게 할 수 있습니다. 유틸리티의 매개 변수를 검사하면 유형을 확인하는 데 필요한 공간이 거의 없습니다.
물론 이것은 filter
이미 단순화 된 기능이 이미 존재 한다는 것을 알고 그것을 찾을 수 있거나 자신을 만들면 얻을 수있는 이점을 인식 한다는 것을 프로그래머에게 달려 있습니다. 꼬리 재귀 만 사용하여 어디에서나 직접 구현해보십시오. 명령 버전과 같은 복잡한 보트로 돌아 왔습니다. 당신은 그냥 있기 때문에 수 매우 간단하게 쓰기, 간단한 버전은 분명 의미하지 않는다.