Ютуб удалил прошлый комментарий (из-за кода на Си или из-за ссылки на фрагмент в ролике непонятно). Пишу второй раз. На слайде в ролике на 19:50 минуте приводится пример с кодом на Си с применением оператора "запятая", а далее какой-то страшный листинг кода на Java, который якобы его повторяет. Очень может быть это и так, но я попробовал переписать это используя механизмы функционального программирования в Java (Supplier'ы). Также мне пришлось обернуть в класс Box значение bonus, т.к. при передаче по ссылке в метод значение не изменится для ссылок, примитивов и финализированных объектов, типа Long, Integer, String и т.д. Зато, при передаче внутрь метода упаковки можно изменить значение в её поле, если конечно не используется структуры, типа record. Получился код примерно такого вида: private static int counter = 0; public static void main(String[] args) { int bonus = RandomGenerator.getDefault().nextInt(0, 100); int age = RandomGenerator.getDefault().nextInt(0, 15); System.out.printf(">>> bonus = %d, age = %d", bonus, age); Box box = new Box(bonus); boolean result = calc(() -> box.bonus += 10, () -> age > 10) || calc(() -> box.bonus += 20, () -> age > 5) || calc(() -> box.bonus += 40, () -> age > 2) || calc(() -> box.bonus += 100, () -> true); bonus = box.bonus; System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age); } static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) { counter++; System.out.printf("Вызвали %d-й раз ", counter); supplier.get(); return booleanSupplier.getAsBoolean(); } Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно?
Глянул на код с "запятой" из Си (на ruclips.net/video/mHeYf4tk9Pg/видео.html) и попробовал его тупо в лоб сделать на Java, пришлось правда применить обертку в виде класса Box с полем bonus + метод calc, который возвращает boolean значение с двумя входящими параметрами в виде обычного Supplier и BooleanSupplier. Получилось примерно вот так: public static void main(String[] args) { int bonus = 20; int age = 2; Box box = new Box(bonus); boolean result = calc(() -> box.bonus += 10, () -> age > 10) || calc(() -> box.bonus += 20, () -> age > 5) || calc(() -> box.bonus += 40, () -> age > 2) || calc(() -> box.bonus += 100, () -> true); bonus = box.bonus; System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age); } static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) { supplier.get(); return booleanSupplier.getAsBoolean(); } Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно? Проверил работу с Си-шной реализацией и вроде всё отрабатывает одинаково: #include #include #include int main() { int bonus = 20; int age = 2; bool result = (bonus+=10, age > 10) || (bonus+=20, age > 5) || (bonus+=40, age > 2)|| (bonus+=100, true); printf("result = %s, bonus = %d", result ? "true" : "false", bonus); return 0; }
Доклад хороший, но, замечу, что мы - слушатели, говорю за своё окружение, кликбэйтные не отражающие содержания названия докладов не одобряем вообще никак.
Если уж такую телегу и разгонять, то уже лучше про шарпы рассказывать, а не джаву. При сильном желании и сову на глобус натянуть можно. В принципе как развлечение может и ок, но смысла перегонять такие проекты именно на жава ваще смысла не вижу. Не зря тот же юнити с шарпами, а анриал с плюсами. Имхо...
Что хорошего в шарпе? У него нет виртуальных потоков, нет ADT и паттерн матчинга с полнотой по ним же, нет всей полноты мощности дженериков жавы, да даже прокси объекты там нельзя создать не из интерфейсов. Плюс вм жавы >>>> шарпа.
Не представляю что испытали люди в зале, когда увидели на слайдах слово Ява. Мне в записи это читать неприятно. Можно было легко обойтись без этого дурновкусия. Не хочу делать преждевременных выводов, но для меня это признак того что конференция скатилась. После известных событий заметно что организаторы стараются заменить пропавших спикеров другими, не менее интересными. Раньше доклады были про Java, а не про Яву и более интересные.
какой душный комментарий я по работе говорю в основном по английски и то меня это не парит. я каких только кривых произношений названий языка не слышал, особенно шведы отличаются со своей "йОва".
Её и сами джависты нет нет да и называют явой, не раз слышал. И вообще тупые попытки клеить ярлычки, как в притче про мудреца, палец и луну... как это на наполнение доклада и конференции повлияло... да никак почти.
Я сам разработчик С++ и меня тоже очень часто смущают, когда люди считают, что язык С++ сильно отличается от других ЯП, той же джавы. Вообще не вижу смысла, зачем что-то писать на джаве или C#, когда можно столь же легко и безопасно написать на С++. Почему некоторые люди упорно пытаются доказывать, что С++ - прошлый век, когда я бы сказал, что всё в точности до наоборот, в С++ у тебя никаких дополнительных абстракций в виде ява-машины нет, и поэтому код выполняется гораздо проще и производительней, а главное, что если следовать паттернам джавы, то никаких проблем с безопасностью не возникает, просто не нужно использовать низкоуровневые вещи (типа оператора new/delete), если вы не пишете что-то супер низкоуровневое с требованием к производительности и где вы бы и так без C++ не обошлись.
@@alekseylebedev6278 У С++ проблем не больше чем у других языков, тут скорее от разработчика зависит, чтобы он не лез под капот языка и не использовал, то, что для него не делали (new, delete, raw-pointers, etc), а использовал то, что общепринято использовать.
Может нужно сначала реально иметь серьёзный опыт реальной разработки в других языках перед таким высказыванием? Прошлый не прошлый век плевать, но плюсы имеют ряд своих проблем удорожающих разработку, иначе бы со столь мощной историей и багажом от фреймов до стандартов на которые многие как минимум смотрели при создании других ЯП бы правил половиной мира.
С Java вообще странное сравнение, там макака(условно) парой кликов(почти буквально) в IDE может даже не написать, а уже поднять и настроить шаблонный кубернетис с флотом микро-сервисов от базы, шины сообщений, бэком со всеми слоями и системой тестирования, и т.д. Может я отстал и такое есть в C++?
@@alws2532 Возможно вы действительно не осведомлены в современных IDE, т.к. тоже самое делается и для С++ и для Python. Но это же всё кодогенерация и она не делает того, что реально нужно заказчику, поэтому и нужны программисты, а в большинстве случаев вообще приходится работать существующим проектом, а не писать новый, и тогда кодогенерация почти не пригождается, разве что классы генерировать.
Отличный доклад! Матерый опытный специалист! Побольше бы подобного.
Ютуб удалил прошлый комментарий (из-за кода на Си или из-за ссылки на фрагмент в ролике непонятно). Пишу второй раз. На слайде в ролике на 19:50 минуте приводится пример с кодом на Си с применением оператора "запятая", а далее какой-то страшный листинг кода на Java, который якобы его повторяет. Очень может быть это и так, но я попробовал переписать это используя механизмы функционального программирования в Java (Supplier'ы). Также мне пришлось обернуть в класс Box значение bonus, т.к. при передаче по ссылке в метод значение не изменится для ссылок, примитивов и финализированных объектов, типа Long, Integer, String и т.д. Зато, при передаче внутрь метода упаковки можно изменить значение в её поле, если конечно не используется структуры, типа record.
Получился код примерно такого вида:
private static int counter = 0;
public static void main(String[] args) {
int bonus = RandomGenerator.getDefault().nextInt(0, 100);
int age = RandomGenerator.getDefault().nextInt(0, 15);
System.out.printf(">>> bonus = %d, age = %d", bonus, age);
Box box = new Box(bonus);
boolean result = calc(() -> box.bonus += 10, () -> age > 10) ||
calc(() -> box.bonus += 20, () -> age > 5) ||
calc(() -> box.bonus += 40, () -> age > 2) ||
calc(() -> box.bonus += 100, () -> true);
bonus = box.bonus;
System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age);
}
static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) {
counter++;
System.out.printf("Вызвали %d-й раз
", counter);
supplier.get();
return booleanSupplier.getAsBoolean();
}
Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно?
за ttd отдельный лайк, было очень интересно. спасибо
Очень круто) Куча новых для меня крутых мыслей)
Короче можно вставить вместо "Явы" любой другой язык с СИ подобным синтаксисом и доклад ничуть не поменяется.
Не любой, а хотя бы язык с имеющимся бэком на популярную виртуалку.
Java разве не компилируемый язык?
Глянул на код с "запятой" из Си (на ruclips.net/video/mHeYf4tk9Pg/видео.html) и попробовал его тупо в лоб сделать на Java, пришлось правда применить обертку в виде класса Box с полем bonus + метод calc, который возвращает boolean значение с двумя входящими параметрами в виде обычного Supplier и BooleanSupplier. Получилось примерно вот так:
public static void main(String[] args) {
int bonus = 20;
int age = 2;
Box box = new Box(bonus);
boolean result = calc(() -> box.bonus += 10, () -> age > 10) ||
calc(() -> box.bonus += 20, () -> age > 5) ||
calc(() -> box.bonus += 40, () -> age > 2) ||
calc(() -> box.bonus += 100, () -> true);
bonus = box.bonus;
System.out.printf(">>>>> box = %s, result = %b, new bonus = %d, age = %d", box, result, bonus, age);
}
static boolean calc(Supplier supplier, BooleanSupplier booleanSupplier) {
supplier.get();
return booleanSupplier.getAsBoolean();
}
Из минусов - лишний класс Box + анонимные классы спрятанные внутри лямбды, зато код получился максимально близким именно к оригиналу. А не такой, как в следующем слайде. Так, что даже на Java можно с некоторыми оговорками написать как в опереторе "запятая" из Си. Но вопрос надо ли оно?
Проверил работу с Си-шной реализацией и вроде всё отрабатывает одинаково:
#include
#include
#include
int main()
{
int bonus = 20;
int age = 2;
bool result = (bonus+=10, age > 10) ||
(bonus+=20, age > 5) ||
(bonus+=40, age > 2)||
(bonus+=100, true);
printf("result = %s, bonus = %d", result ? "true" : "false", bonus);
return 0;
}
Крутой человек! Больше всего удивил тот факт, что он перенес работу с указателями просто на массивы.
Отличный доклад! Хочется побольше такого)
Доклад хороший, но, замечу, что мы - слушатели, говорю за своё окружение, кликбэйтные не отражающие содержания названия докладов не одобряем вообще никак.
Если уж такую телегу и разгонять, то уже лучше про шарпы рассказывать, а не джаву. При сильном желании и сову на глобус натянуть можно. В принципе как развлечение может и ок, но смысла перегонять такие проекты именно на жава ваще смысла не вижу. Не зря тот же юнити с шарпами, а анриал с плюсами. Имхо...
Что хорошего в шарпе? У него нет виртуальных потоков, нет ADT и паттерн матчинга с полнотой по ним же, нет всей полноты мощности дженериков жавы, да даже прокси объекты там нельзя создать не из интерфейсов.
Плюс вм жавы >>>> шарпа.
мощный чувак
Люди, которые называют java явой, должны называть jazz яз
а остров в индонезии как называют?
Не представляю что испытали люди в зале, когда увидели на слайдах слово Ява. Мне в записи это читать неприятно. Можно было легко обойтись без этого дурновкусия. Не хочу делать преждевременных выводов, но для меня это признак того что конференция скатилась. После известных событий заметно что организаторы стараются заменить пропавших спикеров другими, не менее интересными. Раньше доклады были про Java, а не про Яву и более интересные.
какой душный комментарий
я по работе говорю в основном по английски и то меня это не парит. я каких только кривых произношений названий языка не слышал, особенно шведы отличаются со своей "йОва".
даже если он будет говорить Джабба вместо Джавы это не умаляет того, насколько грамотный доклад и сколько человек положил труда для этого
Её и сами джависты нет нет да и называют явой, не раз слышал. И вообще тупые попытки клеить ярлычки, как в притче про мудреца, палец и луну... как это на наполнение доклада и конференции повлияло... да никак почти.
@@alws2532 13 лет пишу на яве, сейчас на котлине, никогда не парился говорить ява джава, какая разница.
I agree. Why are people even trying to watch conferences where speakers are talking in Russian?
Я сам разработчик С++ и меня тоже очень часто смущают, когда люди считают, что язык С++ сильно отличается от других ЯП, той же джавы. Вообще не вижу смысла, зачем что-то писать на джаве или C#, когда можно столь же легко и безопасно написать на С++. Почему некоторые люди упорно пытаются доказывать, что С++ - прошлый век, когда я бы сказал, что всё в точности до наоборот, в С++ у тебя никаких дополнительных абстракций в виде ява-машины нет, и поэтому код выполняется гораздо проще и производительней, а главное, что если следовать паттернам джавы, то никаких проблем с безопасностью не возникает, просто не нужно использовать низкоуровневые вещи (типа оператора new/delete), если вы не пишете что-то супер низкоуровневое с требованием к производительности и где вы бы и так без C++ не обошлись.
Потому что людям нужно решать проблемы бизнеса здесь и сейчас, а не проблемы С++.
@@alekseylebedev6278 У С++ проблем не больше чем у других языков, тут скорее от разработчика зависит, чтобы он не лез под капот языка и не использовал, то, что для него не делали (new, delete, raw-pointers, etc), а использовал то, что общепринято использовать.
Может нужно сначала реально иметь серьёзный опыт реальной разработки в других языках перед таким высказыванием? Прошлый не прошлый век плевать, но плюсы имеют ряд своих проблем удорожающих разработку, иначе бы со столь мощной историей и багажом от фреймов до стандартов на которые многие как минимум смотрели при создании других ЯП бы правил половиной мира.
С Java вообще странное сравнение, там макака(условно) парой кликов(почти буквально) в IDE может даже не написать, а уже поднять и настроить шаблонный кубернетис с флотом микро-сервисов от базы, шины сообщений, бэком со всеми слоями и системой тестирования, и т.д. Может я отстал и такое есть в C++?
@@alws2532 Возможно вы действительно не осведомлены в современных IDE, т.к. тоже самое делается и для С++ и для Python. Но это же всё кодогенерация и она не делает того, что реально нужно заказчику, поэтому и нужны программисты, а в большинстве случаев вообще приходится работать существующим проектом, а не писать новый, и тогда кодогенерация почти не пригождается, разве что классы генерировать.
С - си,
Java - джава....нет бл "ява"
Самоходный кринж и бедные слушатели в зале
Открой окно душнила, у меня аж монитор от тебя запотел.
за ttd отдельный лайк, было очень интересно. спасибо