Здравствуйте, 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;
}
|
| | |