Czym jest przeciwieństwo inicjalizacji (lub init)? [Zamknięte]


93

Termin zostanie użyty jako nazwa metody. Metoda jest wywoływana, gdy część interfejsu użytkownika jest ukryta (lub usunięta) i służy do resetowania wartości do wartości domyślnych i usuwania obiektów, które nie będą już używane.

Możliwe nazwy to: zwolnij, usuń, wyrzuć, wyczyść itp.

Który według Ciebie jest najbardziej odpowiedni?


1
Zniszczyć? (potrzeba więcej liter)
Deiwin

30
Nie widzę, jak to nie jest konstruktywne, szybki skan poniższych odpowiedzi pokazuje, że wielu programistów nie do końca otrzymuje antonimy. Nazwy metod IMO są bardzo ważne i „inicjalizacja” nie ma wyraźnego antonimu, ale jest powszechnym i użytecznym terminem.
kamera douszna

2
Niestety nie mogę już dodać odpowiedzi, odkąd pytanie zostało zamknięte (jak powiedziała kamera: Jak to nie jest konstruktywne?), Więc dodam tutaj swoją odpowiedź. Krótki, przyjazny dla komentarzy formularz jest następujący: używaj Initializetylko wtedy, gdy nie potrzebujesz antonimu! W razie potrzeby wybierz inny czasownik (przez większość czasu istnieje bardziej opisowa alternatywa). W celu uzyskania dalszych informacji podaję listę antonimów dla programistów w GitHub.
Max Truxa

3
Znalazłem odpowiedzi na to bardzo pomocne, gdy miałem dokładnie to samo pytanie. Nie powinno być zamknięte.
Ian Goldby

3
Zgadzam się ... zamknięcie tego pytania nie jest wcale pomocne.
harald

Odpowiedzi:


79

Używam :

  • initialize ()
  • zakończyć()

Uważam to za bardziej odpowiednie:

  • trudno nie zobaczyć tego w kodzie, ponieważ są to oba długie słowa (nie używam init)
  • to jest poprawny angielski (AFAIK)
  • w mojej głowie termin unika niejednoznaczności. Nie pasuje do początku (który pasuje do końca), startu (który pasuje do stopu), tworzenia (który pasuje do zniszczenia), konfiguracji (który pasuje do rozłączenia), ładowania (który pasuje do rozładowania) itp.

Niektórzy ludzie mogą jednak uznać to za kwestię gustu.


6
+1 dla terminate(). Uważam, że jest to na ogół jednoznaczne i prawdopodobnie ma uzasadnione zastosowanie we wszystkich przypadkach użycia.
Ben Hocking

9
Zgadzam się z „zakończeniem”, wszystkie inne sugestie dotyczą słów z dokładnymi, dobrze znanymi antonimami; zniszcz (utwórz), tearDown (setUp), zamknij (otwórz), zwolnij (zdobądź) itp. Zaskakujące, ilu programistów tego nie widzi.
kamera douszna

Defenestrate. Tak właśnie robię z przedmiotami, kiedy skończę z nimi. (Ale Terminate będzie moim drugim wyborem.)
Nicki,

3
@Nicki Wygląda na kosztowne, aby ponownie zainstalować okna przy zniszczeniu każdego obiektu ...
Klaim

Jak zauważyła kamera nauszna : nie jest set up(który pasuje tear down) setup(nie ma takiego czasownika w języku angielskim).
Max Truxa

25

Zazwyczaj wybieram opcję Finalizuj, Zniszcz lub Zakończ w zależności od funkcji obiektów.

W przypadku opisanego przez ciebie przypadku, dokończę na podstawie mojego schematu.


Niestety „Finalizacja” może być synonimem lub antonimem „Inicjalizacji”, więc myślę, że byłby to ogólnie zły wybór. Jednak „Destroy” i „Terminate” są rywalami. Zobacz definicję mw.com/dictionary/finalize z informacją „wprowadzić ostateczną lub gotową formę”. Widziałem nawet, że używa się go w ten sposób w kodzie. To znaczy, sfinalizowanie obiektu jest ostatnim krokiem jego inicjalizacji. Natomiast klasa Object w Javie ma finalize()metodę wskazującą, że nie będzie już żadnych odwołań do obiektu.
Ben Hocking

@BenHocking Myślę, że niewłaściwie podchodzisz do „wprowadzenia ostatecznej lub ukończonej formy”. Dla mnie oznacza to, że skończyłeś z obiektem i nadszedł czas, aby wyczyścić / zresetować wszystkie właściwości. Właśnie to mówi OP, że chce to zrobić. Myślę więc, że ta definicja potwierdza mój przypadek.
Brian Dishaw

Również wszelkie opinie na temat, dlaczego głosowanie? (Zakładam, że to nie był @BenHocking, ponieważ nie wskazał, że jest downvoter)
Brian Dishaw

a) Masz rację, że nie oddałem głosu. Twoja sugestia jest rozsądna i myślę, że ta dyskusja jest przydatna. b) Widziałem finalizację () używaną w dokładnie takim znaczeniu, jaki wskazałem. Na przykład w klasie obliczającej trójkątowanie Delauneya, po dodaniu wszystkich punktów, wywołano funkcję finalize (), aby wykonać dodatkowe obliczenia, zanim można będzie z nich wykorzystać wyniki. W takim przypadku oznaczało to, że obiekt nie był już otwarty do modyfikacji, ale nadal był dostępny do użycia, tj. Do uzyskania wyników trójkątowania.
Ben Hocking

