Как стать автором
Обновить
36
0
Евгений @reforms

Back-End Разработчик

Отправить сообщение
Голосую +1. Лично на это нарывался.
ИМХО проблемы надуманные

Я всячески старался избегать слова проблема, больше старался подчеркивать личная неприязнь, но справдливости ради скажу, что проблемы if VS switch находятся при review кода, как в одну так и в другую стороны.

Отдельно можно сказать про проверку на null. Она нужна в любом случае, т.к. передача null в метод ...

Бесспорно! Но жизнь такова, что многие проверки не делают и в результате получаем, в одном случае крайне неинформативную ошибку NPE, а в другом просто недостаточно информативную (если из примера «Неподдерживаемый канал связи null»)
На if-ах это сделать уже значительно сложнее без дополнительных переменных.

Согласен, но тоже верно и про switch-case?
Финт прекрасен: краток и лаконичен.
Косвенно Вы поднимаете более глубокую тему сравнения языков и их возможностей.

Не рубите так с плеча, про идеальный сайт. Я вообще думаю, что бизнес во многом сейчас решает быть или не быть js на сайте. Про интернет банкинг, могу сказать, что без js вообще нельзя — есть и логика защиты процеса работы с данными и шифрование и трюки-крюки простите за слег.

Про синглтон:
Что так: простой и паттерн реализации легко запоминается


Что не так:
1) Эстетический пейзаж фауны enum класса в виде синглтона оставляет желать лучшего
2) enum все таки перечисление сущностей одного типа и предназначен для другого нежели сингл тон — как боевая единица бизнес задачи
3) под капотом этого синглтона будут лишние методы values и valueOf, конструктор с лишними аргументами, скрытые поле $values с блоком инициализации, неоправданное наследование от класса Enum, а также по факту он будет фабрикой для получения единственного объекта по имени енума. Кое-что мог упустить или не точно указать так как пишу по памяти


По второму вопросу — это один ИЗ прикладных способом защиты приложения, а не bad-design code как Вы подумали

Спасибо — очень необычно, словно, после мира гетеров и сетеров проект в другом жанре видишь.
Спасибо, я немного вздохнул с облегчением когда прочитал от Вас Java+Lombok — это не Java
Интересный посыл — a можно пример Вашего кода, когда вы работает с SQL в java?
Простите меня за невежество, не знал я ранее про Lombok, прочитал захлебом пару статей (одна на хабре), но не суть.
Хотелось услышать Ваши экспертные мнения, не халивара ради, a больше для себя, по некоторым аспектам, которые меня беспокоят:
1) Не станет ли 'наша' java другой после внедрения Lombok, не потеряет ли она свое изящество, когда содержательной части станем меньше, чем аннотаций, как пример:
@Entity
@Table(name = "EMPLOYEE")
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@ToString(exclude="description")
@EqualsAndHashCode(exclude="description")
public class Employee {

    @Getter
    @Setter
    @NonNull
    private Integer id;

    @Getter
    @Setter
    @NonNull
    private String description;
}

2) Как будет осуществляться поиск использования методов, скажем, toString или getId и что будет с java-doc'ми этих методов в наших любимых IDE?
3) Какие баги нас могут ждать после начала эксплуатации фишек этого проекта?
Я понимаю что отстал по этой теме лет на 6 так, но все же. Заранее спасибо отвечающим.
Хороший перевод, спасибо. С автором статьи согласен.
Но мне показалось, что к первым двум пунктам:
1. Понимает ли пользователь, что от него требуется ввести адрес электронной почты в это поле?
2. Правильно ли он ввёл свой адрес в поле?
Обязательно нужно добавить 3 — А насколько Вашему сервису важно знать валидный адрес пользователя?
И мыслей здесь несколько:
1. Со времен появления сотовых телефонов значимость почты в разрезе возможности идентификации пользователя и обратной связи с ним резко упала.
2. Что важней, что пользователь получит возможность приносить Вам прибыль, пользуясь Вашим сервисом (например ввиде покупки товаров и т.п.) или обязательная доставка рекламы на его почтовый адрес?

Но справедливость ради скажу, что участвовал в проекте где были четкие бизнес требования на проверку введенного пользователем адреса (не массовый продукт) и связано это было с внутренним регламентом компании-закаpчика (ограничение по допустимым доменам и именам до собаки)
Так что всякое бывает.
Это вы мне хорошенько помордам надавали, за идеи то :) Но если серьезно, я с Вами согласен, но позвольте немного оправданий и историй:

Про потокобезопасность Singleton — так в том-то и суть, чтобы java забрала у нас шедевры человеческого разума по их реализации и сделала безопасными, я такие видел, как вспомню аж муражки по коже, да и сам черные дела творил, что греха таить. Вот один из них
// Прости гениев и помилуй
public enum MySingleton {
    MY_SINGLETON;
    private MySingleton() {
        init();
    }
    private void init() {/**..some_init_work...*/}
    public Result doSomeWork(/**args*/){/**..some_work...*/}
}

