В этом посте объясняется, что представляют собой параметры ключевых слов, как их можно смоделировать в JavaScript, и какие улучшения принесет ECMAScript.next. Очевидно, что то, что здесь сказано о методах, применимо и к функциям.
Позиционные параметры и ключевые параметры. При вызове метода на языке программирования фактические параметры (указанные вызывающей стороной) должны быть сопоставлены с формальными параметрами (определения метода). Есть два распространенных способа сделать это:
- Позиционные параметры отображаются по положению: первый фактический параметр сопоставляется с первым формальным параметром и т. Д.
- Параметры ключевых слов используют ключевые слова (метки) для выполнения сопоставления. Ключевые слова связаны с формальными параметрами в определении метода и обозначают фактические параметры в вызове метода. Неважно, в каком порядке появляются ключевые параметры, если они правильно помечены. В следующих разделах объясняется, почему параметры ключевых слов полезны, и приводятся примеры.
Параметры ключевых слов как описания. Как только метод имеет более одного параметра, может возникнуть путаница в отношении того, для чего используется каждый параметр. Например, допустим, у вас есть тип Entries, который управляет записями некоторого вида. Учитывая записи экземпляра, вы можете сделать следующий вызов метода.
entries.select(3, 5);
Что означают эти два числа? Python поддерживает параметры ключевых слов, и они позволяют легко увидеть, что происходит:
entries.select(from=3, to=5)
Параметры и параметры ключевых слов. Необязательные параметры метода иногда называют его параметрами . Позиционные параметры неудобны, если параметры могут быть опущены где угодно (не только в конце). Тогда любое подмножество опций может быть активным, и часто приходится вставлять пробелы, такие как ноль, для неактивных. Параметры ключевых слов помогают с опциями двумя способами: они четко описывают, какие параметры являются активными, и позволяют просто отбрасывать неактивные параметры.
JavaScript. В JavaScript нет встроенной поддержки параметров ключевых слов, таких как Python и многие другие языки. Но есть довольно элегантное моделирование: предоставьте необязательные параметры через литерал объекта. Результатом является так называемый объект параметров, который назначается одному формальному параметру. Используя эту технику, вызов select () выглядит следующим образом:
entries.select({ from: 3, to: 5 });
Метод получает объект параметров со свойствами от и до. Вы можете отказаться от любого из вариантов:
entries.select({ from: 3 }); entries.select({ to: 5 }); entries.select();
Очевидно, вы также можете ввести позиционные параметры. Обычно опции располагаются последними, но JavaScript не заставляет вас делать это.
entries.select(value1, value2, { from: 3, to: 5 });
Метод select () будет реализован следующим образом в текущем JavaScript:
Entries.prototype.select = function (options) { if (options === undefined) options = {}; if (options.from === undefined) options.from = 0; if (options.to === undefined) options.to = this.length; // Use options.from and options.to };
Не особенно элегантно. Его можно немного укоротить, но тогда вам придется беспокоиться о том, какие значения JavaScript считает ложными:
Entries.prototype.select = function (options) { if (!options) options = {}; if (!options.from) options.from = 0; if (!options.to) options.to = this.length; // Use options.from and options.to };
EcmaScript.next. В ECMAScript.next мы получаем гораздо более удобное решение (
напоминание через Брендана Эйха):
Entries.prototype.select = function ( { from = 0, to = this.length }) { // Use `from` and `to` };
Аллен Уирфс-Брок
отмечает, что если вы хотите, чтобы люди могли опускать объект параметров, то вышеприведенное изменится на:
Entries.prototype.select = function ( { from = 0, to = this.length } = {}) { // Use `from` and `to` };