Google 다트 언어는 기능 프로그래밍이 가능합니까? 특히 다음 기능이 지원됩니까? 변수 (참조)로서 저장다트는 함수형 프로그래밍을 지원합니까?
- 기능
- 기능 태닝,
- 지연 파라미터 함수형 프로그래밍의
다른 특징?
다트가 불변의 데이터를 지원하지 않는 것 같습니다.
Google 다트 언어는 기능 프로그래밍이 가능합니까? 특히 다음 기능이 지원됩니까? 변수 (참조)로서 저장다트는 함수형 프로그래밍을 지원합니까?
다른 특징?
다트가 불변의 데이터를 지원하지 않는 것 같습니다.
다트는 일류 함수를 가지고 있으며 많은 함수 프로그래밍 구조를 지원합니다.
예상대로main() {
f1(x) => x * 2; // Define the function f1
var f2 = f1; // Assign f1 to the variable f2
print(f2(7)); // Feel free to call f2 like any other function
add(a) => (b) => a + b; // Curried addition
print(add(3)(4)); // Calling curried addition
var add3 = add(3); // Combining the
print(add3(2)); // concepts
}
,이 생산 :
14 7 5
나는 게으른 매개 변수이 가능 믿지 않는, 당신은 이미 주목 여기에 카레 기능 변수와의 기능을 할당의 몇 가지 예입니다 분명히 변경할 수있는 데이터가 있습니다.
"함수 프로그래밍"의 의미에 따라 다릅니다. 함수는 포인트 1을 다루는 퍼스트 클래스 객체입니다. 캐어링을 구현할 수있는 Function.apply
이 있습니다. 포인트 2를 다루지 만 다트는 그다지 기능적이지 않습니다 (변경 불가능 - 아니요, 참조 투명도 - 아니요 , 게으른 평가 - 아니, 그밖에 또 무엇을 - 아마 또한 아니오).
더 다트 FP 경험을 향상 패키지 https://github.com/vsavkin/fpdart
꼬리 재귀 불변성에 대한 https://code.google.com/p/dart/issues/detail?id=29
작은 예에 대한 개방 문제 :
class Point {
Point(this.x, this.y);
int x,y;
int get sum => x + y;
}
class ImmutablePoint{
final int x,y, sum;
const ImmutablePoint(x,y) :
this.x = x,this.y = y,this.sum = x + y;
}
class SemiImmutablePoint {
int _x, _y; // _ -like private but not access protected by the VM.
SemiImmutablePoint(this._x, this._y);
int get x => _x;
int get y => _y;
}
void main() {
List<int> li = [1,2,3,4,5];
final List<int> immutableLi = const [1,2,3,4,5];
li[1] = 10; //ok
li = [6,7,8]; //ok
immutableLi[1] = 10; //error because const
immutableLi = [6,7,8]; //error because final
var p = new Point(5,10);
p.x = 10; //ok
p.sum = 10; // error can't be directly mutated
var p2 = const ImmutablePoint(5,10); // compile-time constant
p2.x = 10; //error
}
당신은 함께 FP를 사용할 수 있습니다 다트 또는 심지어 유형이나 JS와 같은 불변의 언어가없는 언어. 그것은 단지 스타일 일 뿐이며, 언어에서 기본 구현을 요구하지 않습니다.
Scala FP 패러다임과 같은 언어는 일반적으로 유형 시스템으로 구현되므로 실수로 위반하는 것이 더 엄격하고 어렵습니다. 그러나 동시에 lib 사용자가 정말로 복잡한 유형 시스템, 때로는 범주 이론에 대한 전문 지식이 필요합니다. 그렇지 않으면이 항목이 "모나드"또는 "모노oid"또는 기타 무엇인지 알면 큰 이익을 얻을 수 없습니다. 나는 그것들이 모나드이거나 다트에서 "미래"라는 정말로 유용한 개념을 모른 채리스트를 사용할 수 있습니다. FP를 "타입 매직 (magic type)"없이 구현하면 평균 개발자가 더 명확하고 이해하기 쉽습니다. 그러나 동시에 강력한 유형 시스템을 사용하면 컴파일러가 고급 코드 최적화를 수행하고 더 나은 정적 코드 분석을 수행하는 데 도움이 될 수 있습니다.
Category theory for JavaScript programmers - 주목할 가치가있다.
추가 : 지금 컬렉션은 당신의 마지막 지점에 UnmodifiableListView
UnmodifiableMapBase
UnmodifiableMapView
"FP 스타일은 최신 브라우저 엔진에서 많은 의미를 갖지 못합니다."... 어떤 부분이 정확히 젤을 만들지 못합니까? – EdwardGarson
@EdwardGarson 지난 4 년 동안 나는 틀렸다는 것을 보여주었습니다 : P – JAre
정확히 무엇이 잘못 되었습니까? – EdwardGarson
이, 불변성은 다음을 참조하십시오
리터을 제공하는 불변의 콜렉션과 「치 형」에 관한 library 및 codegen의 서포트 이 도움말 다리 불변 값을 인라인 "업데이트"를 수 있도록 예를 들어 OO와 함수형 프로그래밍 사이의 간격, "노드"와 "updatedNode"모두 불변
var node = new Node((b) => b
..left.left.left.right.left.right.label = 'I’m a leaf!'
..left.left.right.right.label = 'I’m also a leaf!');
var updatedNode = node.rebuild((b) => b
..left.left.right.right.label = 'I’m not a leaf any more!'
..left.left.right.right.right.label = 'I’m the leaf now!');
. 이 기사의 더 자세한 내용은 built_value for Immutable Object Models입니다.
참조 투명도는 좋은 디자인의 기능입니다. 항상 언어가 아닙니다 (예, 때때로 강제 적용됩니다). 요점은, 당신은 불변의 객체 등을 사용하는 것 같은 좋은 프로그래밍 습관으로 99.9 %를 얻을 수 있다는 것입니다. – EdwardGarson
Fortran을 거의 모든 언어로 작성할 수 있다는 것에 동의하지만 그게 중요하지 않습니까? :-) – Ladicek
나는 잘 모르겠다. Fortran은 어떤 언어로도 쓸 수 없으며 Fortran에서만 쓸 수 있습니다. 컴파일러 (또는 : 언어) 지원 없이도 참조 투명성을 보장 할 수 있다는 요점을 놓치고 있습니다. 그것은 언어를 초월합니다. – EdwardGarson