Điều ngược lại với khởi tạo (hoặc init) là gì? [đóng cửa]


94

Thuật ngữ này sẽ được sử dụng làm tên phương thức. Phương thức này được gọi khi một phần của giao diện người dùng bị ẩn (hoặc bị xóa) và được sử dụng để đặt lại các giá trị về mặc định và loại bỏ các đối tượng sẽ không được sử dụng nữa.

Tên có thể là: phát hành, loại bỏ, loại bỏ, xóa vv

Mà bạn nghĩ là thích hợp nhất?


1
Phá hủy? (cần thêm thư)
Deiwin

31
Không thể thấy điều này không mang tính xây dựng, việc quét nhanh các câu trả lời dưới đây cho thấy nhiều nhà phát triển không hoàn toàn nhận được từ trái nghĩa. Tên phương thức IMO rất quan trọng và "khởi tạo" không có từ trái nghĩa rõ ràng, tuy nhiên là một thuật ngữ phổ biến và hữu ích.
Earcam

2
Đáng buồn là tôi không thể thêm câu trả lời nữa vì câu hỏi đã bị đóng (Như Earcam đã nói: Làm thế nào điều này không mang tính xây dựng?), Vì vậy tôi sẽ thêm câu trả lời của mình vào đây. Hình thức ngắn gọn, thân thiện với nhận xét là đây: InitializeChỉ sử dụng nếu bạn không cần một từ trái nghĩa! Trong trường hợp bạn cần một động từ chọn một động từ khác (hầu hết thời gian có một sự thay thế mô tả nhiều hơn). Để tham khảo thêm, tôi đang cung cấp danh sách từ trái nghĩa của mình cho các lập trình viên tại GitHub.
Max Truxa

3
Tôi tìm thấy câu trả lời cho điều này rất hữu ích khi tôi có cùng một câu hỏi. Nó không nên bị đóng cửa.
Ian Goldby

3
Tôi đồng ý ... đóng câu hỏi này không hữu ích chút nào.
harald

Câu trả lời:


80

Tôi sử dụng :

  • khởi tạo ()
  • chấm dứt ()

Tôi thấy nó phù hợp hơn:

  • Thật khó để không nhìn thấy nó trong mã, bởi vì đó là cả hai từ dài (tôi không sử dụng init)
  • đó là tiếng anh chính xác (AFAIK)
  • trong đầu tôi, chấm dứt tránh sự mơ hồ. Nó không khớp bắt đầu (khớp với kết thúc), bắt đầu (khớp với dừng), tạo (khớp khớp với hủy), thiết lập (khớp với unset), tải (khớp với unload), v.v.

Một số người có thể tìm thấy nó một câu hỏi về hương vị mặc dù.


6
+1 cho terminate(). Tôi cảm thấy nó thường không rõ ràng và có thể áp dụng hợp lý trong các trường hợp sử dụng.
Ben Hocking

9
Tôi hoàn toàn đồng ý với việc "chấm dứt" tất cả các đề xuất khác là dành cho các từ có từ trái nghĩa chính xác, nổi tiếng; phá hủy (tạo), tornDown (setUp), đóng (mở), phát hành (thu nhận), v.v ... Thật ngạc nhiên khi có nhiều nhà phát triển không thấy điều này.
Earcam

Nói xấu. Đó là những gì tôi làm với đồ vật khi tôi hoàn thành chúng. (Nhưng Chấm dứt sẽ là lựa chọn thứ hai của tôi.)
Nicki

3
@Nicki Có vẻ tốn kém khi phải cài đặt lại các cửa sổ ở mỗi lần phá hủy đối tượng ...
Klaim

Như Earcam đã chỉ ra: Đó là set up(khớp với tear down) không setup(không có động từ như vậy trong ngôn ngữ tiếng Anh).
Max Truxa

25

Tôi thường đi với Hoàn thiện, Tiêu diệt hoặc Chấm dứt tùy thuộc vào chức năng của các đối tượng.

Đối với trường hợp bạn mô tả, Hoàn thiện là những gì tôi sẽ đi với dựa trên sơ đồ của tôi.


