10.5 Lambda
10.5 Lambda
정의: Lambda
Lambda는 list 또는 반복자(iterators)에 함수를 적용할 수 있게 하는 Haxe 내의 함수형 언어 개념입니다. Lambda 클래스는 Haxe로 함수형 스타일 프로그래밍을 사용하기 위한 함수형 메서드의 모음입니다.
using Lambda( 정적 확장(Static Extension) 참조)와 함께 사용하는 것이 이상적이며, 그러면 Iterable 타입의 확장으로 동작합니다.
정적 플랫폼에서는 Iterable 구조로 작업하는 것이 Array와 List 같은 알려진 타입에서 직접 연산을 수행하는 것보다 느릴 수 있습니다.
Lambda 함수(Lambda Functions)
Lambda 클래스는 전체 Iterable을 한 번에 연산하게 해줍니다. 루프 루틴보다 오류가 덜하고 읽기 쉬우므로 종종 선호됩니다. 편의를 위해 Array와 List 클래스는 Lambda 클래스에서 자주 사용되는 메서드 중 일부를 포함합니다.
예를 보는 것이 도움이 됩니다. exists 함수는 다음과 같이 지정됩니다:
static function exists<A>( it : Iterable<A>, f : A -> Bool ) : Bool
대부분의 Lambda 함수는 비슷한 방식으로 호출됩니다. 모든 Lambda 함수의 첫 번째 인자는 연산할 Iterable입니다. 많은 함수가 인자로 함수를 받기도 합니다.
Lambda.array,Lambda.listIterable을Array또는List로 변환합니다. 항상 새 인스턴스를 반환합니다.Lambda.count요소 수를 셉니다.Iterable이Array또는List면 length 속성을 사용하는 것이 더 빠릅니다.Lambda.emptyIterable이 비어있는지 확인합니다. 모든 Iterable에 대해 이 함수를 사용하는 것이 가장 좋고, length(또는 Lambda.count 결과)를 0과 비교하는 것보다 빠릅니다.Lambda.has지정된 요소가Iterable에 있는지 확인합니다.Lambda.exists요소가 기준을 만족하는지 확인합니다.Lambda.indexOf지정된 요소의 인덱스를 찾습니다.Lambda.find주어진 검색 함수의 첫 번째 요소를 찾습니다.Lambda.foreach모든 요소가 기준을 만족하는지 확인합니다.Lambda.iter각 요소에 대해 함수를 호출합니다.Lambda.concat두 Iterable을 병합해 새 List를 반환합니다.Lambda.filter기준을 만족하는 요소를 찾아 새 List를 반환합니다.Lambda.map,Lambda.mapi각 요소에 변환을 적용해 새 List를 반환합니다.Lambda.fold함수형 fold, reduce, accumulate, compress 또는 inject라고도 알려져 있습니다.
이 예는 문자열 집합에 Lambda filter와 map을 보여줍니다:
using Lambda;
class Main {
static function main() {
var words = ['car', 'boat', 'cat', 'frog'];
var isThreeLetters = function(word) return word.length == 3;
var capitalize = function(word) return word.toUpperCase();
// 세 글자 단어이고 대문자화됨.
trace(words.filter(isThreeLetters).map(capitalize)); // [CAR,CAT]
}
}
이 예는 int 집합에 Lambda count, has, foreach와 fold 함수를 보여줍니다:
using Lambda;
class Main {
static function main() {
var numbers = [1, 3, 5, 6, 7, 8];
trace(numbers.count()); // 6
trace(numbers.has(4)); // false
// 모든 숫자가 20보다 작거나 큰지 테스트
trace(numbers.foreach(function(v) return v < 20)); // true
trace(numbers.foreach(function(v) return v > 20)); // false
// 모든 숫자 합산
var sum = function(num, total) return total += num;
trace(numbers.fold(sum, 0)); // 30
// 가장 큰 숫자 구하기
trace(numbers.fold(Math.max, numbers[0])); // 8
// 가장 작은 숫자 구하기
trace(numbers.fold(Math.min, numbers[0])); // 1
}
}
관련 내용
모든 사용 가능한 함수에 대한 Lambda API 문서를 참조하세요.
출처: Lambda