функция возвращает результат вычисления, статус возвращается через out
параметр (не все языки поддерживают параметры, и это кажется
неверно, так как в общем случае вы не ожидаете изменения параметров).
Если язык поддерживает несколько выходных значений, то язык явно создан для их поддержки. Было бы стыдно не использовать их (если только в этом конкретном сообществе нет сильных мнений против них - это может быть в случае языков, которые пытаются и делают все)
функция возвращает объект / пару, состоящую из обоих значений (недостатком является то, что
Вы должны создать искусственный класс только для того, чтобы вернуть результат функции или
используйте пару, которая не имеет смыслового значения - вы знаете, какой аргумент
что по порядку).
Я не знаю об этом недостатке. Мне кажется, что запись или класс с именем «MyMethodResult» должны иметь достаточно семантики. Вы также всегда можете использовать такой класс в исключении: , если , конечно, вы находитесь в исключительном состоянии. По моему мнению, создание какого-либо массива / объединения / пары было бы менее приемлемым: вы неизбежно потеряли бы где-нибудь информацию.
если ваш статус просто успех / неудача, вы можете вернуть вычисление
значение, а в случае ошибки выведите исключение (выглядят как лучшие
подход, но работает только со сценарием успеха / неудачи и не должен
злоупотреблять для контроля нормального выполнения программы).
Нет! Это худший подход. Исключения должны использоваться именно для этого, исключительные обстоятельства. Если нет, то они остановят отладчики, поставят коллег по пятам, нанесут ущерб производительности, заполнят вашу систему регистрации и запустят ваши юнит-тесты. Если вы создаете метод для проверки чего-либо, тогда тест должен возвращать состояние, а не исключение: для реализации возвращение отрицательного значения не исключительное.
Конечно, если во время синтаксического анализа у вас заканчиваются байты из файла, обязательно выведите исключение, но не выбрасывайте его, если ввод неправильный и ваш метод называется checkFile.
функция возвращает значение, аргументы функции являются делегатами
Процедуры onSuccess / onFailure.
Я бы использовал их, если у вас есть несколько результатов для обмена. Это более сложный подход, чем класс / запись, и его сложнее поддерживать. Я использовал этот подход для возврата нескольких результатов, пока я не знаю, игнорируются ли результаты или нет, или пользователь хочет продолжить. В Java вы бы использовали слушателя. Этот вид операции, вероятно, более приемлем для фунциональных языков.
существует класс метода (с полным состоянием), который имеет поле состояния, и
метод, возвращающий результаты вычислений (я предпочитаю иметь
объекты без состояния / неизменяемые).
Да, я предпочитаю это. Есть производители результатов и сами результаты. Нет необходимости объединять их и создавать объект с состоянием.
В конце концов, вы хотите перейти к02.produceFrom (x): Результат, на мой взгляд. Это вариант 1 или 2а, если я считаю правильно. И да, для 2а это означает написание дополнительного кода.