14

Lubię releasemetodę, która usuwa przedmioty i inne zasoby (np. Jako przygotowanie do zniszczenia). Wybrałbym resetmetodę, która resetuje wartości do wartości domyślnych.

Jeśli stan „domyślny” nie wymaga żadnych zasobów, resetmoże być w stanie wywołać releasetę część operacji.


6

close()

Nikt jeszcze nie zaproponował close (). Java 7 ma nową funkcję „spróbuj z zasobami”. Klasa, która jest automatycznie czyszczona, musi zaimplementować java.lang.AutoCloseable, która ma jedną metodę close (). shutdown () lub cleanup () również mogą być dobre.

Nie finalize()

finalize () oznacza coś specyficznego dla śmietnika w Javie, a sposób jego działania jest trochę dziwny. Trzymałbym się z dala od finalize (), chyba że chcesz dokładnie tego, co Java robi z finalize ().


2
Podajesz słuszną uwagę na temat finalizowania () w Javie ... ale OP nigdzie nie wskazał, że widziałem, że pytanie dotyczy konkretnie Java, a nie żadnego innego języka OO z „nazwami metod” (np. C ++).
EliSko,

W języku C # Finalizesłuży do niszczenia instancji klas.
Olivier Jacot-Descombes

4

Bardzo lubię „niszczyć”. Nie może być jaśniejsze, chyba że piszesz grę wideo lub coś takiego.


4
Moim zdaniem „zniszczyć” jest połączone z „stworzyć”.
EliSko,

4

Powiedziałbym, że zależy to od tego, czy akcja jest opcjonalna, czy wymagana (bez przecieków zasobów) i czy język obsługuje konstruktory / destruktory. Do opcjonalnych przypadków używam:

  • jasny
  • Resetowanie
  • ukryj (w kontekście interfejsu użytkownika)

W innych przypadkach, gdy wymagane jest działanie odwrotne (w językach bez konstruktorów / destruktorów lub gdy destruktor nie zwalnia zasobu), używam:

  • init - fini
  • initialize - deinitialize
  • stwórz - zniszcz

W twoim przypadku myślę, że wolałbym hide. Może nadal zwalniać pamięć / zasoby, jeśli chce - ważne jest to, że jest opcjonalny, tzn. Że destruktor zajmie się nim, jeśli tego nie zrobisz.


3

Moja pierwsza myśl została zburzona, ale jest to wykorzystywane w wielu środowiskach testowych. Finalizacja i usuwanie mają podobne problemy. Zresetuj lub wyczyść oba wydają się być dobrym wyborem. Reinitialize wyjaśnia, że ​​wraca do stanu zainicjowanego, co byłoby dobre, gdyby stan, do którego wracasz, to stan początkowy.

Tylko upewnij się, że Twój termin nie jest przeciążony w obecnym kontekście.


Nie rozumiem, jak sam w sobie jest to problem. Przyznane Finalizei Disposesą w kodzie .NET. Poza tym nie widzę problemu z ponownym użyciem ustalonych nazw.
Konrad Rudolph

1
@KonradRudolph Ponowne użycie ustalonej nazwy jest w porządku, JEŻELI koncepcje są bardzo dobrze dopasowane. Żadne z wymienionych przeze mnie terminów nie zgadza się tak dobrze z tym, co rozumiem jako opisujący. Byłoby to bardziej mylące, ponieważ zobaczysz termin „pomyśl, wiem, co to robi”, i mylę się.
Podpisz

3

i służy do resetowania wartości do wartości domyślnych i usuwania obiektów, które nie będą już używane.

resetwydaje się dobrym terminem, jeśli resetujesz obiekt do wartości domyślnych. reinitializemoże być również odpowiednie, jeśli użycie tego obiektu jest podobne do tego, co initializerobi. Wygląda na to, że ta metoda usunie inne obiekty, a nie ten, który odbiera wiadomość, w którym to przypadku jedno z powyższych powinno być w porządku. Jeśli naprawdę robisz coś przeciwnego initi przygotowujesz odbiornik do zniszczenia, disposebyłby to dobry wybór.


1

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

Pójdę z finalizacją. Myślę jednak, że jest to trochę zależne od dokładnego przypadku użycia: np. Jeśli używasz go głównie do zwalniania zasobów, zamykania połączeń, plików, wtedy wydawanie byłoby bardziej znaczące.

Jeśli szukasz pojęcia do użytku ogólnego lub standaryzacji, wybrałbym coś mniej znaczącego, coś bez specjalnego znaczenia, np. Wydanie lub usunięcie.

Pojęcie init vs (cokolwiek) jest podobne do (konstruktor vs destruktor) lub w finalizacji java.

( Uwaga : jeśli język ma koncepcję konstruowania i niszczenia obiektów, to jego lub wcale nie trzeba używać init ().)


FYI: finalizejest zarezerwowany w Javie.
Basil Bourque

0

Jeśli obiekt, na który wywoływana jest metoda, przestanie być używany, użyłbym tylko standardowego destruktora. Nie wygląda to jednak na przypadek, dlatego lepszym nazwiskiem, zamiast zbyt ogólnym, jest prawdopodobnie coś w rodzaju hide()ukrywania samego obiektu lub ukrywania hideUserInterfacePart()złożonych obiektów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.