Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Dúvida sobre o return

Olá,

    function depositar(float $valor): float
    {
        if ($valor <= 0) {
            echo "O valor a depositar tem de ser superior a zero" . PHP_EOL;
            return 0;
        }

        $this->saldo += $valor;
        return $this->saldo;
    }

No meu caso eu estou a fazer um return do saldo corrente no final, e caso eu não faça um "return;" em vez de um "return 0;" na linha 5 dá um fatal error. A forma correcta é esta, ou seja, neste caso fazer um return 0;? Obrigado

5 respostas

Olá Andre,

O erro deve estar acontecendo porque você indicou na função que vai ser retornado um número do tipo float, perceba o : float no final de function depositar(float $valor): float

Se você não quiser retornar nada pode simplesmente remover o : float ou trocar o : float por : void pois o void serve para indicar que não vai existir nenhum retorno.

Fala, André. Se seu método retorna um número (float), adicionar apenas um return; nele vai gerar um erro porque você está quebrando a assinatura. O retorno do método tem que cumprir a assinatura do método. :-D

Certo, mas em determinada altura da aula disse que era boa prática especificar sempre o retorno dos métodos. No meu caso eu tenho uma condição em que se for XX retorna um float e se for YY eu quero apenas fazer um return para sair do método. A minha dúvida é se neste caso é preferível manter o return float no método e depois fazer um return 0; quando da a condição YY ou como alternativa não especifico qual o return do método e ai já não terei problema em fazer apenas return; na condição YY?

A nível de boas práticas qual é a melhor?

André, não faz sentido você só retornar algo em determinados casos. Isso seria uma péssima prática.

Pro cenário exemplificado, onde você tenta depositar um valor negativo, você vai aprender a tratar no curso de exceptions, visto que esse seria um caso excepcional na linha de execução do programa.

;-)

Mas, voltando ao exemplo, também não faz sentido, semanticamente falando, o método deposita retornar o saldo. Dessa forma esse método faz mais de uma coisa na prática, né!? ;-)

"Mas, voltando ao exemplo, também não faz sentido, semanticamente falando, o método deposita retornar o saldo. Dessa forma esse método faz mais de uma coisa na prática, né!?"

Geralmente quando faz um saque ou depósito, no final é informado o saldo ao cliente. Parece-me lógico que o método retorne logo o saldo e possa usa-lo na variável que chamar o método, pois isso irá evitar mais uma instrução de obterSaldo().