Điều này không được giải thích thêm. Tôi cố gắng tìm một lời giải thích.
Đó là điều gì đó vốn có đối với nhiều người trong chúng ta, những người đã gỡ lỗi các cơ sở mã lớn nhưng bạn phải đối phó với quy mô đủ lớn ở cấp độ giám sát trong một thời gian đủ dài để đánh giá cao nó. Nó giống như hiểu được tầm quan trọng của vị trí trong Poker. Ban đầu, nó dường như không phải là một lợi thế hữu ích để tồn tại vào cuối mỗi lượt chơi cho đến khi bạn ghi lại lịch sử một triệu bàn tay và nhận ra rằng bạn đã giành được nhiều tiền hơn ở vị trí nhiều hơn là ra ngoài.
Điều đó nói rằng, tôi không đồng ý với ý kiến cho rằng thay đổi đối với biến cục bộ là tác dụng phụ. Theo quan điểm của tôi, một chức năng không gây ra tác dụng phụ nếu nó không sửa đổi bất cứ điều gì ngoài phạm vi của nó, rằng bất cứ điều gì nó chạm vào và ngăn chặn sẽ không ảnh hưởng đến bất cứ điều gì bên dưới ngăn xếp cuộc gọi hoặc bất kỳ bộ nhớ hoặc tài nguyên nào mà chức năng không có được .
Nói chung, điều khó nhất để giải thích trong một cơ sở mã phức tạp, quy mô lớn không có quy trình kiểm tra hoàn hảo nhất có thể tưởng tượng là quản lý trạng thái bền bỉ, giống như tất cả các thay đổi đối với các đối tượng dạng hạt trong thế giới trò chơi video khi bạn lội qua hàng chục hàng ngàn chức năng trong khi cố gắng thu hẹp giữa một danh sách vô số nghi phạm mà một người thực sự gây ra bất biến trên toàn hệ thống bị vi phạm ("điều này không bao giờ nên xảy ra, ai đã làm điều đó?"). Nếu không có gì được thay đổi bên ngoài chức năng, thì nó có thể không thể gây ra sự cố trung tâm.
Tất nhiên điều này là không thể làm trong mọi trường hợp. Bất kỳ ứng dụng nào cập nhật cơ sở dữ liệu được lưu trữ trên một máy khác, về bản chất, được thiết kế để gây ra tác dụng phụ, cũng như bất kỳ ứng dụng nào được thiết kế để tải và ghi tệp. Nhưng có rất nhiều thứ chúng ta có thể làm mà không có tác dụng phụ trong nhiều chức năng và nhiều chương trình, ví dụ, nếu chúng ta có một thư viện cấu trúc dữ liệu bất biến và tiếp tục mang tư duy này.
Thật thú vị, John Carmack đã nhảy vào LISP và băng nhóm bất biến mặc dù bắt đầu trong thời kỳ mã hóa C được điều chỉnh vi mô nhất. Tôi đã thấy mình làm một điều tương tự, mặc dù tôi vẫn sử dụng C rất nhiều. Đó là bản chất của những người thực dụng, tôi nghĩ, những người đã dành nhiều năm để gỡ lỗi và cố gắng lý luận về các hệ thống phức tạp, quy mô lớn nói chung từ cấp độ giám sát. Ngay cả những lỗi mạnh mẽ đáng kinh ngạc và không có nhiều lỗi vẫn có thể khiến bạn cảm thấy khó chịu rằng có gì đó không ổn đang ẩn nấp nếu có rất nhiều trạng thái phức tạp liên tục được sửa đổi trong số các biểu đồ chức năng liên kết phức tạp nhất giữa hàng triệu dòng mã. Ngay cả khi mọi giao diện đơn lẻ được kiểm tra với một bài kiểm tra đơn vị và tất cả đều vượt qua, '
Trong thực tế tôi thường thấy lập trình hàm làm cho việc hiểu một hàm khó hơn. Nó vẫn xoay não tôi thành những khúc quanh và nút thắt, đặc biệt là với logic đệ quy phức tạp. Nhưng tất cả các chi phí trí tuệ liên quan đến việc tìm ra một vài chức năng được viết bằng ngôn ngữ chức năng bị lấn át bởi một hệ thống phức tạp với các trạng thái liên tục bị thay đổi qua hàng chục ngàn chức năng, trong đó mỗi chức năng gây ra tác dụng phụ cộng lại sự phức tạp của lý luận về tính đúng đắn của toàn bộ hệ thống.
Lưu ý rằng bạn không cần một ngôn ngữ chức năng thuần túy để làm cho các chức năng tránh các tác dụng phụ. Các trạng thái cục bộ đã thay đổi trong một hàm không được tính là một hiệu ứng phụ, giống như một for
biến đếm vòng lặp cục bộ thành một hàm không được tính là một tác dụng phụ. Tôi thậm chí còn viết mã C ngày nay với mục đích tránh các tác dụng phụ khi có thể và đã tự tạo cho mình một thư viện cấu trúc dữ liệu an toàn, bất biến, có thể được sửa đổi một phần trong khi phần còn lại của dữ liệu bị sao chép và nó đã giúp tôi rất nhiều lý do về tính đúng đắn của hệ thống của tôi. Tôi hoàn toàn không đồng ý với tác giả theo nghĩa đó. Ít nhất là trong C và C ++ trong phần mềm quan trọng, một chức năng có thể được ghi nhận là không có tác dụng phụ nếu nó không chạm vào bất cứ thứ gì có thể ảnh hưởng đến thế giới bên ngoài chức năng.