ví dụ nhỏ về tính bất biến:
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
}
Bạn có thể sử dụng FP với Phi tiêu hoặc thậm chí các ngôn ngữ không có loại hoặc bất biến như JS. nó chỉ là một phong cách, nó không yêu cầu thực hiện bản địa trong ngôn ngữ.
Với các ngôn ngữ như mô hình Scala FP thường được triển khai với hệ thống kiểu nên sẽ bị hạn chế và khó khăn hơn để vô tình vi phạm. Nhưng đồng thời bạn yêu cầu kiến thức chuyên môn của người dùng lib về hệ thống kiểu thực sự phức tạp, đôi khi là lý thuyết thể loại - nếu không thì thật khó kiếm được lợi ích khi biết rằng thứ này là "đơn nguyên" hay "monoid" hay gì đó. Tôi có thể sử dụng danh sách mà không biết rằng đó là những monads hoặc khái niệm thực sự hữu ích về "tương lai" trong Dart. Khi bạn triển khai FP mà không có "loại ma thuật", nó thường rõ ràng hơn và dễ nắm bắt hơn bởi một nhà phát triển trung bình. Nhưng đồng thời có hệ thống kiểu mạnh mẽ có thể giúp trình biên dịch thực hiện tối ưu hóa mã nâng cao và cho phép phân tích mã tĩnh tốt hơn.
Category theory for JavaScript programmers - Đáng xem.
thêm: Bây giờ bộ sưu tập có UnmodifiableListView
UnmodifiableMapBase
UnmodifiableMapView
Tính minh bạch tham chiếu là chức năng của thiết kế tốt, không phải lúc nào cũng là ngôn ngữ (có, đôi khi bị buộc). Điểm là, bạn có thể nhận được 99,9% cách có thực hành lập trình tốt, như chỉ sử dụng các đối tượng bất biến, v.v. – EdwardGarson
Tôi đồng ý rằng bạn có thể viết Fortran bằng hầu hết mọi ngôn ngữ, nhưng đó không phải là vấn đề, phải không? :-) – Ladicek
Tôi không chắc chắn tôi làm theo. Người ta không thể viết Fortran bằng bất kỳ ngôn ngữ nào, chỉ ở Fortran bạn mới có thể viết Fortran. Bạn đang thiếu điểm mà ngay cả khi không có trình biên dịch (hoặc: ngôn ngữ) hỗ trợ, bạn có thể đảm bảo tính minh bạch tham chiếu. Nó vượt qua ngôn ngữ. – EdwardGarson