Небольшой пример о неизменности:
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, как правило, реализуются с помощью системы типов, поэтому это является более ограничительным и трудным для непреднамеренного нарушения. Но в то же время вы требуете от пользователя пользовательских знаний о действительно сложной системе типов, иногда теории категорий - в противном случае очень сложно извлечь выгоду из того, что эта вещь является «монадой» или «моноидной» или любой другой. Я могу использовать списки, не зная, что это монады или действительно полезная концепция «будущего» в Дарте. Когда вы реализуете FP без «магии типа», это часто становится более понятным и доступным для понимания средним разработчиком. Но в то же время наличие мощной системы типов может помочь компилятору выполнить расширенную оптимизацию кода и обеспечить лучший статический анализ кода.
Category theory for JavaScript programmers - Стоит посмотреть.
добавил: Теперь коллекции имеют UnmodifiableListView
UnmodifiableMapBase
UnmodifiableMapView
Ссылочная прозрачность - это функция хорошего дизайна, а не язык (да, иногда это принудительно). Точка, вы можете получить 99,9% пути с хорошей практикой программирования, например, только с использованием неизменяемых объектов и т. Д. – EdwardGarson
Я согласен с тем, что вы можете писать Fortran практически на любом языке, но это не главное, не так ли? :-) – Ladicek
Я не уверен, что я следую. Нельзя писать Fortran на любом языке, но только в Fortran вы можете писать Fortran. Вам не хватает того, что даже без поддержки компилятора (или: языка) вы можете гарантировать ссылочную прозрачность. Он превосходит язык. – EdwardGarson