Sự khác biệt giữa chuyển nhượng, định giá và ràng buộc tên là gì?


7

Tôi đọc rằng ràng buộc Tên gán một số giá trị (dữ liệu / mã / biểu thức) cho một định danh . Chuyển nhượngđịnh giá dường như làm điều tương tự. Thật khó hiểu. Tôi chỉ có thể nói rằng biến miễn phí là một, không được gán một giá trị trong khi biến bị ràng buộc có giá trị được gán?

Câu trả lời:


6

Ràng buộc phải làm với việc đặt tên cho các thứ (hoặc giá trị) trong một bối cảnh được phân định rõ ràng nhất định. Bài tập là về việc lưu trữ những thứ (hoặc giá trị) ở một số vị trí (một biến). Một nhiệm vụ khác có thể thay thế một giá trị trước đó bằng một giá trị mới. Định giá bao gồm trong việc ràng buộc tất cả các định danh của một văn bản chính thức với một cái gì đó (với một giá trị). Trong toán học, các định danh này thường được gọi là các biến, điều này gây ra sự nhầm lẫn với khái niệm biến (tức là lưu trữ bộ nhớ) trong khoa học máy tính.

Cố gắng cung cấp thêm chi tiết trực quan

Liên kết tên gắn một ý nghĩa cho các định danh trong một số phần (được gọi là phạm vi) của văn bản toán học hoặc lập trình có liên quan. Ý nghĩa này thực sự có thể được coi là một giá trị trong một số miền khi văn bản được diễn giải.

Ví dụ: nếu bạn khai báo foolà biến số nguyên, giá trị được đính kèm footrong phạm vi là biến số nguyên. Một biến số nguyên có thể được nhìn thấy một cách không chính thức một thùng chứa có thể mang một giá trị nguyên, có thể được thay đổi. Bạn cũng có thể xem nó là địa chỉ của một địa điểm trong bộ nhớ nơi nội dung có thể được lưu trữ.

Nhưng nếu bạn khai báo foolà số nguyên 25, thì trong phạm vi, bất kỳ việc sử dụng nào foocũng giống với việc sử dụng 25. Nếu bạn khai báo foo là hằng số nguyên, nó không thể thay đổi và do đó giá trị của nó phải được chỉ định.

Binding đang gắn tên với một số giá trị không thay đổi trong phạm vi của tên. Một ví dụ là một tài liệu pháp lý nói rằng " for the purpose of this document, Mr. Brown, and the Smith family shall be called the beneficiary." Phạm vi là tài liệu pháp lý. Và ở mọi nơi trong tài liệu, việc sử dụng từ này beneficiarycó nghĩa là ông Brown và gia đình Smith. Bạn có thể xem nó như một định nghĩa của một thuật ngữ địa phương. Nó có liên quan đến việc đặt tên cho mọi thứ. Binding là về nói, đọc hoặc viết. Nó không phải là về việc thực thi hoặc di chuyển các giá trị xung quanh: tương ứng với việc gán.

Một biến có thể được xem như một đoạn bộ nhớ có thể chứa một giá trị, Khi bạn có một biến, bạn có thể thay đổi giá trị chứa trong biến này chứa trong một phép gán. Nếu foobị ràng buộc với (hoặc biểu thị) một biến trong phạm vi hiện tại, bạn có thể gán một giá trị cho foo, tức là cho biến được biểu thị bởi foohoặc đọc giá trị có trong biến đó. Và bạn có thể thay đổi giá trị đó bằng một nhiệm vụ mới.

Vì vậy, ràng buộc là một hoạt động cho biết ý nghĩa của tên trong văn bản của chương trình hoặc của diễn ngôn toán học. Nó là tĩnh, theo nghĩa là văn bản không thay đổi. Nhưng gán là một khái niệm lập trình bao gồm lưu trữ một giá trị trong một biến, tức là một thùng chứa, thường là một vị trí trong bộ nhớ. Đây là một khái niệm động liên quan đến cách các giá trị (biểu diễn) được lưu trữ trong bộ nhớ, thay đổi khi chương trình tiến triển.

