Kleines Beispiel über Unveränderlichkeit Erfahrung Dart FP weiter https://github.com/vsavkin/fpdart
Eine offene Frage über Endrekursion verbessert: mit der
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
}
Sie können FP verwenden Dart oder sogar Sprachen ohne Typen oder Unveränderlichkeit wie JS. Es ist nur ein Stil, es erfordert keine native Implementierung in der Sprache.
Mit den Sprachen wie Scala werden FP-Paradigmen normalerweise mit dem Typsystem implementiert, so dass es restriktiver und schwerer ist unbeabsichtigt zu brechen. Aber zur gleichen Zeit verlangen Sie vom lib Benutzer spezielles Wissen von wirklich komplexem Typsystem, manchmal Kategorientheorie - andernfalls ist es wirklich schwer davon zu profitieren zu wissen, dass dieses Ding "Monade" oder "Monoid" oder was auch immer ist. Ich kann Listen verwenden, ohne zu wissen, dass das Monaden oder wirklich nützliches Konzept von "Zukunft" in Dart sind. Wenn Sie FP ohne "type magic" implementieren, ist es oft klarer und zugänglicher für einen durchschnittlichen Entwickler. Aber zur gleichen Zeit mit leistungsfähigen Typ System kann Compiler führen erweiterte Code-Optimierungen und ermöglichen bessere statische Code-Analyse.
Category theory for JavaScript programmers - Sehenswert.
hinzugefügt: Jetzt haben Sammlungen UnmodifiableListView
UnmodifiableMapBase
UnmodifiableMapView
Referentielle Transparenz ist eine Funktion von gutem Design, nicht immer Sprache (ja, manchmal ist es gezwungen). Punkt sei, Sie können 99,9% des Weges dort mit guten Programmierpraktiken erhalten, wie nur unveränderliche Objekte etc. – EdwardGarson
Ich stimme zu, dass Sie Fortran in fast jeder Sprache da draußen schreiben können, aber das ist nicht der Punkt, oder? :-) – Ladicek
Ich bin mir nicht sicher, ob ich folge. Man kann Fortran in keiner Sprache schreiben, nur in Fortran kannst du Fortran schreiben. Ihnen fehlt der Punkt, dass Sie auch ohne Unterstützung von Compiler (oder: Sprache) referenzielle Transparenz gewährleisten können. Es geht über Sprache hinaus. – EdwardGarson