Last active
September 14, 2021 19:26
-
-
Save xexys/05eabccd197dc3d12d1faa662db80f93 to your computer and use it in GitHub Desktop.
Revisions
-
xexys renamed this gist
Sep 14, 2021 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
xexys created this gist
Sep 14, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,46 @@ > а слишком много - это сколько?) больше 5?) Имхо 4 еще можно передать списком, остальное уже объект. Дело в том, что когда аргументов больше 4-х, то, как правило, ты попадаешь в ситуацию, про которую написал ниже. > мне непринципиально, я просто привыкла к объектам, потому что мне так понятнее, что и в какой аргумент ты передаешь - порядок для тебя неважен в этом случае) Ну вот да, тут ключевое - это порядок. Какое-то время назад мы использовали рамду и карринг, и, чтобы можно было в `point-free` стиле создавать ф-ии, основной аргумент шел в самом конце. Пример ```ts const replace = curry((pattern, value) => {...}); const replaceX = replace('x'); ``` При обычном подходе, как правило, самый важный по смыслу аргумент идет первым. Важный - это тот аргумент к которому или применяется изменение (сеттер), или же исходя из данных которого возвращается значение (геттер). Дефолтные значения, или необязательные идут в самом конце. ```ts const setFieldValue = async (ctx: Ctx, field: typeof FormFieldPO, value: string, name?: string): Promise<void> ``` `setFieldValue` - само название нам уже диктует кто тут главный. Если нет `field`, то и ф-ию вызывать не имеет смысла. Именно `field` наделяют ф-ию какой-то семантикой, что это не абстрактный сеттер. Если нет `value` то как бы тоже не имеет смысла вызывать, но все же `value`- вторичен, так как оно более абстрактный в отрыве от ф-ии. Это именно `fieldValue`, а не просто `value`. `name` - необязательный параметр, служит чтобы в отчете дать больше подробностей, потому в самом конце. ```ts const calculateSomeValue = (params: {a: string, b: number, c: string[]}): Value; ``` А вот тут другая ситуация, сложно сказать какие из параметров `a`, `b` или `c` определяющие, и какие из них больше вносят вклад в итоговый результат. Потому тут скорее всего лучше использовать объект. Конечно нет каких-то строгих правил, и все во многом на уровне договоренности в команде. Я бы рекомендовал как-то так делить: - Если это геттеры или сеттеры для каких-то сущностей, то как правило тут лучше перечислить аргументы. - Если это какие-то вычисления на основе данных, то лучше объект. Но могут быть как геттеры так и вычисления в одном флаконе. Например селекторы. Они с одной стороны геттеры для сущности `state`, а с другой стороны идет вычисление от данных. Но все же мы с уверенностью можем сказать что `state` - определяющий параметр. В таких случаях можно все равно выделить один аргумент под основной, как скажем наш `state`, а все остальные собрать в объект. ```ts const selectCalculatedValue = (state: State, params: {a: string, b: number, c: string[]}): Value; ```