"Ідеальна кількість аргументів для функції дорівнює нулю" - це неправильно неправильно. Ідеальна кількість аргументів - це саме та кількість, яка потрібна для того, щоб ваша функція була без побічних ефектів. Менш за все це, і ви без потреби викликаєте незрозумілість своїх функцій, змушуючи вас відволіктися від ями успіху і піднятися на градієнт болю. Іноді "дядько Боб" помічається за його порадою. Іноді він вражаюче помиляється. Його порада з нульовими аргументами є прикладом останнього
( Джерело: коментар @David Arno під іншим питанням на цьому сайті )
Коментар отримав вражаючу кількість 133 відгуків, тому я хотів би приділити трохи уважнішу увагу його заслугам.
Наскільки мені відомо, в програмуванні є два окремі способи: чисте функціональне програмування (що це зауважує, що сподівається), і скажіть, не запитуйте (що час від часу рекомендується також на цьому веб-сайті). Ці два принципи AFAIK є принципово несумісними, близькими до протилежності один одному: чистий функціонал може бути узагальнений як "лише повернені значення, не мають побічних ефектів", тоді як кажіть, не запитуйте, можна підсумувати як "не повертайте нічого" мають лише побічні ефекти ". Крім того, я здивований, тому що я вважав, що те, що сказати, не запитувати, вважалося ядром парадигми ОО, тоді як чисті фунцитони вважалися ядром функціональної парадигми - тепер я бачу чисті функції, рекомендовані в ОО!
Я думаю, розробники, ймовірно, повинні обрати одну з цих парадигм і дотримуватися її? Ну, я мушу визнати, що ніколи не міг змусити наслідуватись. Часто мені здається зручним повернути значення, і я не можу реально зрозуміти, як я можу досягти того, чого хочу досягти, лише за допомогою побічних ефектів. Часто мені здається, що у мене є побічні ефекти, і я не можу реально зрозуміти, як я можу досягти того, чого хочу досягти, лише повертаючи значення. Також часто (я думаю, це жахливо) у мене є методи, які роблять і те, і інше.
Однак із цих 133 результатів я міркую, що в даний час чисте функціональне програмування "виграє", оскільки стає консенсусом, що йому краще сказати, не питайте. Це правильно?
Тому на прикладі цієї антипатернської гри я намагаюся зробити : Якби я хотів привести її у відповідність до чистої функціональної парадигми - ЯК ?!
Мені здається розумним мати бойовий стан. Оскільки це покрокова гра, я зберігаю бойові стани у словнику (мультиплеєр - може бути багато битв, які грають багато гравців одночасно). Щоразу, коли гравець робить свою чергу, я називаю відповідний метод бойового стану, який (a) відповідно змінює стан і (b) повертає оновлення гравцям, які серіалізуються в JSON і в основному просто повідомляють їм, що щойно сталося на дошки. Це, мабуть, є грубим порушенням принципів BOTH і водночас.
Гаразд - я міг би зробити метод ПОВЕРНЕННЯ бойового стану замість того, щоб змінювати його на місці, якби дуже хотів. Але! Чи доведеться мені потім копіювати все, що знаходиться у бойовому стані, лише для повернення абсолютно нового стану замість того, щоб змінювати його на місці?
Можливо, тепер, якщо цей крок - це атака, я можу просто повернути оновлених символів HP? Проблема полягає в тому, що це не так просто: правила гри, рух може мати і часто матиме набагато більше ефектів, ніж просто видалення частини HP гравця. Наприклад, це може збільшити відстань між символами, застосувати спеціальні ефекти тощо тощо.
Мені здається набагато простіше просто змінити стан на місці і повернути оновлення ...
Але як би досвідчений інженер вирішив це?