Thật không may, 'Hoàn thiện' có thể là từ đồng nghĩa hoặc từ trái nghĩa của 'Khởi tạo', vì vậy tôi nghĩ rằng đó sẽ là một lựa chọn kém nói chung. 'Phá hủy' và 'Chấm dứt' là những ứng cử viên, tuy nhiên. Xem mw.com/dipedia/finalize để biết định nghĩa "để đặt ở dạng cuối cùng hoặc hoàn thành". Tôi thậm chí đã thấy nó được sử dụng theo cách này trong mã. Tức là, hoàn thiện một đối tượng là bước cuối cùng trong quá trình khởi tạo. Ngược lại, lớp Object của Java có một finalize()phương thức chỉ ra không có nhiều tham chiếu đến đối tượng.
Ben Hocking

@BenHocking Tôi nghĩ rằng bạn đang sử dụng "để ở dạng cuối cùng hoặc kết thúc" sai cách. Đối với tôi, điều này có nghĩa là bạn đã hoàn thành với đối tượng và đã đến lúc dọn dẹp / thiết lập lại tất cả các thuộc tính. Đây là những gì OP đang nói anh ấy muốn làm. Vì vậy, tôi nghĩ rằng định nghĩa đó chứng minh trường hợp của tôi.
Brian Dishaw

Ngoài ra, bất kỳ thông tin phản hồi về lý do tại sao các downvote? (Tôi cho rằng đó không phải là @BenHocking vì anh ta không cho biết mình là người
hạ bệ

a) Bạn nói đúng rằng tôi đã không bỏ phiếu. Đề nghị của bạn là hợp lý và tôi nghĩ rằng cuộc thảo luận này là hữu ích. b) Tôi đã thấy quyết toán () được sử dụng theo đúng nghĩa mà tôi đã chỉ ra. Ví dụ, trong một lớp tính toán tam giác Delauney, sau khi tất cả các điểm được thêm vào, quyết toán () được gọi để thực hiện một số phép tính bổ sung trước khi có thể sử dụng kết quả từ nó. Trong trường hợp đó, nó chỉ ra rằng đối tượng không còn mở để sửa đổi, nhưng nó vẫn có sẵn để sử dụng, tức là, để có được kết quả của quá trình tam giác hóa.
Ben Hocking

14

Tôi thích releasemột phương pháp xử lý các đối tượng và các tài nguyên khác (ví dụ như chuẩn bị cho sự hủy diệt). Tôi sẽ chọn resetmột phương thức đặt lại các giá trị về mặc định.

Nếu trạng thái "mặc định" không yêu cầu bất kỳ tài nguyên nào, thì resetcó thể gọi releaseđể thực hiện phần hoạt động đó.


6

close()

Không ai đã đề xuất đóng () chưa. Java 7 có một tính năng "thử với tài nguyên" mới. Một lớp được dọn sạch tự động phải thực hiện java.lang.AutoClosizable có một phương thức close (). shutdown () hoặc dọn dẹp () cũng có thể tốt.

không phải finalize()

Finalize () có nghĩa là một cái gì đó cụ thể cho trình thu gom rác trong Java và cách nó hoạt động hơi lạ. Tôi sẽ tránh xa việc hoàn thành () trừ khi bạn muốn chính xác những gì Java làm với việc hoàn thành ().


2
Bạn đưa ra quan điểm hợp lệ về việc hoàn thiện () trong Java ... nhưng OP không chỉ ra bất cứ nơi nào tôi thấy rằng câu hỏi đang xử lý cụ thể với Java và không phải bất kỳ ngôn ngữ OO nào khác có "tên phương thức" (ví dụ: C ++).
EliSko

Trong C #, Finalizeđược sử dụng để hủy các thể hiện của các lớp.
Olivier Jacot-Descombes

4

Tôi khá thích 'phá hủy'. Không thể rõ ràng hơn trừ khi bạn đang viết một trò chơi video hoặc một cái gì đó.


4
Theo suy nghĩ của tôi, "phá hủy" được ghép nối với "tạo".
EliSko

4

Tôi muốn nói rằng nó phụ thuộc vào việc hành động là tùy chọn hay bắt buộc (không rò rỉ tài nguyên) và nếu ngôn ngữ hỗ trợ các hàm tạo / hàm hủy. Đối với các trường hợp tùy chọn tôi sử dụng:

  • thông thoáng
  • cài lại
  • ẩn (trong ngữ cảnh UI)

