31 июля 2013 г.

Именованные аргументы (программистское)

event.initMouseEvent(
    "click", true, true, window,
    123, 101, 202, 101, 202,
    true, false, false, false,
    1, null);
Сигнатура js-функции event.MouseClickEvent — ночной кошмар, ставший явью. Ни один разработчик в мире никогда сходу не сможет сказать, что обозначает, к примеру, «1» (второй параметр с конца), не заглянув перед этим в документацию.

В некоторых языках программирования имеются инструменты, с помощью которых можно избегать такой каши. Как всем известно, Python, помимо всех остальных своих достоинств, известен благодаря превосходной концепции именованных аргументов, позволяющей объявлять метод с заранее заданными дефолтными значениями аргументов. Используя подобную схему, мы бы вызывали метод initMouseEvent() как-нибудь так:
event.initMouseEvent(
    type="click",
    canBubble=true,
    cancelable=true,
    view=window,
    detail=123,
    screenX=101,
    screenY=202,
    clientX=101,
    clientY=202,
    ctrlKey=true,
    altKey=false,
    shiftKey=false,
    metaKey=false,
    button=1,
    relatedTarget=null);
И тут же, словно по мановению волшебной палочки, всё вдруг проясняется и нам становится понятно, что обозначает каждый аргумент, передаваемый методу. Но, к сожалению, в настоящее время в JavaScript такой синтаксис невозможен. Именованные аргументы здесь — это фантастика, которой еще очень и очень долго ждать воплощения в реальность. В черновиках следующей версии спецификаций, ES6, есть описания так называемых default parameter values и rest parameters, но нету и намека на именованные параметры, что весьма удручает.

Комментариев нет:

Отправить комментарий