Às vezes você precisa escrever um construtor que possa falhar. Por exemplo, digamos que eu queira instanciar um objeto com um caminho de arquivo, algo como
obj = new Object("/home/user/foo_file")
Desde que o caminho aponte para um arquivo apropriado, tudo ficará bem. Mas se a string não for um caminho válido, as coisas devem quebrar. Mas como?
Você poderia:
- lançar uma exceção
- retornar objeto nulo (se sua linguagem de programação permitir que os construtores retornem valores)
- retorna um objeto válido, mas com uma bandeira indicando que seu caminho não foi definido corretamente (ugh)
- outras?
Suponho que as "melhores práticas" de várias linguagens de programação implementariam isso de maneira diferente. Por exemplo, acho que o ObjC prefere (2). Mas (2) seria impossível implementar em C ++ onde os construtores devem ter nulo como um tipo de retorno. Nesse caso, considero que (1) é usado.
Na sua linguagem de programação de escolha, você pode mostrar como lidaria com esse problema e explicar por quê?
void
- eles retornam um objeto.
new
chamadas operator new
para alocar a memória e, em seguida, o construtor para preenchê-la. O construtor não retorna nada e new
retorna o ponteiro que obteve operator new
. Se "não retorna nada" implica "retornos void
", está em jogo.