Комментарии 14
symfonycasts.com/screencast/messenger (не сочтите за рекламу, я к этому ресурсу никакого отношения не имею.
[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';
}
Меня это просто сводит с ума.
разрешить объявлять свойства прямо в конструкторе:
Спорное решение. Сейчас конструктор — это обычная функция и к ней применимо всё то же, что и к другим функциям. Приведённый синтаксис превращает конструктор в уникальную семантическую единицу, для которой нужна своя, отдельная логика компиляции и исполнения.
Не, самая обычная функция. Единственное различие, что он, как и все магические методы, помимо(?) HashTable function_table
кладётся в отдельную переменную zend_function *constructor
Т.е. да, когда VM доходит до опкода NEW, то там вершится небольшая магия, но сама функция при этом вызывается и исполняется ровно как любая другая.
PS вот не помню, точно ли они кладутся в function_table
или только по своим переменным :(
Вспоминаем SRP.
С этим нововведением, если нам необходимо поменять модификатор видимости, смотрим diff в конструкторе.
PHP-Дайджест № 177 (23 марта – 6 апреля 2020)