//где-то в коде, статик импорт
MY_SINGLETON.doSomeWork(/**params*/);
— мопед не мой.

Насчет протестировать, я наверное Ваш контекс не уловил,
assertEquals(etalonValue, MySingleton.getInstance().doSomeWork(data))


По поводу JSP 299 и реализации (weld, как пример), есть маленький проектик на 40-50 классов и 2 синглтона, уж очень не хочется тащить в проект слона или из жизни, главный архитектор запретил напрочь в ядро системы (оформлено обычным модулем с java классами) использовать какие-либо зависимости (даже apache) — только jdk и синглтончик там имеется.

По поводу декапсуляции все таки рефлексия != оператор декапсуляции. Пример из жизни (про безопасность), делали мы проект для 3их лиц, код представляет ценность и его эксплуатация тоже, Один из классов имеет 3 поля, важных, наружу не торчат нужно было проверять время от времени их состояние и согласованность, дошло время до защиты исходников — тут все просто, накрыли jar proguard'ом, нужна была защита от reverse engineering, дела здесь посложнее, но выкрутились — критичное накрыли stringer'ом (не сочтите за рекламу). И дальше — самое интересное, что достучаться просто до поля по его имени (после всего что было :) — та еще задачка (глаза вверх — момент тогда я познал дзен)
Много лет назад я думал, чтобы я добавил в Java, если бы…
Аннтоцию @Singleton — метод getInstance() и ссылка на объект генерятся автоматически
Аннтоцию @Sealed — метод sealed() генерится автоматически и после его вызова все поля класса становятся final
Элвис оператор — взгляд со стороны: вместо 'употребления' его с вызывающей стороны перенести в тип, как пример, public SomeData? getSomeData(String? type), думаю идея понятна
Оператор декапсуляции — опасный, но иногда очень нужный — осуществляет доступ к приватным полям (например для тестов), пример, someInstance#privateFieldName
Некоторые фантазии свои вспомнить не могу, дело давно было…
Я имел в виду маленький (по должности), но удаленький, хотя согласен по контексту и удаленный тоже подходит
Ваш пример еще можно уменьшить
function fetchUntilAvailable(url) {
  while (true) {
    let result = await fetch(url);
    if (isGood(result))
      return result;
    await delay(timeOut);
  }
}

//А насчет промисов тоже решение имеется:
function fetchUntilAvailable(url) {
  return fetch(url).then(function(result) {
    return isGood(result) && result
      || delay(timeOut).then(() => fetchUntilAvailable(uri)));
  });
}
//при условии, что delay возвращает Promise

Хотя Ваш вариант (await) мне нравится куда больше.
Спасибо за статью, словно побывал на той стороне процесса.

Но вопрос один имеется: «ТЗ высокой четкости» для кого?
Я разработчик и бывало такое когда ТЗ утвердило руководство, акцептовал начальник отдела аналитики собрали все подписи с клиента, а потом удаленький разработчик задает маленький вопрос и все летит в там-тарары.
Это Вы хорошо подметили.

Вот еще несколько выводов, опять же с допущениями:
Часто встречаемая ошибка — IOException
Java классы довольно хорошо докумнтированны
Литералов true и false примерно одинаково (12,989,940/12,745,131)
Java пронизана языками и технологиями:
— SQL / JDBC
— XML / JSON
— Regexp
— JUnit /
Не плохо покрыта тестами
Хорошо бы еще добавить информацию о среднем кол-ве вхождений слова в 1 файле, например, return — 68,848,062 + в среднем 10 раз в 1 файле и общее кол-во проанализированных файлов одного типа.
Позволю себе свои измышления по поводу языка java, согласно:
1. import=102,703,904
2. return=68,848,062
3. public=63,437,224
4. if=48,541,265
5. the=48,123,547
6. org=41,378,185
7. String=38,064,156
8. this=36,756,897
9. new=36,359,075
10. null=34,932,524
11. int=32,221,928
12. java=32,155,509
13. void=27,724,726
14. i=26,995,773
15. Override=26,626,591

Самый популярный тип — java.lang.String;
Самый популярный примитивный тип int;
Самая популярная конструкция — if, куда же без них;
Значимое количество методов не возвращающих ничего void,
Самое распрастраненное наименование переменной i — циклы рулят;
Самое распрастраненное слово в java-doc the
В java больше открытого public чем закрытого(private) и наследуемого(protected)

Конечно есть нюансы, но куда без них :)

За статью спасибо.
Да такие ветки имеются, и даже такие Promise.resolve(doSomeWork(request))

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность