После просмотра вот этого ролика собираю все варианты кубика рубика в произвольном порядке. Могу сначала расставить уголки, потом ребра, могу по диагонали собирать, по слоям, зигзагами и т. п. Потому что больше не осталось никакой магии.
Такого рода вещи делаются для того, чтобы никто из экстремистов не имел повода для оправдания из-за того, что он якобы не знал, чем занимается организация, с которой он сотрудничает. Любая форма сотрудничества с иг является преступной, даже если человек не бомбы для них собирает, а всего-навсего стирает им белье. И напоминает об этом маленький дисклэймер, прилепившийся к названию. Поэтому имеет смысл упоминать о запрещенности, даже в тех случаях, когда закон к этому не обязывает.
А еще есть такой способ пропаганды, когда начинают упоминать террористов в положительном ключе. Типа: "А вы знаете, что главный террорист иг каждое утро делал гимнастику?" Требование к уточнению очень хорошо помогают противодействовать такому виду пропаганды: "А вы знаете, что главный террорист иг (запрещенная в РФ организация) каждое утро делал гимнастику?" Сразу возникает вопрос, почему нельзя было рассказать о миллионах других людей, которые делают гимнастику, но при этом их деятельность не запрещена в РФ.
Да, есть такие модели. И я, возможно, куплю себе M720. Но я очень не люблю возиться с батарейками, поэтому предпочитаю те модели, где можно подзаряжаться от USB. А все такие мыши почему-то имеют вот этот нелогичный элемент, который портит всю эргономику.
Logitech flow — нежизнеспособная технология. Обе машины, должны быть подключены к одной локальной сети, и там, и там должна быть одна операционная система с одинаковыми драйверами. Так не бывает. На одном рабочем столе ставят 2 машины не для того, чтобы они просто рядом стояли, а чтобы поднять на них разные окружения. Если на обеих машинах можно решать одни и те же задачи, то и переключаться между ними нет смысла.
Кто-нибудь может объяснить мне, почему у мышей Logitech переключатель между компьютерами находится снизу? В чем тут логика? Чтобы 2 мыши на столе не держать приходится покупать с переключателями. Но они так неудобно расположены, что иногда думаешь, что проще 2-ю купить, чем переключаться.
Основная фишка заключается в том, что вам не придется нигде писать
MyClass.getInstance("V1")
Потому что нигде в коде, кроме тестов и внутренних инициализирущих методов класса MyClass, использование значений констант типа "V1" не допускается. Этот код не пройдет ревью.
Это код на языке Java. Вы не можете написать MyClass.instances.get, потому что instances — приватное поле. В енуме оно тоже есть, и при отладке вы его даже посмотреть сможете.
Есть еще вариант с ConcurrentHashMap и putIfAbsent на лету для неизвестных значений, но это только для внутренних сервисов, которые не могут прислать пользовательские данные, иначе OOM можно словить.
public class MyClass {
private static final Map<String, MyClass> instances =
new HashMap<>();
private static final Logger logger =
LoggerFactory.getLogger(MyClass.class);
private static final MyClass FALLBACK;
static {
// Способы инициализации могут быть разными
// в зависимости от сложности алгоритма.
// Можно выкачать из базы,
// можно rest-сервис вызвать и т. п.
// В первой версии почти всегда сгодится хардкод.
// Можно комбинировать: часть значений
// захардкодить, часть откуда-нибудь закачать.
instances.put("V1", new MyClass("V1", ...));
instances.put("V2", new MyClass("V2", ...));
instances.put("V3", new MyClass("V3", ...));
instances.put("V4", new MyClass("V4", ...));
instances.put("V5", new MyClass("V5", ...));
FALLBACK = instances.get("V1"); // или что угодно
}
public static MyClass getInstance(String name) {
// Возможно, здесь будет ленивая инициализация
MyClass result = instances.get(name);
if (result != null) {
return result;
}
logger.warn("Получено неподдерживаемое имя {}",
name);
return FALLBACK; // или что-то посложнее
}
private MyClass(String name, ...) {
this.name = name;
// инициализация фич и других свойств
}
private final String name;
// Использовать имя в условиях if нельзя —
// только для отладки
// или в качестве ключа поиска.
// Это контролируется через ревью или хуки.
public String getName() {
return name;
}
private final boolean feature1;
// фичи и другие свойства с геттерами
}
У меня уже давно нет проблемы с NPE. Не знаю, где вы тут его увидели.
Енум в поле класса не лежит. Там, где у вас был енум, у меня мой собственный класс с фиксированным числом экземпляров, и все, что у вас было в енуме, у меня в моем классе тоже есть, кроме публичных констант. Поскольку между енумом и моим классом однозначное соответствие, то и лишнего слоя никакого нет.
Стримы и ФП использую вовсю без каких либо проблем. И даже енумы использую в тех случаях, когда это оправдано, например, для состояний конечного автомата.
Зато я знаю, что бывает, если делать так, как предлагаете вы, на периоде 5+ лет. Код будет выглядеть так:
18+
if (value == MyEnum.V1 || value == MyEnum.V2
|| value == MyEnum.V3) {
// кусочек кода фичи1
// кусочек кода фичи2
// кусочек кода фичи3
// кусочек кода фичи1
if (value != MyEnum.V3) {
// кусочек кода фичи2
}
}
if (value == MyEnum.V1 || value == MyEnum.V3
|| value == MyEnum.V2 || value == MyEnum.V5) {
// кусочек кода фичи4
// кусочек кода фичи2
// кусочек кода фичи3
// кусочек кода фичи1
if (value == MyEnum.V5) {
// кусочек кода фичи5
}
}
Попробуйте добавить в MyEnum значение V6 с фичами 1, 2, 4 и 6, при этом новая фича 6 должна выполняться так же и для V4, а для V3 пока нет, но известно, что через полгода фича 6 и для V3 тоже понадобится.
После просмотра вот этого ролика собираю все варианты кубика рубика в произвольном порядке. Могу сначала расставить уголки, потом ребра, могу по диагонали собирать, по слоям, зигзагами и т. п. Потому что больше не осталось никакой магии.
Интересно, в windows можно что-нибудь сделать без правой кнопки мыши?
Служебный и личный ноутбуки не могут быть подключены к одной локальной сети, поэтому в описанном вами случае эта технология не сработает.
Такого рода вещи делаются для того, чтобы никто из экстремистов не имел повода для оправдания из-за того, что он якобы не знал, чем занимается организация, с которой он сотрудничает. Любая форма сотрудничества с иг является преступной, даже если человек не бомбы для них собирает, а всего-навсего стирает им белье. И напоминает об этом маленький дисклэймер, прилепившийся к названию. Поэтому имеет смысл упоминать о запрещенности, даже в тех случаях, когда закон к этому не обязывает.
А еще есть такой способ пропаганды, когда начинают упоминать террористов в положительном ключе. Типа: "А вы знаете, что главный террорист иг каждое утро делал гимнастику?" Требование к уточнению очень хорошо помогают противодействовать такому виду пропаганды: "А вы знаете, что главный террорист иг (запрещенная в РФ организация) каждое утро делал гимнастику?" Сразу возникает вопрос, почему нельзя было рассказать о миллионах других людей, которые делают гимнастику, но при этом их деятельность не запрещена в РФ.
А как телеграм отличает террористов от мирных протестующих? Неужели их сообщения читает?
Не работает.
Да, есть такие модели. И я, возможно, куплю себе M720. Но я очень не люблю возиться с батарейками, поэтому предпочитаю те модели, где можно подзаряжаться от USB. А все такие мыши почему-то имеют вот этот нелогичный элемент, который портит всю эргономику.
Logitech flow — нежизнеспособная технология. Обе машины, должны быть подключены к одной локальной сети, и там, и там должна быть одна операционная система с одинаковыми драйверами. Так не бывает. На одном рабочем столе ставят 2 машины не для того, чтобы они просто рядом стояли, а чтобы поднять на них разные окружения. Если на обеих машинах можно решать одни и те же задачи, то и переключаться между ними нет смысла.
02/03/2019 в 95% случаев это 03 февраля или в 5% случаев 02 марта.
02.03.2019 в 100% случаев 02 марта. Потому что формата, допускающего 11.23.2019 ни в одной стране, к счастью, не придумали.
По точкам.
Разве вы не знаете, что тепло человеческих рук идет на зарядку Матрицы?
Кто-нибудь может объяснить мне, почему у мышей Logitech переключатель между компьютерами находится снизу? В чем тут логика? Чтобы 2 мыши на столе не держать приходится покупать с переключателями. Но они так неудобно расположены, что иногда думаешь, что проще 2-ю купить, чем переключаться.
Основная фишка заключается в том, что вам не придется нигде писать
Потому что нигде в коде, кроме тестов и внутренних инициализирущих методов класса MyClass, использование значений констант типа "V1" не допускается. Этот код не пройдет ревью.
Почему общество "Телепат" не предъявляет иск к обществу "Амедико" за то, что они их программой незаконно пользуются?
Нажимаете точку и получаете все методы, определенные в классе MyClass. Какой еще помощи вы ожидаете от IDE или от компилятора?
Это код на языке Java. Вы не можете написать MyClass.instances.get, потому что instances — приватное поле. В енуме оно тоже есть, и при отладке вы его даже посмотреть сможете.
Насчет switch практически все, что я о нем думаю, я написал в своей статье https://habr.com/en/post/312792/.
Это самый правильный код. Потому что его невозможно сломать.
Есть еще вариант с ConcurrentHashMap и putIfAbsent на лету для неизвестных значений, но это только для внутренних сервисов, которые не могут прислать пользовательские данные, иначе OOM можно словить.
У меня уже давно нет проблемы с NPE. Не знаю, где вы тут его увидели.
Енум в поле класса не лежит. Там, где у вас был енум, у меня мой собственный класс с фиксированным числом экземпляров, и все, что у вас было в енуме, у меня в моем классе тоже есть, кроме публичных констант. Поскольку между енумом и моим классом однозначное соответствие, то и лишнего слоя никакого нет.
Стримы и ФП использую вовсю без каких либо проблем. И даже енумы использую в тех случаях, когда это оправдано, например, для состояний конечного автомата.
Зато я знаю, что бывает, если делать так, как предлагаете вы, на периоде 5+ лет. Код будет выглядеть так:
Попробуйте добавить в MyEnum значение V6 с фичами 1, 2, 4 и 6, при этом новая фича 6 должна выполняться так же и для V4, а для V3 пока нет, но известно, что через полгода фича 6 и для V3 тоже понадобится.