Valor de retorno

Um método pode retornar dados ao código chamador, e o valor retornado substituirá diretamente a posição da expressão de chamada.

Se precisar retornar dados, é necessário declarar um tipo de retorno antes do nome do método. Quando não houver valor retornado, marque como void.

É possível usar return mesmo sem valor de retorno, mas não escreva return seguido de um valor. Apenas utilize return;. Ele encerra a execução, todo código posterior não será executado e o fluxo volta para o ponto da chamada.

    int Add(int a, int b)  // Retorna valor do tipo int
    {
        return a + b;
    }Code language: JavaScript (javascript)
    void SayHi() // Sem valor de retorno
    {
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: JavaScript (javascript)

1. Métodos com retorno devem obrigatoriamente usar return expressão;. O tipo do resultado da expressão tem que coincidir com o tipo de retorno declarado;

    int Add(int a, int b)
    {
        return 1.2;  // Erro. 1.2 é do tipo double e não pode ser convertido implicitamente para int, a incompatibilidade de tipos causa o erro
    }Code language: JavaScript (javascript)

O código acima tenta retornar um valor double. O literal 1.2 é por padrão double, ou seja, número de ponto flutuante, que você pode entender como número decimal. O compilador não consegue converter um decimal para inteiro automaticamente, por isso ocorre o erro.

Agora veja o caso inverso

    double Add2()
    {
        return 10;  // 10 é do tipo int e pode ser convertido implicitamente para double, tipos compatíveis sem erros
    }Code language: JavaScript (javascript)

Essa forma não apresenta erros. Embora 10 seja um número inteiro, aceita conversão implícita para double, logo os tipos são compatíveis. Não compare apenas os nomes dos tipos, verifique se há suporte à conversão implícita.

Chamamos de conversão implícita quando não é preciso escrever código para conversão manual; o compilador faz esse trabalho por si só. Em contrapartida, as conversões definidas manualmente pelo programador são chamadas de conversões explícitas.

Vamos estudar mais sobre conversão de tipos posteriormente.

2. Todos os caminhos de execução dentro de um método precisam chegar a uma instrução return. Não pode haver ramificações que finalizem sem retornar um valor.

O método acima está declarado para retornar int (o int antes do nome Add). Mas se não houver nenhum return no corpo do método, também ocorrerá erro.

Essa implementação também causa erro. A instrução return só executa se a condição do if for verdadeira. Nos casos onde a >= b, o return não será executado, existindo uma ramificação sem retorno.

Mesmo adicionando um bloco else, se ele não tiver return, o problema persiste: ainda existem caminhos sem retorno. Essa regra vale para todas as estruturas de fluxo. Garanta que todas as ramificações do programa estejam tratadas corretamente.

Existe uma solução para contornar isso. Adicione um return no final do método como valor de fallback. Veja o exemplo:

    int Add(int a, int b)
    {
        if (a < b)
        {
            return a + b;
        }
        else
        {

        }
        return -1; // Independente das ramificações anteriores, o código retorna um valor ao chegar aqui
        // O valor -1 funciona como fallback.
    }Code language: C# (cs)

Os valores retornados aceitam tipos básicos (int, string etc.), classes personalizadas, coleções e todos os outros tipos de dados;

A palavra reservada return encerra imediatamente o método atual, nenhum código seguinte será executado;

Chamadas de métodos com retorno podem ser inseridas diretamente em expressões, comandos de impressão, atribuições e outros cenários.

Valor de retorno

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *