Consider the following example, where a mutable Listis used to hold a  dịch - Consider the following example, where a mutable Listis used to hold a  Việt làm thế nào để nói

Consider the following example, whe

Consider the following example, where a mutable Listis used to hold a customer’s
orders:
public class Customer {
// No setter method
private final List orders;
public List getOrders() { return orders; }
public Customer(...) {...}
}
It’s reasonable that clients of Customerwill want to view the list of Orders. Unfortunately, by exposing the list through the getter method, getOrders, we’ve lost control
over them! A client could modify the list without our knowledge. We didn’t provide a
setter for ordersand it is declared final, but these protections only prevent assigning
a new list to orders. The list itself can still be modified.
We could work around this problem by having getOrdersreturn a copy of the list or
by adding special accessor methods to Customer that provide controlled access to
orders. However, copying the list is expensive, especially for large lists. Adding ad-hoc
accessor methods increases the complexity of the object, the testing burden, and the
effort required of other programmers to comprehend and use the class.
However, if the list of orders is immutable and the list elements are immutable, these
worries are gone. Clients can call the getter method to read the orders, but they can’t
modify the orders, so we retain control over the state of the object.
What happens when the list of orders is supposed to change, but it has become huge?
Should we relent and make it mutable to avoid the overhead of making big copies?
Fortunately, we have an efficient way to copy large data structures; we’ll reuse the parts
that aren’t changing! When we add a new order to our list of orders, we can reuse the
rest of the list. We’ll explore how in Chapter 3.
Some mutability is unavoidable. All programs have to do IO. Otherwise, they could do
nothing but heat up the CPU, as a joke goes. However, functional programming encourages us to think strategically about when and where mutability is necessary. If we
encapsulate mutations in well-defined areas and keep the rest of the code free of mutation, we improve the robustness and modularity of our code.
We still need to handle mutations in a thread-safe way. Software Transactional Memory
and the Actor Model give us this safety. We’ll explore both in Chapter 4.
Make your objects immutable. Declare fields final. Only provide getters
for fields and then only when necessary. Be careful that mutable final
objects can still be modified. Use mutable collections carefully. See
“Minimize Mutability” in [Bloch2008]for more tips.
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Hãy xem xét ví dụ sau, nơi một Listis mutable sử dụng để chứa một khách hàngđơn đặt hàng:công cộng lớp khách hàng {}Không có phương pháp setterdanh sách cuối cùng tư nhân đơn đặt hàng;danh sách công cộng getOrders() {trở về lệnh;}khu vực Customer(...) {...}}Nó là hợp lý mà các khách hàng của Customerwill muốn để xem danh sách các đơn đặt hàng. Thật không may, bằng cách phơi bày danh sách thông qua phương pháp getter, getOrders, chúng tôi đã mất quyền kiểm soáttrên chúng! Một khách hàng có thể sửa đổi danh sách mà không có kiến thức của chúng tôi. Chúng tôi không cung cấp mộtsetter cho ordersand nó tuyên bố cuối cùng, nhưng các bảo vệ chỉ ngăn chặn việc phân côngmột danh sách mới để đơn đặt hàng. Danh sách chính nó vẫn có thể được sửa đổi.Chúng tôi có thể làm việc xung quanh vấn đề này bằng cách có getOrdersreturn một bản sao của danh sách hoặcbằng cách thêm phương pháp đặc biệt accessor cho khách hàng cung cấp kiểm soát quyền truy cập vàođơn đặt hàng. Tuy nhiên, sao chép danh sách là đắt tiền, đặc biệt là cho các danh sách lớn. Thêm quảng cáo-hocaccessor phương pháp làm tăng sự phức tạp của các đối tượng, gánh nặng thử nghiệm, và cácnỗ lực cần thiết của lập trình viên khác để hiểu và sử dụng các lớp học.Tuy nhiên, nếu danh sách các đơn đặt hàng là không thay đổi và các yếu tố danh sách là không thay đổi, nhữnglo lắng đang đi. Khách hàng có thể gọi các phương pháp getter để đọc các đơn đặt hàng, nhưng họ có thể khôngSửa đổi đơn đặt hàng, vì vậy chúng tôi giữ lại quyền kiểm soát nhà nước của đối tượng.Những gì sẽ xảy ra khi danh sách các đơn đặt hàng là nghĩa vụ phải thay đổi, nhưng nó đã trở thành rất lớn?Nên chúng tôi trở nên dịu dàng và làm cho nó mutable để tránh chi phí làm cho bản sao lớn?May mắn thay, chúng tôi có một cách hiệu quả để sao chép cấu trúc dữ liệu lớn; chúng tôi sẽ tái sử dụng các bộ phậnđó không phải là thay đổi! Khi chúng tôi thêm một trật tự mới của chúng tôi danh sách các đơn đặt hàng, chúng tôi có thể tái sử dụng cácphần còn lại của danh sách. Chúng tôi sẽ tìm hiểu làm thế nào trong chương 3.Một số mutability là không thể tránh khỏi. Tất cả các chương trình phải làm IO. Nếu không, họ có thể làmkhông có gì nhưng nhiệt lên CPU, như một câu chuyện đùa đi. Tuy nhiên, chức năng lập trình khuyến khích chúng tôi suy nghĩ chiến lược về khi nào và nơi mutability là cần thiết. Nếu chúng tôiđóng gói các đột biến trong khu vực được xác định rõ và giữ cho phần còn lại của mã miễn phí của đột biến, chúng tôi cải thiện mạnh mẽ và mô đun của mã của chúng tôi.Chúng tôi vẫn cần phải xử lý đột biến theo phong cách chủ đề an toàn. Phần mềm giao dịch bộ nhớvà các diễn viên mô hình cung cấp cho chúng tôi an toàn này. Chúng tôi sẽ khám phá cả trong chương 4.Làm cho đối tượng của bạn không thay đổi. Tuyên bố lĩnh vực khách sạn cuối cùng. Chỉ cung cấp cho mỗicho các lĩnh vực và sau đó chỉ khi cần thiết. Hãy cẩn thận rằng cuối cùng mutablecác đối tượng vẫn có thể được sửa đổi. Sử dụng các bộ sưu tập mutable cẩn thận. Xem"Giảm thiểu Mutability" ở [Bloch2008] cho thêm lời khuyên.
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Hãy xem xét ví dụ sau đây, nơi một Listis có thể thay đổi được sử dụng để giữ một khách hàng
đơn đặt hàng:
public class Customer {
// Không có phương pháp setter
Danh sách thức tinđơn đặt hàng;
Danh sách cônggetOrders () {lệnh return; }
khách hàng nào (...) {...}
}
Đó là hợp lý rằng khách hàng của Customerwill muốn xem danh sách các đơn đặt hàng. Thật không may, bằng cách phơi bày danh sách thông qua các phương thức getter, getOrders, chúng tôi đã mất quyền kiểm soát
hơn họ! Một khách hàng có thể sửa đổi danh sách không có kiến thức của chúng tôi. Chúng tôi không cung cấp một
setter cho ordersand nó được tuyên bố chính thức, nhưng những bảo vệ chỉ ngăn chặn gán
một danh sách mới để các đơn đặt hàng. Danh sách chính nó vẫn có thể được sửa đổi.
Chúng tôi có thể làm việc xung quanh vấn đề này bằng cách có getOrdersreturn một bản sao của danh sách hoặc
bằng cách thêm các phương pháp accessor đặc biệt để khách hàng mà cung cấp kiểm soát quyền truy cập vào
các đơn đặt hàng. Tuy nhiên, sao chép danh sách là đắt tiền, đặc biệt là đối với các danh sách lớn. Thêm quảng cáo-hoc
phương pháp accessor tăng sự phức tạp của các đối tượng, các gánh nặng thử nghiệm, và những
nỗ lực cần thiết của các lập trình viên khác để hiểu và sử dụng các lớp học.
Tuy nhiên, nếu danh sách các đơn đặt hàng là không thay đổi và các yếu tố danh sách là không thay đổi, những
lo lắng không có đi. Khách hàng có thể gọi phương thức getter để đọc các đơn đặt hàng, nhưng họ không thể
thay đổi đơn đặt hàng, vì vậy chúng tôi giữ lại quyền kiểm soát trạng thái của đối tượng.
Điều gì xảy ra khi danh sách các đơn đặt hàng được cho là thay đổi, nhưng nó đã trở thành khổng lồ?
Nên chúng ta trở nên dịu dàng và làm cho nó có thể thay đổi để tránh việc tạo bản sao lớn?
May mắn thay, chúng ta có một cách hiệu quả để sao chép các cấu trúc dữ liệu lớn; chúng tôi sẽ sử dụng lại những phần
đó không thay đổi! Khi chúng tôi thêm một trật tự mới vào danh sách các đơn đặt hàng, chúng tôi có thể sử dụng lại các
phần còn lại của danh sách. Chúng tôi sẽ tìm hiểu làm thế nào trong Chương 3.
Một số đột biến là không thể tránh khỏi. Tất cả các chương trình phải làm IO. Nếu không, họ có thể làm
gì, nhưng nóng lên CPU, như một trò đùa đi. Tuy nhiên, lập trình chức năng khuyến khích chúng ta suy nghĩ chiến lược về khi nào và ở đâu đột biến là cần thiết. Nếu chúng ta
đóng gói các đột biến ở các khu vực được xác định rõ và giữ phần còn lại của mã miễn phí của đột biến, chúng ta cải thiện sự vững mạnh và mô đun mã của chúng tôi.
Chúng tôi vẫn cần phải xử lý đột biến một cách thread-safe. Phần mềm giao dịch Memory
và các diễn viên mô hình cho chúng ta an toàn này. Chúng ta sẽ khám phá cả trong Chương 4.
Hãy đối tượng của bạn không thay đổi. Khai báo các lĩnh vực thức. Chỉ cung cấp thu khí
cho các lĩnh vực và sau đó chỉ khi cần thiết. Hãy cẩn thận rằng thức có thể thay đổi
đối tượng vẫn có thể được sửa đổi. Sử dụng các bộ sưu tập có thể thay đổi một cách cẩn thận. Xem
"Minimize đột biến" trong [Bloch2008] cho thêm lời khuyên.
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: