История изменений
Исправление MOPKOBKA, (текущая версия) :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства чистых функций. Это стремление обычно шире, вся система должна быть как можно проще, а не только отдельная функция.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Заметь что state это не буквально все, это разные объекты, я их просто не описываю, ну штук 5 к примеру. Но они тяжелые.
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода, и вообще вынести их в .ini какой нибудь.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы в конкретном вызове. В ФП тоже есть неиспользуемые в определенных ветках аргументы.
Исправление MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства чистых функций. Это стремление обычно шире, вся система должна быть как можно проще, а не только отдельная функция.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Заметь что state это не буквально все, это разные объекты, я их просто не описываю, ну штук 5 к примеру. Но они тяжелые.
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы в конкретном вызове. В ФП тоже есть неиспользуемые в определенных ветках аргументы.
Исправление MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства чистых функций. Это стремление обычно шире, вся система должна быть как можно проще, а не только отдельная функция.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы в конкретном вызове. В ФП тоже есть неиспользуемые в определенных ветках аргументы.
Исправление MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства чистых функций.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы в конкретном вызове. В ФП тоже есть неиспользуемые в определенных ветках аргументы.
Исправление MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы в конкретном вызове. В ФП тоже есть неиспользуемые в определенных ветках аргументы.
Исправление MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.
Список глобальных переменных для нечистой функции может меняться от вызова к вызову. Например, если одним из аргументов является функция, то в зависимости от передаваемой функции ко входу надо добавлять и все переменные, которые она использует.
В моей мысленной модели в функцию передаются все переменные которые могут быть использованы. Не обязательно только те которые должны быть использованы.
Исходная версия MOPKOBKA, :
И автоматически появляется желание уменьшить количество параметров.
Это и в императивном программировании так. Но это скорее про желание, а не про свойства.
Вместо огромного состояния передаём функцию-локатор стреляющего (видит и на каком расстоянии или не видит), тип/класс стреляющего, тип/класс стреляемого.
Ну это упрощенно, потому что нужно запрограммировать ошибочное обнаружение, то есть если монстр не видел кто в него попал, то будет стрелять того кто ближе, и находится по нужному углу, для вызова этой функции понадобится строк 50, так что хорошо сделать функцию preMonterFriendlyFireTest(state), ну и мы вернулись в начало %)
Если тип функций не меняется, то не надо. То есть, если у монстра стало не 100 здоровья, а 200, это любая система с REPL отработает на лету.
Обычно у меня не такие простые изменения, а для простых параметров я бы предпочел запрограммировать графический интерфейс что бы это было удобнее чем редактирование кода.