@roskoshinsky

Как называются функции с такими аргументами?

Привет! Вопрос сугубо академический. Есть ли название такому принципу формирования аргументов в функциях, когда в зависимости от типа аргумента и/или их количества аргументов они интерпретируются как разные переменные. К примеру,

foo(a = false, b = false);

Если b === false, то возвращается a в квадрате. Если определены a и b, то возвращается результат их умножения друг на друга.

Может быть «плавающие аргументы»? или какие-нибудь «супер-аргументы»?
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 3
Не встречал в своем опыте(хотя он относительно мал) чтобы кто то называл подобные функции как то по особенному.

Вы создаете функцию которая имеет не обязательные аргументы.
Ответ написан
Комментировать
@roskoshinsky Автор вопроса
Коллеги, дело не в обязательности или их дефолтности. Дело в том, что в зависимости от комбинации они интерпретируются по своему — как значения разных внутренних переменных функции. Чтобы было яснее, гипертрофирую приведённый выше пример.

foo(a, b);

Если определён аргумент а, но b не определён, то функция возвращает квадрат a. Если определены a и b, то возвращается b в степени a, то есть в некотором смысле аргументы меняются смысловой нагрузкой.

В программировании на серверной стороне я придерживаюсь процедурного дизайна в решении задач, то есть кругом функции. И такого рода подход показывает свою стабильную эффективность и элегантность. Я подумал, что в силу своей яркости наверняка у него есть название, поэтому решил спросить.
Ответ написан
65536
@65536
не слыхал чтобы это как-то называлось. делаю так для всяких сложных функций, которые можно вызывать по-разному. "магический" вызов чисто для удобства. например есть функция f(a, b). в ее логике нужны эти а и б. а в виде строки, либо фэлс, б в виде массива или нулла. и допустим больше чем в половине случаев надо вызвать с фэлсом в первом аргументе, придется каждый раз писать f(false, $array), что неприятно, и хотелось бы писать просто f($array). для этого просто перед выполнением основной логики функции нужно искусственно переделать аргументы. ну и лучше не прописывать дефолты в объявлении а собрать с помощью func_get_args или лучше сразу применить заклинание list($a, $b, $c) = array_pad(func_get_args(), 3, null);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы