Это просто решение и потому что люди привыкли к нему.В принципе, не было бы ничего, что мешало бы разработчику языка реализовать синтаксис, подобный этому:
(int, int, int) call(int x, int y, int z);
, и вызов функции мог бы выглядеть так:
(a, b, c) = call(1, 2, 3);
или любой другой синтаксисвыбрал бы для этой задачи.Хотя можно было бы обсудить, увеличит ли это удобочитаемость.И как уже указывали другие, некоторые языки реализуют это с помощью кортежей или подобных конструкций.
Конечно, оператор return:
(int, int, int) call(int x, int y, int z);
{
return x+1, y+1, z+1
}
Вы можете даже подумать о таких полезных приложениях, как:
(err, filehandle) = OpenFileDialog(...)
где функция может возвращать либо подробный код ошибки, либо действительный дескриптор файла.Хотя исключения занимают это место в наши дни.Но исключения в некотором смысле являются способом возврата как минимум двух чередующихся значений: либо запрашиваемого возвращаемого значения функции, либо возбужденного исключения.