Я підозрюю, що не збираюся розбиратися в цьому питанні, але я дуже досвідчений програміст, і сподіваюся, що хтось із більш відкритих читачів зверне увагу.
Я вважаю, що це відповідає об'єктно-орієнтованим мовам програмування, щоб їх процедури повернення цінностей (VRP) були детермінованими та чистими.
'VRP' - сучасна академічна назва для функції, яка називається частиною виразу, і має зворотне значення, яке умовно замінює виклик під час оцінки виразу. Наприклад, в операторі, такому як x = 1 + f(y)
функція, f
виконується функція VRP.
"Детермінований" означає, що результат функції залежить лише від значень його параметрів. Якщо ви знову зателефонуєте з тими ж значеннями параметрів, ви впевнені, що отримаєте той самий результат.
"Чистий" означає відсутність побічних ефектів: виклик функції не робить нічого, крім обчислення результату. Це може бути витлумачено на увазі відсутністю важливих побічних ефектів на практиці, тому якщо VRP видає повідомлення про налагодження кожного разу, коли воно викликається, наприклад, це, ймовірно, може бути проігноровано.
Таким чином, якщо у C # ваша функція не є детермінованою та чистою, я кажу, що ви повинні зробити її void
функцією (іншими словами, не VRP), і будь-яке значення, яке потрібно повернути, повинно бути повернене або в, out
або в ref
параметрі.
Наприклад, якщо у вас є функція видалити деякі рядки з таблиці бази даних, і ви хочете, щоб вона повернула кількість рядків, які вона видалила, слід оголосити це приблизно так:
public void DeleteBasketItems(BasketItemCategory category, out int count);
Якщо ви хочете іноді викликати цю функцію, але не отримуєте count
, ви завжди можете оголосити про перевантаження.
Можливо, ви хочете знати, чому цей стиль краще підходить об'єктно-орієнтованому програмуванню. Загалом, він вписується в стиль програмування, який можна (трохи неточно) назвати "процедурне програмування", і це стиль процедурного програмування, який краще відповідає об'єктно-орієнтованому програмуванню.
Чому? Класична модель об'єктів полягає в тому, що вони мають властивості (ака атрибути), і ви допитуєтесь та маніпулюєте об'єктом (головним чином) шляхом читання та оновлення цих властивостей. Процедурний стиль програмування, як правило, полегшує це, оскільки ви можете виконувати довільний код між операціями, які отримують і встановлюють властивості.
Мінус процедурного програмування полягає в тому, що, оскільки ви можете виконувати довільний код всюди, ви можете отримати дуже тупі та вразливі до помилок взаємодії за допомогою глобальних змінних та побічних ефектів.
Так, досить просто, це хороша практика , щоб сигнал кому - то читає код , що функція може мати побічні ефекти, що робить його не-значення повертається.