Tôi thấy rất nhiều chủ đề liên quan đến lập trình hàm đề cập đến các cập nhật phá hoại. Tôi hiểu rằng đó là một cái gì đó tương tự như đột biến, vì vậy tôi hiểu phần cập nhật. Nhưng phần phá hoại là gì? Hay tôi chỉ nghĩ quá nhiều?Bản cập nhật phá hoại là gì?
Trả lời
Có lẽ bạn đang xem nhẹ nó một chút. Tính bất biến là tất cả với nó; điều duy nhất bị "hủy" là giá trị trước đó của bất kỳ điều gì bạn đã đột biến.
Giả sử bạn đang sử dụng một số loại cây tìm kiếm để lưu trữ giá trị và bạn muốn chèn một giá trị mới. Sau khi tìm thấy vị trí nơi các giá trị mới đi, bạn có hai lựa chọn:
Với một cây không thay đổi, bạn xây dựng các nút mới dọc theo con đường từ vị trí giá trị mới của lên vào thư mục gốc. Subtrees không dọc theo đường dẫn được tái sử dụng trong cây mới, và nếu bạn vẫn còn có một tham chiếu đến gốc của cây gốc, bạn có thể sử dụng cả hai, với các subtrees chung được chia sẻ giữa chúng. Điều này tiết kiệm trên không gian mà không cần thêm nỗ lực nếu bạn có nhiều bản sao hơi khác nhau trôi nổi xung quanh, và tất nhiên bạn có tất cả các lợi ích thông thường của cấu trúc dữ liệu không thay đổi.
Với cây có thể thay đổi được, bạn đính kèm giá trị mới nơi nó thuộc về và đó là giá trị đó; không có gì khác phải được thay đổi. Điều này hầu như luôn luôn nhanh hơn và tiết kiệm cho việc cấp phát bộ nhớ nếu bạn chỉ có một bản sao, nhưng bất kỳ thứ gì có liên quan đến cây "cũ" đều có tham chiếu đến cây mới. Bản gốc đã bị phá hủy; nó biến mất mãi mãi. Nếu bạn cần giữ nguyên bản gốc, bạn phải đi đến chi phí tạo bản sao hoàn toàn mới của toàn bộ điều trước khi thay đổi nó.
Nếu "hủy diệt" dường như một cách không cần thiết khắc nghiệt để mô tả một đơn giản cập nhật tại chỗ, sau đó bạn đã có thể không dành nhiều thời gian như tôi đã gỡ lỗi mã để tìm ra nơi trên trái đất một số giá trị đang bị thay đổi sau lưng bạn.
Cũng đã nói! Mặc dù vậy, tôi không nghĩ là phá hoại như là khắc nghiệt. Nó chỉ cảm thấy dư thừa với tôi. Tôi luôn luôn nghĩ đến việc cập nhật đột biến. Nhưng tôi cho rằng sự phá hoại bổ sung sự nhấn mạnh và thận trọng cần thiết cho thuật ngữ này. :-) – Plumenator
@Plumenator: Vâng. "Cập nhật" là tất cả rất tiến về phía trước và lạc quan, nhưng những nhược điểm đối với tính đột biến hầu như luôn luôn liên quan đến các vấn đề của những thứ * sử dụng * là gì, không phải là những gì họ đang có. Vì vậy, thuật ngữ "cập nhật phá hoại" là tốt đẹp để cân bằng mọi thứ và làm cho nó rõ ràng rằng bạn đang cả hai băng qua cầu và đốt chúng phía sau bạn. –
- 1. Các lệnh phá hoại trong git là gì?
- 2. hành vi phá hoại php
- 3. Tại sao ListAppend không phá hoại, trong khi ArrayAppend và StructInsert đều phá hoại?
- 4. LISP - cấu trúc phá hoại và không phá hủy
- 5. mức phá hoại mặc định làm
- 6. Elisp cảnh báo hoạt động phá hoại?
- 7. Cập nhật cửa sổ TCP là gì?
- 8. Từ nào được viết tắt là "N" trong tên của hàm Lisp phá hoại?
- 9. NGÀY CẬP NHẬT CẬP NHẬT làm gì?
- 10. Maven -> Cập nhật dự án ... chính xác là gì?
- 11. Cái gì nên là bảng chứa hàng cập nhật cho kích hoạt cập nhật
- 12. Sử dụng studio trực quan để xác định rằng bản dựng được cập nhật là gì?
- 13. Cách tốt nhất để cập nhật dữ liệu cơ bản của Adapter là gì?
- 14. Cách nhanh nhất để cập nhật các bản ghi hiện có bằng một chuỗi là gì?
- 15. Trong python là có một cái gì đó như cập nhật đó là để cập nhật những gì sắp xếp là để sắp xếp?
- 16. Cập nhật tự động - bảo mật 'đầy đủ' là gì?
- 17. Những thay đổi đột phá trong clojure 1.3 là gì?
- 18. Tần suất cập nhật kích hoạt kích hoạt bản cập nhật nhiều bản ghi?
- 19. Gỡ lỗi công thức nấu ăn của đầu bếp mà không bị phá hoại và tái cung cấp
- 20. Bản đồ STL - chèn hoặc cập nhật
- 21. Symfony - cập nhật nhiều bản ghi
- 22. Cập nhật phiên bản OpenSSL trên OSX
- 23. Cập nhật hộp văn bản khi nhập
- 24. Văn bản nhãn không được cập nhật
- 25. Sự khác nhau giữa "Cập nhật ảnh chụp nhanh" và "Cập nhật phụ thuộc" trong m2eclipse là gì?
- 26. Bản cập nhật Android Studio 0.2.6 đã phá vỡ dự án của tôi, yêu cầu tôi thiết lập jdk
- 27. Cập nhật mục nhập bản đồ java
- 28. bản đồ java cập nhật đồng thời
- 29. Cập nhật nhiều bản ghi trong SQL
- 30. Cách cập nhật phiên bản Android 2.3.6
Ví dụ: bản cập nhật phá hoại sẽ là sắp xếp danh sách tại chỗ, trong khi không phá hủy danh sách sẽ tạo bản sao được sắp xếp. Phá hủy sẽ thay đổi một phần tử mảng, một thuộc tính đối tượng ... bất cứ thứ gì hoạt động trên đối tượng/dữ liệu gốc. –