Executando verificação de segurança...
1

É possível em alguma linguagem, ter um retorno de mais de uma variavél ao mesmo tempo?

Eu estava fazendo um trabalho de POO, usando Java, e me deparei em um momento, que um método de uma clase que eu tinha, calculava a posição de dois vetores ao mesmo tempo. O problema veio no momento que precisei pegar os valores calculados. Como eu estava usando dois Double[], não era possivel retornar os dois ao mesmo tempo, apenas um. Ai tive que dentro do próprio método, declarar o resultado do calculo e armazenar no atributo da classe, fazendo um this.atributo = vetor1, this.atributo2 = vetor2. Isso ja resolvia, mas eu queria que fosse possivel retornar, devido a necessidade de tratar do resultado. Alguem ja passou por algo parecido ou conhece alguma linguagem que consiga retornar mais de um valor ao mesmo tempo, sem a necessidade de retornar um vetor de um vetor?

Carregando publicação patrocinada...
2

Nenhuma linguagem pode sequer ter retorno de uma variável.

Todas as linguagens mais conhecidas podem retornar mais de um valor ao mesmo tempo de alguma forma. Algumas fazem isso de forma muito simples e fornecem algum mecanismo fácil de usar e até bonito, outras só permitem construir com alguma técnica extra.

Na pior das hipóteses pode criar uam classe para isso ou armazenar em um array. Ou seja, pode fazer isso através de um objeto que seja um container de outros objetos. Algumas linguagens como C# possuem uma tupla simples, fácil e eficiente, outras linguagens como Java, não possuem nada pronto assim.

Para seu caso, jogar em um ArrayList<double> parece resolver o que deseja.

Farei algo que muitos pedem para aprender programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

2

A outra resposta esta considerando JavaScript, em Java não da para fazer desse jeito... Se vc quiser, pode fazer dessa forma:

public Object[] getNameAndAge() {
    return new Object[]{this.name, this.age};
}

Ou, voce pode criar uma classe q tenha os valores como atributo, e retornar uma instancia da mesma, por exemplo:

public class UserData {
    public String name;
    public int age;
    
    public UserData(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

...
public UserData getNaneAndAge() {
    return new UserData(this.name, this.age);
}
...

Tem outras coisas possíveis também, so q são mais especificas... no teu caso, da para fazer o do Object[], ou, voce pode colocar os dois vetores em um só... o q talvez seja menos facil:

...
Double[] valor1 = {...};
Double[] valor2 = {...};
Double result = new Double[valor1.length + valor2.length];

for (int i = 0; i < result.length; i++) {
    if (i < valor1.length) {
        result[i] = valor1[i];
    } else {
        result[i] = valor2[valor1.length + i]; //não tenho certeza, mas talvez aqui presise de um "-1) para corrigir o index...
    }
}
1
1
1

Python, Javascript e C# (csharp) você poderia retornar uma tupla.

Exemplo em python:

def func():
    return (1,2,)
    
a, b = func()
print(a, b)

1 2
1

Em python é possível sim.

Se a sua função termina retornando dois dataframes, por exemplo, você consegue capturar com duas variáveis.

Final de função return df1, df2

Execução de código: var1, var2 = funcao()

Espero ter sido claro!!

1

Na verdade vc está retornando uma tupla contendo dois valores. E a atribuição é uma forma de destructuring assignment, que pega os valores da tupla e coloca nas respectivas variáveis.

Então, tecnicamente falando vc continua retornando apenas um valor (a tupla), a sintaxe apenas te dá a impressão de estar retornando vários.

1
1

Sim, cumpre.

É que eu sou muito chato e pedante, e só quis deixar claro que não tem "mágica" ali. O valor retornado sempre é um só (no caso, a tupla). Se essa tupla vai ter dois ou mais valores dentro dela, é detalhe :-)