Tại sao có quá nhiều tiếng vang về việc đóng cửa? [đóng cửa]


9

Tại sao có quá nhiều tiếng vang về việc đóng cửa giữa các nhà phát triển? Trong sự nghiệp của mình, tôi không bao giờ cố ý sử dụng chúng, mặc dù không hiểu rõ chúng là gì.

CẬP NHẬT: chỉ để làm rõ. Câu hỏi là về lý do tại sao các khái niệm đóng cửa trở nên rất nhiều ngày nay.


3
Làm thế nào bạn có thể cố ý sử dụng một cái gì đó mà bạn không biết nó là gì? Vì vậy, về cơ bản, trước tiên bạn nên hỏi (hoặc tìm kiếm hơn) những gì đóng cửa.
Steven Jeuris

1
Bạn đã đọc bài viết trên wikipedia? Bạn đã không hiểu gì về nó?
kevin cline

2
Sự nghiệp của bạn dựa trên điều gì?

4
Đây là loại câu hỏi gì? "Buzz" là gì? Bạn không hiểu gì Tại sao anh không hỏi câu hỏi để thay thế?
Aaronaught

4
Để bảo vệ OP, đóng cửa là một khái niệm cũ nhưng chỉ gần đây họ mới nói về thị trấn, có thể nói như vậy. Và khái niệm này thực sự rất đơn giản với bất kỳ ai học toán nhiều hơn một chút, tôi cũng không thể hiểu tại sao mọi người nói về chúng như thể chúng là một thứ gì đó rất khó hiểu. Có lẽ đó chỉ là một cách để làm cho mình trông thông minh hơn: "nhìn này, tôi tự mò mẫm những thứ rất khó để mò mẫm, vì vậy tôi đá".
quant_dev

Câu trả lời:


22

Một bao đóng là mã ghi nhớ thế giới nơi nó đến trong khi vẫn có thể sử dụng được nơi nó được mang đến.

Một ví dụ đang định nghĩa một hàm ẩn danh trong Java, biết rằng nó nằm trong YourObject và có thể thao tác các phương thức và hàm của nó. Hàm này sau đó được chuyển đến ví dụ: Xoay nơi nó đi sâu vào bên trong, ví dụ như Trình nghe nhưng vẫn có một đường dây trở về gốc.

Đây là một khái niệm rất mạnh mẽ vì nó cho phép bạn phân phối mã mà - không biết đến mã sử dụng nó - có thể quay trở lại vào các phần khác của mã.


1
Đúng. Đó là một cách để tiêm không chỉ thủ tục, mà cả trạng thái, vào mã khác. Điều này cho phép mức độ linh hoạt rất cao trong việc thiết kế các thuật toán; bạn có thể thiết kế các phương thức templated phụ thuộc vào các chương trình con có trạng thái, mà nó thậm chí có thể không biết về thời gian biên dịch. Nhược điểm là liên kết đến nguồn ban đầu của phương thức đó, và do đó, có thể bị phá vỡ mà không có phương thức tiêu thụ biết về nó; khi điều đó xảy ra, bạn sẽ gặp lỗi thời gian chạy khó tìm.
KeithS

1
Ha ha, hàm ẩn danh trong Java ... Hài hước.
cấu hình

1
@configurator, không buồn cười, một thực tế.


java 7 không có bao đóng.

6

Đóng cửa chỉ là một cái gì đó để giải quyết một loạt các vấn đề một cách thanh lịch. Trên thực tế, trong các ngôn ngữ lập trình không có sự đóng cửa tồn tại, các kỹ thuật được tạo ra để thực hiện các chức năng tương tự.

Chỉ cần nghĩ về functor trong C ++ hoặc Runnables trong Java. Chúng chỉ là các kỹ thuật cho phép các chức năng tương tự như đóng cửa. Một số loại «đóng cửa thủ công».

Việc đóng cửa đang trở nên phổ biến hơn vì chúng được tích hợp vào các ngôn ngữ phổ biến: Javascript đang phát triển do các ứng dụng trực tuyến (ví dụ như google doc), C # đã triển khai nó, PHP đã triển khai nó từ ngày 5.3, v.v.

Giờ đây, việc đóng cửa đã có sẵn trong ngày càng nhiều công nghệ, nó trở nên khá đơn giản khi ngày càng có nhiều người quan tâm đến chúng.

Vậy bây giờ, đóng cửa là gì? Điều này khá đơn giản. Một bao đóng là một chức năng và một bối cảnh để thực hiện nó trong. Điều này được chế tác như một đối tượng. Tại sao điều này hữu ích? Điều này rất hữu ích để móc mã của riêng bạn vào mã hiện có.

Dưới đây là hai tình huống phổ biến yêu cầu: khi các hành động được quản lý bởi một đoạn mã khác, như trong đa luồng với một nhóm luồng hoặc khi một hành động phải được thực thi trong một sự kiện được chọn (thường được sử dụng trong javascript cho UI).


Tôi đã hiểu rõ bạn chưa? Có một số "đóng cửa thủ công" (không thực sự là đóng cửa, nhưng một số thứ tương tự như hành vi của họ) và có một số "đóng cửa ĐÚNG"?

Đóng cửa là một khả năng ngôn ngữ. Một số ngôn ngữ không có khả năng đó, vì vậy bạn phải đóng cửa bằng tay bằng cách sử dụng các công cụ mà ngôn ngữ cung cấp cho bạn. Nói rằng họ có ĐÚNG hay không không phải là một cuộc tranh luận rất thú vị IMHO.
deadalnix

2
@gasan, bạn luôn có thể rút ra lắp ráp và thực hiện thủ công bất kỳ mẫu nào bạn muốn với một loạt các câu lệnh GOTO. Tương tự, bạn có thể thực hiện thủ công vòng lặp "for" với vòng lặp "while" (trong C ++). Các cấp độ cao hơn, cao hơn cung cấp một cách chuẩn hóa để làm những việc phổ biến.
Philip

6

Tôi đã thấy một trích dẫn thú vị vào ngày khác, đó là dòng chữ "các lớp là dữ liệu với các hàm. Đóng là các hàm với dữ liệu".

Vâng, đó là một sự đơn giản hóa, nhưng nó giúp có được điểm.


+1 Cách hay để xem thế nào là đóng cửa: D
deadalnix
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.