Функции PHP 8, которые я хотел бы, также существовали в JavaScript

Я знаю, что до сих пор существует много ненависти к PHP, но, на мой взгляд, с версией 7 (которой уже более 5 лет!) PHP превратился в отличный язык, который забавен и даже безопасен для типов. использовать. Помимо Just-In-Time compilation, которая может значительно повысить производительность PHP-приложений, версия 8 содержит множество полезных функций.

Я хочу представить три из них, которые я действительно хотел бы использовать в JavaScript. Надеюсь, это пригодится особенно тем, кто еще не знаком с PHP 8. Пойдем!

# 1 Именованные аргументы

Предположим, у вас есть функция foo с 6 параметрами с a по f, имеющими разные значения по умолчанию, и теперь вы хотите вызвать эту функцию, передав аргумент false только для последнего параметра.

PHP 8:

foo(f: false);

JavaScript:

foo('test', 42, true, 'bar', 5.5, false);

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

См. RFC: именованные аргументы

# 2 Выражение соответствия

Новое выражение match в PHP очень похоже на выражение switch, за исключением того, что оно является выражением и может использоваться для непосредственного присвоения значений переменной или возвращаемых значений. Это очень удобно, если у вас есть более двух возможных значений для назначения.

PHP 8:

$fontWeight = match ($weight) {
  100 => "Super Thin",
  300 => "Thin",
  400 => "Normal",
  600 => "Bold",
  900 => "Heavy"
};

JavaScript:

const fontWeight = '';
switch (weight) {
  case 100:
    fontWeight = "Super Thin";
    break;
  case 300:
    fontWeight = "Thin";
    break;
  case 400:
    fontWeight = "Normal";
    break;
  case 600:
    fontWeight = "Bold";
    break;
  case 900:
    fontWeight = "Heavy";
    break;
}

Выражение match может быть смоделировано объектом JavaScript, но для этого потребуется дополнительная переменная (таким образом, больше зарезервированной памяти) и не удастся в случаях, когда проверенные значения не могут использоваться в качестве ключей объекта.

См. Документы: match

# 3 Необязательная цепочка

Создание цепочки только при наличии необходимого свойства - очень элегантный способ запроса объектов. В PHP вы можете сделать это сейчас с помощью оператора nullsafe.

PHP 8:

$country = $session?->user?->getAddress()?->country;

JavaScript:

const country =
  session && session.user && session.user.getAddress() && session.user.getAddress()['country']
  ? session.user.getAddress()['country']
  : null;

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

См. RFC: Nullsafe Operator

Заверните

Итак, мы увидели небольшой набор новых функций PHP 8, которые также станут отличным дополнением к JavaScript. Может быть, вы имеете в виду другие функции PHP, которые отсутствуют в JavaScript, или вы знаете лучшую копию JavaScript для решения вышеуказанных проблем, чем я? Большой! Обсудим в комментариях.

Первоначально опубликовано: 8 февраля 2021 г. на сайте dev.to