Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

Switch-on-strings Java7 - архив переписки JSR 334

#java #строки #switch


Здравствуйте. Может ли мне кто-нибудь объяснить небольшой момент в переписки, касательно
критики и предложений данного нововведедения switch-on-strings в 7 пакете Жабы, в 334
coin project 334 JSR ?

процитирую: 

Now that we plan to have closures, do we still need strings-in-switch?
Won't a string-to-function map be about as fast (though maybe less
convenient)? I don't know what the use cases are for
strings-in-switch, but the feature already felt a bit low-benefit to
me, and seems even more so now with closures.


ссылка на источник

Что такое понятие closures, и почему в случае его реализации, задается вопрос, существует
ли необходимость в данной опции-свичире ?
Какая между ними связь, объясните для непонимающего.
И так же на счет вопроса не будет ли string-to-function map не менее быстрым.

Может кто небольшое введение сделать для понимания данного коммента ?
Буду благодарен. 
    


Ответы

Ответ 1



Могу ошибаться, но мне кажется, здесь речь идет о замыканиях, т.е. лямбдах. Пример, где switch может быть заменен лямбда-функцией. public static String caseOnString(String str) { switch (str) { case "hello": return "world"; case "bye": return "country"; default: return ""; } } public static String mapOnString(String str) { Function map = s -> { if (s.equals("hello")) return "world"; if (s.equals("bye")) return "country"; return ""; }; return map.apply(str); }

Ответ 2



Думаю, имели в виду следующее: если у нас есть переменная String str, то вместо switch (str) { case "one": System.out.println(1); break; case "two": System.out.println(2); break; default: System.out.println("?"); } предлагали писать что-то вроде такого (closures - это замыкания, а в случае java - лямбды, хоть они и не полноценные замыкания): Map switchMap = new HashMap<>(); switchMap.put("one", () -> System.out.println(1)); switchMap.put("two", () -> System.out.println(2)); switchMap.getOrDefault(str, () -> System.out.println("?")).run();

Комментариев нет:

Отправить комментарий