Как стать автором
Обновить

Комментарии 14

если уж на них ссылки на symfony.com, то куда уж больше рекламы)
[RFC] Allow trailing comma in parameter list
Unfortunately, it is currently not possible to place a trailing comma in the parameter list. This breaks uniformity, and results in larger diffs when a new optional parameter is added. Additionally, it is inconsistent with call-sites, which do allow a trailing comma

Надеюсь, что за это не проголосуют. О какой однородности идет речь? Возможно я просто чего-то не понимаю, но меня дико бесит даже лишняя допустимая запятая в конце массива, а тут еще и в аргументах ее наблюдать :(

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


 function foo() {
     return [
         'baz',
-        'bar'
+        'bar',
+        'qux'
     ];
 }

 function foo() {
     return [
         'baz',
+        'qux',
     ];
 }

Учитывая, что мы просто добавили qux, второй вариант выглядит несколько лаконичнее.

О какой однородности идет речь?


Сейчас можно ставить «лишнюю» запятую в массивах и при вызове методов. Добавление этой фичи как раз и приведёт всё к однородному виду.
А вот меня — наоборот. Никонда не приходилось менять поряток строк одним движением, а потом удалять-добавлять запятые?
завершающая запятая ставится только в случае, если терминалы лексемы находится на отдельных от элемента строках

По задумке Никиты? Что-то будет мешать ставить заверщающую запятую при инлайновом объявлении?
Согласен, что диффы станут немного чище, но при этом получаем вот такую картину:


function foo(string $arg1, int $arg2,) {
     return [
         'baz',
         'qux',
     ];
 }

Все еще считаю, что это "расхлебывание" стиля кода.


ps. простите, промазал веткой

Что-то будет мешать ставить заверщающую запятую при инлайновом объявлении?


С другой стороны, а что мешает вообще весь код писать в одну строчку, без отступов и пробелов? ;)

К сожалению, ничего не мешает. Я был очень приятно удивлен, когда узнал, что интерпретатор python контролирует отступы и просто не позволяет писать криво.
Например, мой друг очень любит выравнивать строки по знаку '=', типа вот такого:


public function test() 
{
    $short_var               = 'some text';
    $long_name_var_full_swag = 'another value';
}

Меня это просто сводит с ума.

Не, ну настроить phpcbf в CI или автоформатирование при пулле — это одно из самых простых действий. Не вижу особых проблем.
разрешить объявлять свойства прямо в конструкторе:

Спорное решение. Сейчас конструктор — это обычная функция и к ней применимо всё то же, что и к другим функциям. Приведённый синтаксис превращает конструктор в уникальную семантическую единицу, для которой нужна своя, отдельная логика компиляции и исполнения.

Мне кажется, что она обычная только для пользователя, а на уровне внутренностей интерпретатора для неё и так «отдельная логика компиляции и исполнения».

Не, самая обычная функция. Единственное различие, что он, как и все магические методы, помимо(?) HashTable function_table кладётся в отдельную переменную zend_function *constructor


Т.е. да, когда VM доходит до опкода NEW, то там вершится небольшая магия, но сама функция при этом вызывается и исполняется ровно как любая другая.


PS вот не помню, точно ли они кладутся в function_table или только по своим переменным :(

Вспоминаем SRP.
С этим нововведением, если нам необходимо поменять модификатор видимости, смотрим diff в конструкторе.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации