Jump to content

Именованный параметр

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

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

Например, рассмотрим этот вызов метода Java или C# , который не использует именованные параметры:

window.addNewControl("Title", 20, 50, 100, 50, true);

Используя именованные параметры в Python , вызов можно записать так:

window.addNewControl(title="Title",
                     xPosition=20,
                     yPosition=50,
                     width=100,
                     height=50,
                     drawingNow=True)

Используя именованные параметры в PHP , вызов можно записать так:

$window->addNewControl(title: "Title",
                       xPosition: 20,
                       yPosition: 50,
                       width: 100,
                       height: 50,
                       drawingNow: True);

Версия с позиционными аргументами более неявная. Версии с именами параметров более явны. В зависимости от обстоятельств программист может найти тот или иной вариант более простым для чтения.

Использование в языках программирования

[ редактировать ]

Именованные параметры явно поддерживаются на многих языках. Неисчерпывающий набор примеров включает Ada , [1] С# 4.0+ , [2] Цейлон [ нужна ссылка ] , Язык разметки ColdFusion (CFML) [ нужна ссылка ] , Общий Лисп , [3] Фортран [ нужна ссылка ] , МВУ [ нужна ссылка ] , Котлин , [4] Математика [ нужна ссылка ] , ПЛ/SQL [ нужна ссылка ] , PowerShell [ нужна ссылка ] , Питон , [5] Р , [6] PHP , [7] Руби , [8] Скала , [9] Смолток [ нужна ссылка ] , Быстрый [10] и Visual Basic . [11] Objective-C не имеет именованных параметров (хотя части имени метода могут выглядеть как именованные параметры). [12]
В C++ вы можете получить именованные параметры, используя назначенные инициализаторы, начиная с C++20 . [13] вот так:

struct A {int a{}, int b{} }; 

void
foo(A bar)
{
   std::cout << bar.a << bar.b;
}
foo({ .a = 1, .b = 3 });

Порядок параметров

[ редактировать ]

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

При использовании именованных параметров обычно можно указывать аргументы в любом порядке, поскольку имя параметра, прикрепленное к каждому аргументу, определяет его назначение. Это уменьшает согласованность между частями программы. Некоторые языки поддерживают именованные параметры, но по-прежнему требуют указания аргументов в определенном порядке.

Дополнительные параметры и позиционные параметры

[ редактировать ]

Именованные параметры часто используются вместе с необязательными параметрами. Без именованных параметров необязательные параметры могут появляться только в конце списка параметров, поскольку нет другого способа определить, какие значения были опущены. Однако в языках, поддерживающих именованные необязательные параметры, программы могут предоставлять любое подмножество доступных параметров, и имена используются для определения того, какие значения были предоставлены.

Дополнительные сложности возникают в таких языках, как OCaml , которые поддерживают как необязательные именованные параметры, так и частичное применение . В общем, невозможно отличить частично примененную функцию от функции, которой предоставлено подмножество параметров. OCaml разрешает эту двусмысленность, требуя позиционный аргумент после всех необязательных аргументов именованных параметров: его наличие или отсутствие используется для принятия решения о том, была ли функция применена полностью или частично. Если все параметры являются необязательными, разработчик может решить проблему, добавив фиктивный позиционный параметр типа unit .

В MediaWiki коды (переменные) {{{1}}}, {{{2}}} в шаблонах и т. д. будут заменены первым, вторым и т. д. безымянным параметром (или значением параметра с именем 1, 2, и т. д.); они известны как позиционные параметры s.

Подражание

[ редактировать ]

В языках, которые не поддерживают именованные параметры, некоторых из тех же преимуществ можно достичь другими способами.

С документацией

[ редактировать ]

Их ценность как документации может быть воспроизведена с помощью всплывающих подсказок в интегрированных средах разработки (IDE) для таких языков, как Java , или с помощью комментариев (в C ):

MyFunctionCall(
    20,  /* x coordinate */
    50,  /* y coordinate */
    100, /* width */
    5,   /* height */
    TRUE /* drawing now? */
);

Корректность таких комментариев не проверяется, и порядок аргументов остается важным.

Со структурами данных

[ редактировать ]

Снять ограничение порядка аргументов и возможность оставить некоторые значения неуказанными можно путем передачи записи или ассоциативного массива .

Например, в JavaScript эти два вызова эквивалентны:

MyFunctionCall({ xPosition: 20, yPosition: 50, width: 100, height: 5,
                 drawingNow: true });
MyFunctionCall({ width: 100, height: 5, xPosition: 20, yPosition: 50,
                 drawingNow: true });

Сравните с C99: [14]

struct MyParam {
    int xPosition;
    int yPosition;
    int width;
    int height;
    unsigned char drawingNow;
};

MyParam parameters = { .xPosition = 20, .yPosition = 50,
        .width = 100, .height = 5, .drawingNow  = TRUE };
MyFunctionCall(&parameters);

Специальная поддержка

[ редактировать ]

В Perl до 2.0 и Ruby существует аналогичное соглашение (обычно называемое хешем или хэшем опций). [15] ), со специальной поддержкой пропуска разделителей в вызовах функций. Например, новая функция Net::FTP основного модуля принимает хэш необязательных аргументов. [16]

С цепочками вызовов методов

[ редактировать ]

В объектно-ориентированных языках программирования можно использовать цепочки методов для имитации именованных параметров как форму гибкого интерфейса . Каждый аргумент именованного параметра заменяется методом объекта «аргументы», который изменяет, а затем возвращает объект. В C++ это называется идиомой именованного параметра . [17] Затем объект можно передать функции, которая использует содержащиеся в нем аргументы.

Цепочка методов часто используется в сочетании с шаблоном построителя как способ переопределить значения по умолчанию, предоставленные классом построителя.

См. также

[ редактировать ]
  1. ^ Справочное руководство по языку программирования Ada . Министерство обороны США. 1983.
  2. ^ БиллВагнер. «Именованные и необязательные аргументы — Руководство по программированию на C#» . Microsoft Learn . Проверено 16 июня 2021 г.
  3. ^ «Функции» . Поваренная книга Common Lisp . Проверено 28 октября 2021 г.
  4. ^ «Функции | Котлин» . Котлин в помощь . Проверено 16 июня 2021 г. [ мертвая ссылка ]
  5. ^ «8. Составные операторы – 8.7. Определения функций» . Документация Python . Проверено 28 октября 2021 г.
  6. ^ «10.3 Именованные аргументы и значения по умолчанию» . Введение в Р. Комплексная сеть архивов R. Проверено 28 октября 2021 г.
  7. ^ «PHP: Аргументы функции — Руководство — Именованные аргументы» . PHP . Проверено 16 июня 2021 г.
  8. ^ Андерсон, Ян К. (21 июля 2014 г.). «Аргументы ключевых слов Ruby 2» . мыслибот . Проверено 28 октября 2021 г.
  9. ^ «Именованные аргументы» . Документация Скала . Проверено 16 июня 2021 г.
  10. ^ «Функции» . Язык программирования Swift (Swift 5.1) . Проверено 27 января 2020 г.
  11. ^ Кэтлин Доллард. «Передача аргументов по позиции и имени — Visual Basic» . Microsoft Learn . Проверено 16 июня 2021 г.
  12. ^ Библиотека разработчика — реализация класса обеспечивает его внутреннее поведение.
  13. ^ «Назначенная формулировка инициализации» (PDF) .
  14. ^ «Назначенные инициализации (с использованием коллекции компиляторов GNU (GCC))» .
  15. ^ Программирование Perl 2.9: Хэши
  16. ^ Основной модуль Perl Net::FTP
  17. ^ Часто задаваемые вопросы по C++, 10.20 Что такое «идиома именованных параметров»?
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d32fc764871d62571503d922af30e6f0__1712471940
URL1:https://arc.ask3.ru/arc/aa/d3/f0/d32fc764871d62571503d922af30e6f0.html
Заголовок, (Title) документа по адресу, URL1:
Named parameter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)