Информация об изменениях

Сообщение Re: return1, return2 от 22.01.2024 17:33

Изменено 22.01.2024 17:37 F3V

Re: return1, return2
Здравствуйте, Hоmunculus, Вы писали:

H>Исторически сложилось, что функция возвращает одно значение. В return.

H>..
H>То есть если рассматривать функцию как черный ящик, то выход у этого ящика всегда один.

H>Почему не придумали типа такого?


Непонятно: тебе все три возврата одновременно нужны или каждый раз свой возврат при разных вызовах?

Если одновременно, то картеж напрашивается (уже подсказали выше).

Если не одновременно, то нужна диспетчеризация:

  Javascript
(()=>{
let MyFunc = (i) => {
    if (typeof i === 'number') {
        let res1 = 5;
        return res1;
    } else if (typeof i === 'string') {
        let res2 = 'ssssss';
        return res2;
    } else if (Array.isArray(i)) {
        let res3 = [1, 2, 3, 4, 5];
        return res3;
    } else {
        throw new Error(`Неправильный тип параметра запроса: ${typeof i}`);
    }
}

console.log(MyFunc(''));
console.log(MyFunc(1) + 6);
console.log(MyFunc([]));
})();
  C++17
#include <iostream>

template<typename T> T MyFunc(T a = T{})
{
    if constexpr (std::is_same<T, int>::value)
    {
        int res1 = 5;
        return res1;
    }
    if constexpr (std::is_same<T, std::string>::value)
    {
        std::string res2 = "ssssss";
        return res2;
    }
    if constexpr (std::is_same<T, int*>::value)
    {
        int* res3 = (int*)malloc(10);
        return res3;
    }
    throw std::exception("Not supported.");
}

int main()
{
    std::cout << "Hello MyFunc!\n";

    std::cout << (MyFunc(std::string())) << std::endl;

    std::cout << MyFunc(1) + 6 << std::endl;

    std::cout << MyFunc<int*>() << std::endl;
}
Re: return1, return2
Здравствуйте, Hоmunculus, Вы писали:

H>Исторически сложилось, что функция возвращает одно значение. В return.

H>..
H>То есть если рассматривать функцию как черный ящик, то выход у этого ящика всегда один.

H>Почему не придумали типа такого?


Непонятно: тебе все три возврата одновременно нужны или каждый раз свой возврат при разных вызовах?

Если одновременно, то кортеж напрашивается (уже подсказали выше).

Если не одновременно, то нужна диспетчеризация:

  Javascript
(()=>{
let MyFunc = (i) => {
    if (typeof i === 'number') {
        let res1 = 5;
        return res1;
    } else if (typeof i === 'string') {
        let res2 = 'ssssss';
        return res2;
    } else if (Array.isArray(i)) {
        let res3 = [1, 2, 3, 4, 5];
        return res3;
    } else {
        throw new Error(`Неправильный тип параметра запроса: ${typeof i}`);
    }
}

console.log(MyFunc(''));
console.log(MyFunc(1) + 6);
console.log(MyFunc([]));
})();
  C++17
#include <iostream>

template<typename T> T MyFunc(T a = T{})
{
    if constexpr (std::is_same<T, int>::value)
    {
        int res1 = 5;
        return res1;
    }
    if constexpr (std::is_same<T, std::string>::value)
    {
        std::string res2 = "ssssss";
        return res2;
    }
    if constexpr (std::is_same<T, int*>::value)
    {
        int* res3 = (int*)malloc(10);
        return res3;
    }
    throw std::exception("Not supported.");
}

int main()
{
    std::cout << "Hello MyFunc!\n";

    std::cout << (MyFunc(std::string())) << std::endl;

    std::cout << MyFunc(1) + 6 << std::endl;

    std::cout << MyFunc<int*>() << std::endl;
}