2011-12-14 15 views
11

Vì vậy, "idempotence" có thể được định nghĩa là:Xác định Idempotence

Một hành động, nếu N lần thực hiện có tác dụng tương tự như chỉ thực hiện hành động một lần.

OK, đủ dễ dàng.

Câu hỏi của tôi là về sự tinh tế của định nghĩa này - có phải hành động được coi là chính xác không, hoặc bạn cũng phải xem xét dữ liệu được chuyển vào hành động?

Hãy để tôi làm rõ với một ví dụ:

Giả sử tôi có một phương pháp PUT cập nhật một số tài nguyên, chúng tôi sẽ gọi nó là f(x)

Rõ ràng, f(3) là idempotent, chừng nào tôi còn cung cấp 3 như đầu vào. Và không kém phần rõ ràng, f(5) sẽ thay đổi giá trị của tài nguyên (tức là, nó sẽ không còn là 3 hoặc bất kỳ giá trị nào đã có trước đây)

Vì vậy, khi chúng ta nói về tính không tải, chúng ta đề cập đến khái quát của hành động/chức năng như (ví dụ: f(x)) hoặc chúng tôi đang đề cập đến hành động/chức năng + dữ liệu được truyền vào nó (ví dụ: f(3))?

+1

Điều này có nên không được chuyển đến diễn đàn Toán học không? (Đối với tất cả sự rõ ràng: Tôi không downvote) –

+0

Phụ thuộc nếu chúng ta đang nói về một định nghĩa trong logic chính thức, hoặc một định nghĩa trong lập trình web. Tôi nghi ngờ downvoter (không phải tôi) chỉ nghĩ rằng câu hỏi là ill-posed. –

+1

@Roy -Tôi không nghĩ vậy, vì nó áp dụng trực tiếp cho các dịch vụ web RESTful, và đó là ngữ cảnh tôi đã viết ví dụ trong – Didaxis

Trả lời

5

Giả sử tôi có một phương pháp PUT cập nhật một số tài nguyên, chúng tôi sẽ gọi nó là f (x)

Rõ ràng, f (3) là idempotent, chừng nào tôi còn cung cấp 3 như đầu vào. Và không kém rõ ràng, f (5) sẽ thay đổi giá trị của tài nguyên (tức là, sẽ không còn là 3 hoặc bất kỳ giá trị nào đã có trước đó).

Điều này chỉ rõ ràng là việc triển khai máy chủ là như vậy mà PUT tôn trọng thuộc tính không cần thiết này. Trong bối cảnh HTTP, RFC 2616 says:

Phương pháp cũng có thể là tài sản của "idempotence" trong đó (ngoài từ các vấn đề lỗi hoặc hết hạn) các tác dụng phụ của N> 0 giống hệt yêu cầu là giống như một yêu cầu duy nhất.

Tắt chủ đề bit ... Trong hệ thống phân tán như web, bạn cũng có thể muốn xem xét tính tương giao và yêu cầu đồng thời. Ví dụ N + 1 của cùng một yêu cầu PUT (x1) phải có cùng tác dụng, nhưng bạn không biết liệu một máy khách khác đã thực hiện một yêu cầu PUT (x2) khác giữa bạn hay không, vì vậy trong khi n PUT (x1) = PUT (x1) và m PUT (x2) = PUT (x2), hai tập hợp các yêu cầu có thể được xen kẽ.

+0

Vì vậy, từ điều này chúng ta có thể kết luận, trong ví dụ này, PUT là idempotent trong bối cảnh của một yêu cầu duy nhất. Nhưng ngay cả khi nó được xen kẽ với các yêu cầu đồng thời khác, nó vẫn là không đáng kể khi kết quả của phép toán đầu tiên theo sau thuộc tính idempotence, đúng không. –

3

Bạn giả sử tính không có nghĩa là trạng thái của máy chủ sẽ được thay đổi tối đa một lần bởi một loạt các lời gọi. Hầu hết thời gian, mọi người sử dụng thuật ngữ này để có nghĩa là trạng thái trên máy chủ sẽ không bị thay đổi ở tất cả bởi bất kỳ số lượng lời gọi nào. Trong những trường hợp này, sự khác biệt giữa hai trường hợp của bạn là không quan trọng.

+3

Nhưng nói rằng "thắng" t được thay đổi ở tất cả "là" nullipotent ", phải không? Đây sẽ là GET, HEAD, OPTIONS và TRACE – Didaxis

5

Idempotence yêu cầu hành động giữ cho tất cả các giá trị trên miền của nó, tức là, f(f(x)) = f(x) cho tất cả x. Một cách khác để suy nghĩ về nó là một hoạt động là idempotent nếu thành phần của hoạt động với chính nó chỉ là hoạt động đó.

+0

@JonathanM Xin lỗi, tôi không thấy quan điểm của bạn. 'abs (abs (x)) = abs (x)' cho tất cả 'x', trên số thực hoặc số phức. Nếu bạn nghĩ rằng 'abs' không khớp với những gì tôi đã nói, hãy đưa ra một ví dụ. –

3

Đây không phải là định nghĩa hoàn toàn về tính ngẫu nhiên. Một hàm là idempotent nếu cho bất kỳ mục x, f (f (x)) == f (x).

PUT là tác dụng phụ của hàm f() của bạn ở đây, không phải là kết quả của nó.

+0

Định nghĩa của bạn đi ngược lại ở đây: http://en.wikipedia.org/wiki/Idempotence. Các trang đầu tiên 'abs()' là một hàm idempotent, nhưng nó sẽ không theo định nghĩa của bạn. –

+0

Điều này chỉ đơn giản là sai. Bạn đã xác định idempotence tương đương với hàm nhận dạng. Bạn đang ngầm giả định rằng các hoạt động đã được thực hiện để x. –

+0

Vâng, đó là sự thật, xin lỗi vì sự nhầm lẫn ... – fge