Да, вы правы. Все выражение вычисляется каждый раз по-новому, а не только при создании функции. Мне почему-то казалось, что это делается только для функций. Вот такая конструкция работает ожидаемо
let a = 1;
let b = 2;
let fn = (c = a + b) => c;
fn() == 3
a = 2
fn() == 4
Но у такого подхода есть и обратная сторона. Переменные, которые использовались в качестве значений по умолчанию для аргументов, далее в коде менять нужно с большой осторожностью (если вообще стоит это делать), иначе при следующем вызове функции результат вычисления может быть совсем не тот, что ожидается. Другими словами,
let a = 1;
let b = 2;
let argA = a; // только так безопасно далее менять a
let fn = (c = argA + b) => c;
...
a = 2; // не скажется на результате вычисления функции
Выглядит, как костыль. Ну, а с вложенными функциями вообще беда получается
let fn = function (c = a + b) {
let fn1 = (k = c + a) => k;
... // тут мы что-то могли сделать с 'c'
return fn1();
}
... // ну и тут мы что-то могли сделать с 'a' и 'b' дополнительно
Что в итоге получится, никому не известно.
Как мне кажется, было бы удобнее и очевиднее, если бы значение вычислялось единожды при создании функции. А если нужна динамика, просто передаете в качестве аргумента функцию, указывая ее с новым синтаксисом, типа
let argFn = () => 1;
let fn = (c = @argA) => c;
или разделить выполнение сразу и на каждый вызов, типа
let fn = (c = a + b) => c; // сразу
let fn = (c = {a + b}) => c; // на каждый вызов
Это примеры, синтаксис можно придумать любой. Основная суть в том, чтобы добавить гибкости. Но все вышеперечисленное — это конечно, ИМХО.
Я про то, что поведение в данном контексте совсем неочевидно. В данном случае каждая функция, привязанная к аргументу как значение по умолчанию, выполняется каждый раз (или один раз?) при необходимости посчитать значение по умолчанию для аргумента, а не единожды в момент создания искомой функции с этими аргументами. И если в любом другом контексте выражение имя_функции() имеет однозначную трактовку, а именно исполнение кода этой функции сразу, как только интерпретатор добирается до этого места в коде, то в данном контексте оно так не работает.
Вдвойне запутывает ситуация, когда надо вычислить значения аргументов сразу при инициализации функции. Предположу, что это делается как-то так
const required = (p1, p2) => {...};
defaultA = required(v1, v2);
defaultB = required(v3, v4);
const add = (a = defaultA, b = defaultB) => a + b;
Но почему не тем синтаксисом, что описан в статье? Казалось бы, это же поведение конструкции по умолчанию.
По сути тут меняется поведение базовой конструкции в зависимости от контекста, что-то типа "оно работает так, но вот в этом конкретном случае — по-другому". Это ведёт к тому, что вам нужно ещё и контекст контролировать, что добавляет дополнительную бессмысленную сложность при чтении кода. И это при том, что во всех остальных языках, в которых такая конструкция именно вызывает функцию, это поведение соблюдается везде, независимо от контекста. И нет никакой двоякой трактовки, конструкция везде работает одинаково — выполняет функцию в том месте, где встречается это выражение.
Почему например, нельзя было придумать новый синтаксис для выполнения функции в контексте аргументов по умолчанию? Такое же уже делали (arrow functions, например). Тогда бы каждая конструкция однозначно трактовалась независимо от контекста. Как пример,
const required = () => {...};
const add = (a = @required, b = @required) => a + b;
И кстати, я не припомню больше таких конструкций в языке, которые так кардинально меняют свое поведение в зависимости от контекста, в котором выполняются.
Доки доками конечно, но когда одна и та же конструкция работает в разных контекстах по-разному — не очень хороший подход, как мне кажется. Просто потому, что это действительно запутывает. Ожидается одно поведение, а на практике оно другое, только из-за того, что контекст другой. По мне, лучше такие вещи не использовать, чтобы не запутывать ни себя, ни коллег, которые потом в таком коде будут разбираться.
Ну там не только мониторинг в продакшене упоминается. Вы забыли про canarying, flagging. Напрямую к микросервисам это конечно не относится, может применяться и для монолитов, насколько я понимаю, но все же) Вообще статься в целом полезная, я для себя взял на заметку несколько инструментов и практик
> А вот с этим могу поспорить.
Можете конечно) Но когда у вас 300+ микросервисов, как в Soundcloud, то все их развернуть на одной машине, да еще и поддерживать в актуальном состоянии, да еще и со всей конфигурацией, близкой к продакшену, это действительно занятие для мазохистов
Я регистрировался давно. Возможно, сейчас уже поменяли. Но даже сейчас, если у вас есть аккаунт, вы можете удалить обычную версию и пользоваться веб. Это не так удобно, особенно, если у вас много контактов, с которыми вы общаетесь в телеграмме, но зато разрешений меньше и безопаснее. У меня то там только группы, которые я в основном читаю, да один контакт, с которым общаюсь.
Да, можно. Я зарегистрировал аккаунт через браузер на десктопе, а потом просто открыл веб-версию на смарте. Ее также можно сохранить, как ярлык на домашнем экране, будет работать, как отдельное веб-приложение. Такие дела)
Ну а вы не давайте) В lineage os есть разграничение прав для приложений, насчёт других андроидов не уверен. Там можно не давать доступ к камере. А вообще я использую веб-версию. Так безопаснее))
Я думаю, тут инициатива с обоих сторон. Сначала обсуждение с сотрудником, как он видит свое будущее, развитие и так далее. Затем составление плана развития и его предметное обсуждение с сотрудником
А расскажите, как у вас брейнштормы удаленно проходят? Как это обычно бывает оффлайн. Собираются несколько человек в переговорке, есть доска. И начинается обсуждение, рисование на доске, показывание на пальцах, в общем, идёт процесс горячего обсуждения и поиска решений. С трудом представляю, как брейншторм такой эффективности возможен полностью онлайн.
И вариант, когда на вас вешают, как вы выразились, больше с каждым разом — это конечно плохо. У нас каждый работник сам оценивает свои задачи и тут больше, чем он сможет потянуть на спринт, ему никто не навешивает.
Как я уже написал, для этого есть экстра задачи, на тот случай, если вы все закончили раньше. Так что вариант "все сделал раньше, сижу без дела" будет только тогда, когда сам работник в этом заинтересован. По поводу ворклога по часам с фиксированной оплатой в месяц, тут я с вами согласен, тут ничего хорошего для сотрудника нет. У меня оплата почасовая, переработки оплачиваются, поэтому в этой схеме ворклог устраивает и работодателя и сотрудника.
Есть такое понятие, как планирование. Если человек сам оценил свои задачи и этих задач хватает на весь спринт, да ещё есть экстра задачи на случай, если он всё сделал раньше, то как в такой схеме можно задачу за 4 часа делать при оценке в 8 и потом сидеть без дела?) Тут явно плохое планирование
В таком случае могу посоветовать поговорить с начальством насчёт выделения отдельной зоны отдыха, которая будет отделена от всего остального помещения. Вообще, отсутствие таких мест, как переговорные или зоны отдыха, не с хорошей стороны показывают компанию и ее руководство. Любому человеку иногда нужно уединение, даже в офисе во время рабочего дня. И это очень важно для мыслительного процесса. Попробуйте донести это до начальства. Ну, а если не получится, всегда остаётся вариант со сменой работы)
Вам следует забить на окружающих и заняться своим обдумыванием, неспеша и не отвлекаясь. Что самое страшное, что может случиться, если вас застукают? Ну, максимум, пожурят пальчиком) Даже не выговор или что-то подобное. А это пустяки на самом деле. Но если уж и так ничего не получается, переместитесь в переговорную, там вам точно никто дергать не будет)
Конечно, "пока гром не грянет", как говорится. А тогда уж и более дешевыми средствами будут океаны чистить, чем придумывать роботов и машинное обучение)
Да, вы правы. Все выражение вычисляется каждый раз по-новому, а не только при создании функции. Мне почему-то казалось, что это делается только для функций. Вот такая конструкция работает ожидаемо
Но у такого подхода есть и обратная сторона. Переменные, которые использовались в качестве значений по умолчанию для аргументов, далее в коде менять нужно с большой осторожностью (если вообще стоит это делать), иначе при следующем вызове функции результат вычисления может быть совсем не тот, что ожидается. Другими словами,
Выглядит, как костыль. Ну, а с вложенными функциями вообще беда получается
Что в итоге получится, никому не известно.
Как мне кажется, было бы удобнее и очевиднее, если бы значение вычислялось единожды при создании функции. А если нужна динамика, просто передаете в качестве аргумента функцию, указывая ее с новым синтаксисом, типа
или разделить выполнение сразу и на каждый вызов, типа
Это примеры, синтаксис можно придумать любой. Основная суть в том, чтобы добавить гибкости. Но все вышеперечисленное — это конечно, ИМХО.
Я про то, что поведение в данном контексте совсем неочевидно. В данном случае каждая функция, привязанная к аргументу как значение по умолчанию, выполняется каждый раз (или один раз?) при необходимости посчитать значение по умолчанию для аргумента, а не единожды в момент создания искомой функции с этими аргументами. И если в любом другом контексте выражение имя_функции() имеет однозначную трактовку, а именно исполнение кода этой функции сразу, как только интерпретатор добирается до этого места в коде, то в данном контексте оно так не работает.
Вдвойне запутывает ситуация, когда надо вычислить значения аргументов сразу при инициализации функции. Предположу, что это делается как-то так
Но почему не тем синтаксисом, что описан в статье? Казалось бы, это же поведение конструкции по умолчанию.
По сути тут меняется поведение базовой конструкции в зависимости от контекста, что-то типа "оно работает так, но вот в этом конкретном случае — по-другому". Это ведёт к тому, что вам нужно ещё и контекст контролировать, что добавляет дополнительную бессмысленную сложность при чтении кода. И это при том, что во всех остальных языках, в которых такая конструкция именно вызывает функцию, это поведение соблюдается везде, независимо от контекста. И нет никакой двоякой трактовки, конструкция везде работает одинаково — выполняет функцию в том месте, где встречается это выражение.
Почему например, нельзя было придумать новый синтаксис для выполнения функции в контексте аргументов по умолчанию? Такое же уже делали (arrow functions, например). Тогда бы каждая конструкция однозначно трактовалась независимо от контекста. Как пример,
И кстати, я не припомню больше таких конструкций в языке, которые так кардинально меняют свое поведение в зависимости от контекста, в котором выполняются.
Можете конечно) Но когда у вас 300+ микросервисов, как в Soundcloud, то все их развернуть на одной машине, да еще и поддерживать в актуальном состоянии, да еще и со всей конфигурацией, близкой к продакшену, это действительно занятие для мазохистов
Я регистрировался давно. Возможно, сейчас уже поменяли. Но даже сейчас, если у вас есть аккаунт, вы можете удалить обычную версию и пользоваться веб. Это не так удобно, особенно, если у вас много контактов, с которыми вы общаетесь в телеграмме, но зато разрешений меньше и безопаснее. У меня то там только группы, которые я в основном читаю, да один контакт, с которым общаюсь.
https://www.ferra.ru/ru/games/review/10-most-waited-games/
А вы предлагаете написать обратное?)
Я думаю, тут инициатива с обоих сторон. Сначала обсуждение с сотрудником, как он видит свое будущее, развитие и так далее. Затем составление плана развития и его предметное обсуждение с сотрудником
А расскажите, как у вас брейнштормы удаленно проходят? Как это обычно бывает оффлайн. Собираются несколько человек в переговорке, есть доска. И начинается обсуждение, рисование на доске, показывание на пальцах, в общем, идёт процесс горячего обсуждения и поиска решений. С трудом представляю, как брейншторм такой эффективности возможен полностью онлайн.
И вариант, когда на вас вешают, как вы выразились, больше с каждым разом — это конечно плохо. У нас каждый работник сам оценивает свои задачи и тут больше, чем он сможет потянуть на спринт, ему никто не навешивает.
Как я уже написал, для этого есть экстра задачи, на тот случай, если вы все закончили раньше. Так что вариант "все сделал раньше, сижу без дела" будет только тогда, когда сам работник в этом заинтересован. По поводу ворклога по часам с фиксированной оплатой в месяц, тут я с вами согласен, тут ничего хорошего для сотрудника нет. У меня оплата почасовая, переработки оплачиваются, поэтому в этой схеме ворклог устраивает и работодателя и сотрудника.
А что случилось потом?)
В таком случае могу посоветовать поговорить с начальством насчёт выделения отдельной зоны отдыха, которая будет отделена от всего остального помещения. Вообще, отсутствие таких мест, как переговорные или зоны отдыха, не с хорошей стороны показывают компанию и ее руководство. Любому человеку иногда нужно уединение, даже в офисе во время рабочего дня. И это очень важно для мыслительного процесса. Попробуйте донести это до начальства. Ну, а если не получится, всегда остаётся вариант со сменой работы)
Вам следует забить на окружающих и заняться своим обдумыванием, неспеша и не отвлекаясь. Что самое страшное, что может случиться, если вас застукают? Ну, максимум, пожурят пальчиком) Даже не выговор или что-то подобное. А это пустяки на самом деле. Но если уж и так ничего не получается, переместитесь в переговорную, там вам точно никто дергать не будет)
А когда и где будет доступно?
Конечно, "пока гром не грянет", как говорится. А тогда уж и более дешевыми средствами будут океаны чистить, чем придумывать роботов и машинное обучение)