Czasami musisz napisać konstruktor, który może zawieść. Powiedzmy na przykład, że chcę utworzyć instancję obiektu ze ścieżką do pliku, coś w rodzaju
obj = new Object("/home/user/foo_file")
Dopóki ścieżka wskazuje odpowiedni plik, wszystko jest w porządku. Ale jeśli łańcuch nie jest prawidłową ścieżką, rzeczy powinny się zepsuć. Ale jak?
Mógłbyś:
- rzuć wyjątek
- zwróć obiekt zerowy (jeśli twój język programowania pozwala konstruktorom zwracać wartości)
- zwraca poprawny obiekt, ale z flagą wskazującą, że jego ścieżka nie została ustawiona poprawnie (ugh)
- inni?
Zakładam, że „najlepsze praktyki” różnych języków programowania wdrażałyby to inaczej. Na przykład myślę, że ObjC woli (2). Ale (2) byłoby niemożliwe do zaimplementowania w C ++, gdzie konstruktory muszą mieć void jako typ zwracany. W takim przypadku przyjmuję, że użyto (1).
Czy w wybranym języku programowania możesz pokazać, jak poradzisz sobie z tym problemem i wyjaśnić, dlaczego?
void
- zwracają obiekt.
new
wywołuje operator new
alokację pamięci, a następnie konstruktor, aby ją wypełnić. Konstruktor nic nie zwraca i new
zwraca wskaźnik, który otrzymał operator new
. void
Jednak to, czy „nic nie zwraca” oznacza, że „zwraca ”, jest do zdobycia.