#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) { Functionmap = 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 - лямбды, хоть они и не полноценные замыкания): MapswitchMap = new HashMap<>(); switchMap.put("one", () -> System.out.println(1)); switchMap.put("two", () -> System.out.println(2)); switchMap.getOrDefault(str, () -> System.out.println("?")).run();
Комментариев нет:
Отправить комментарий