Lưu ý rằng một biến có thể tồn tại độc lập với bất kỳ tên nào mà nó có thể bị ràng buộc. Đây là trường hợp cho một phần tử của một mảng, lấy một ví dụ đơn giản.

Trong các bối cảnh khác nhau, người ta có thể xem xét các biểu thức hoặc văn bản sử dụng tên chưa được xác định. Ví dụ: bạn có thể viết là biểu thức số học. Sau đó, bạn có thể định giá các biến bằng cách liên kết một môi trường (bạn có thể đọc khoảng một phạm vi) trong đó các biến và được liên kết với một số giá trị, ví dụ 3 và 12, và quan tâm đến giá trị được thực hiện bởi áp lực. Một định giá là một liên kết của một tập hợp các tên, mỗi tên có một giá trị cụ thể. Định giá tên được sử dụng nhiều hơn trong toán học chính thức, trong khi assigment là một khái niệm lập trình.(a2b2)/(ab)ab


Để tóm tắt, về cơ bản, bạn xác nhận rằng tất cả các hoạt động gán một giá trị cho biến / định danh / giữ chỗ. Sự khác biệt là bối cảnh. Khi chúng tôi ánh xạ khách (chương trình) đến máy chủ (máy), chúng tôi nói binding. Khi biến bị ràng buộc với một số giá trị trong khi thực hiện chương trình, chúng tôi nói it was assignedvà chúng tôi muốn nói valuatedtrong bối cảnh chính thức / cs thay thế. Tôi chỉ bắt đầu nhìn vào các biến miễn phí / ràng buộc ngày hôm nay và bối rối. Nó giống như bối cảnh chính thức / cs, tuy nhiên, thuật ngữ trình biên dịch / máy tính engeneer được sử dụng?
Val

2
@RecognizeEvilasWaste Tôi đã cố gắng làm rõ. Nhưng có một khó khăn do thực tế là thuật ngữ toán học mâu thuẫn với thuật ngữ khoa học máy tính. Một biến không thể bị ràng buộc với một số giá trị, một biến được gán một giá trị. Một định danh bị ràng buộc với một ý nghĩa, nhưng khái niệm chính thức về ý nghĩa là một số giá trị trong một miền ngữ nghĩa. Bạn không chỉ định định danh, bạn không ràng buộc các biến. Định danh là cú pháp, lời nói. Các biến là bộ nhớ, được sử dụng để lưu trữ thông tin. Trên thực tế, đó là biệt ngữ máy tính được bắt nguồn từ bài phát biểu chính thức.
babou

2
Sự nhầm lẫn của bạn là điều dễ hiểu. Trong phép tính lambda, biến từ được sử dụng cho cái mà tôi gọi là định danh. Tổng quát hơn, có cả một nhánh lập trình, được gọi là lập trình chức năng, không được phép sử dụng phép gán. Vì vậy, về nguyên tắc mọi thứ được thực hiện thông qua sự ràng buộc, nhưng nó mang lại một phong cách lập trình rất khác. Tính toán Lambda là ví dụ chính thức cơ bản về điều đó. Tuy nhiên, họ vẫn nói về các biến cho định danh là gì. Bạn đặt câu hỏi là công bằng, và thuật ngữ là lộn xộn. Vâng, tôi đã làm hết sức mình.
babou 18/2/2015

@RecognizeEvilasWaste Câu hỏi của bạn thực sự là một câu hỏi rất hay. Tôi đã không nhận ra bao nhiêu sự mơ hồ này tạo ra cho người mới bắt đầu.
babou

Không chỉ dành cho người mới. Tôi sẽ nói rằng tôi khá có kinh nghiệm trong các vấn đề này. Tôi có thể hiểu ý nghĩa của chúng. Nhưng tôi luôn gặp khó khăn khi sử dụng thuật ngữ này khi tôi muốn nói những điều tương tự. Tôi cũng muốn thấy mối quan hệ giữa các sự vật, en.wikipedia.org/wiki/User:Javalenok Điều này giúp hiểu.
Val
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.