Trong các trường hợp khác khi hành động ngược lại được yêu cầu (trong các ngôn ngữ không có hàm tạo / hàm hủy hoặc khi hàm hủy không giải phóng tài nguyên), tôi sử dụng:

  • init - fini
  • khởi tạo - khử
  • tạo - phá hủy

Trong trường hợp của bạn, tôi nghĩ rằng tôi sẽ thích hide. Nó vẫn có thể giải phóng bộ nhớ / tài nguyên nếu nó muốn - điều quan trọng là nó là tùy chọn, tức là bộ hủy sẽ chăm sóc nó nếu bạn không.


3

Suy nghĩ đầu tiên của tôi đã bị phá bỏ, nhưng nó được sử dụng trong nhiều khung thử nghiệm. Hoàn thiện và xử lý có vấn đề tương tự. Đặt lại, hoặc dọn dẹp cả hai dường như là lựa chọn tốt. Reinitialize làm cho nó rõ ràng trở lại trạng thái khởi tạo, sẽ tốt nếu trạng thái bạn quay lại là trạng thái ban đầu.

Chỉ cần đảm bảo thuật ngữ của bạn không bị quá tải trong bối cảnh hiện tại của bạn.


Tôi không thấy đây là một vấn đề như thế nào. Cấp, FinalizeDisposeđược ra trong mã .NET. Ngoài ra, tôi không thấy vấn đề gì với việc sử dụng lại tên đã được thiết lập.
Konrad Rudolph

1
@KonradRudolph Sử dụng lại tên đã sử dụng là ổn, NẾU các khái niệm này rất phù hợp. Không có thuật ngữ nào tôi liệt kê phù hợp với những gì tôi hiểu anh ấy sẽ mô tả. Vì vậy, sẽ khó hiểu hơn vì bạn sẽ thấy thuật ngữ này nghĩ rằng, tôi biết điều đó làm gì và đã sai.

3

và nó được sử dụng để đặt lại các giá trị về mặc định và loại bỏ các đối tượng sẽ không được sử dụng nữa.

resetcó vẻ như là một thuật ngữ tốt nếu bạn đặt lại đối tượng về mặc định. reinitializecũng có thể phù hợp nếu việc sử dụng đối tượng này tương tự như những gì initialize. Có vẻ như phương pháp này sẽ loại bỏ các đối tượng khác , không phải đối tượng nhận được tin nhắn, trong trường hợp một trong những điều trên sẽ ổn. Nếu bạn thực sự làm ngược lại initvà chuẩn bị người nhận bị phá hủy, disposesẽ là một lựa chọn tốt.


1

http://www.wordhippo.com/what-is/the-opposeite-of/initialize.html

Tôi sẽ đi với quyết toán. Tuy nhiên tôi nghĩ rằng nó phụ thuộc một chút vào trường hợp sử dụng chính xác: ví dụ: Nếu bạn sử dụng nó chủ yếu để giải phóng tài nguyên, đóng các kết nối, các tệp thì phát hành sẽ có ý nghĩa hơn.

Nếu bạn đang tìm kiếm một khái niệm để sử dụng chung, hoặc tiêu chuẩn hóa, tôi sẽ chọn một số ít ý nghĩa hơn, một cái gì đó không có ý nghĩa đặc biệt như phát hành, hoặc loại bỏ.

Khái niệm init vs (anything) tương tự như (constructor vs killer) hoặc trong java hoàn thiện.

( Lưu ý : Nếu ngôn ngữ có khái niệm xây dựng và phá hủy các đối tượng, thì ít hoặc không cần sử dụng init ().)


FYI: finalizeđược bảo lưu trong Java.
Basil Bourque

0

Nếu đối tượng mà phương thức đang được gọi sẽ ngừng sử dụng, tôi sẽ chỉ sử dụng hàm hủy tiêu chuẩn. Tuy nhiên, điều đó không giống như trường hợp, vì vậy, thay vì quá chung chung, một cái tên tốt hơn có lẽ là một cái gì đó giống như hide()nếu chính đối tượng đang bị ẩn hoặc hideUserInterfacePart()nếu các đối tượng sáng tác đang bị ẩn.

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.