mały przykład o niezmienności:
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
}
Można wykorzystać FP z Dart, a nawet języki bez typów lub niezmienności, takie jak JS. to tylko styl, nie wymaga natywnej implementacji w języku.
W takich językach jak Scala FP paradygmaty są zwykle wdrażane w systemie typu, więc jest bardziej restrykcyjne i trudniejsze do niezamierzonego naruszenia. Ale jednocześnie potrzebujesz od użytkownika biblioteki specjalistycznej wiedzy na temat naprawdę skomplikowanego systemu, czasami teorii kategorii - w przeciwnym razie naprawdę trudno jest czerpać korzyści z tego, że jest to "monada" lub "monoid" czy cokolwiek innego. Mogę używać list nie wiedząc, że są to monady lub naprawdę użyteczna koncepcja "przyszłości" w Dart. Kiedy wdrażasz FP bez "magii typu", jest to często bardziej przejrzyste i łatwiejsze do uchwycenia przez przeciętnego programistę. Ale jednocześnie posiadający potężny system typów może pomóc kompilatorowi wykonać zaawansowane optymalizacje kodu i umożliwić lepszą analizę kodu statycznego.
Category theory for JavaScript programmers - Warto obejrzeć.
dodania: Teraz zbiory mają UnmodifiableListView
UnmodifiableMapBase
UnmodifiableMapView
Przejrzystość referencyjna jest funkcją dobrego projektu, nie zawsze języka (tak, czasami jest wymuszona). Zauważ, że możesz zdobyć 99,9% drogi dzięki dobrym praktykom programistycznym, takim jak używanie tylko niezmiennych obiektów. – EdwardGarson
Zgadzam się, że możesz napisać Fortran w prawie każdym języku, ale nie o to chodzi, prawda? :-) – Ladicek
Nie jestem pewien czy podążam. Nie można pisać Fortranu w jakimkolwiek języku, tylko w Fortranie można napisać Fortran. Brakuje ci punktu, który nawet bez wsparcia kompilatora (lub: języka), możesz zagwarantować referencyjną przezroczystość. Przekracza język. – EdwardGarson