Semicolonless Java å ¥é
ãã㯠coins Advent Calendar 11æ¥ç®ã®è¨äºã§ãã
10æ¥ç®ã®è¨äºã¯ 自炊しろITF.生 - 気合でなんとか ã§ãã
å¤é£ãæé«ãªãã§ãããèªçã®è¯ãã¨ããã¯ãã¾ã«ããããç¾å³ãããã®ãåºæ¥ä¸ãã£ã¦ãã¾ããã¨ãããã¨ãããã¨ã§ããã
å¤åèªçãã¦ã人ã¯çµé¨ããã¨æãã¾ããã§ããå³ä»ãé£ããã
空ãã¦ãã®ã§2è¨äºç®ãæ¸ããã¨ã«ãã¾ããã
ã¨ããã§ãããªãã¯Javaã§ã¯çµ¶å¯¾ã»ãã³ãã³ãæ¸ããªããã°ãããªãã¨æã£ã¦ãã¾ãããï¼
ããããããªå¿ è¦ã¯ããã¾ããã
ä»æ¥ã¯ ããªãã«Semicolonless Javaã®ä¸çãç´¹ä»ãã¾ãã
Semicolonless Javaã®ã«ã¼ã«
ã»ãã³ãã³ãç¨ãã¦ã¯ãããªã
ã¦ãã³ã¼ãã¨ã¹ã±ã¼ãã¯ä¸å¯
Java SEã®æ¨æºAPIã ãã使ã
Semicolonless Java 2012 - プログラマーの脳みそ
ç°¡åã§ããã
Hello, World!
Java8æ代ã®Semicolonless Javaã§Hello, World!ãå®è¡ããã«ã¯å¹¾ã¤ãæ¹æ³ãããã¾ãããä»åã¯2ã¤ç´¹ä»ãã¾ãã
if (java.util.concurrent.Executors.callable(() -> System.out.println("Hello, World!")).call() == null) {}
1ã¤ç®
1ã¤ç®ã¯ifæ㨠java.util.concurent.Executors.callable
ã®åããæã§ãã
ifæã®æ¡ä»¶å¼ã®ä¸ã§ã¡ã½ãããå¼ã³åºãããã®æ»ãå¤ã¨ä½ããã®å¤ã¨ãæ¯è¼ããææ³ã¯Semicolonless Javaã§ã¯æãã使ããã¦ããå®çªçãªææ³ã§ãã
ãããã java.io.PrintStream#println
ã®æ»ãå¤ã¯ void
ãªãããä½ããã®å¤ã¨æ¯è¼ã§ããããã®ææ³ã¯å©ç¨ã§ãã¾ããã
ããã§ãExecutors.callable
ã®åºçªã§ãã callable
ã« Hello, World! ãæ¨æºåºåã«åºåãã Runnable
ã渡ã㦠Callable<Object>
ãªãã¸ã§ã¯ããçæãã Callable#call
ã§æ¸¡ãã Runnable
ãå®è¡ãã¾ãã
Callable#call
㯠Runnable
ã®å®è¡å¾ã«ãã®çµæãèªèº«ã®ãªãã¸ã§ã¯ãã®åãã©ã¡ã¼ã¿ã§è¿ãã¾ããããã§ã¯ Callable
ã®åãã©ã¡ã¼ã¿ã¯ Object
ãªã®ã§æ»ãå¤ã¯ Object
åã®ãªãã¸ã§ã¯ãã¨ãªãã¾ããã
Executors.callable
ã®æ»ãå¤ Callable
ãªãã¸ã§ã¯ã㯠null
ãè¿ãå®è£
ã«ãªã£ã¦ãã¾ãã
2ã¤ç®
try (java.util.stream.Stream s = Stream.of().onClose(() -> System.out.println("Hello, World!"))) {}
2ã¤ç®ã¯ try-with-resources
æ㨠BaseStream#onClose
ã®åããæã§ãã
try-with-resources
æã¯ã宣è¨ãããªã½ã¼ã¹( AutoClosable
ãå®è£
ãã¦ããã¯ã©ã¹ã®ãªãã¸ã§ã¯ã)ãtryæãçµäºãããèªåã§éãããã¤ã¾ã AutoClosable#close
ãå¼ã³åºãã¨ãããã®ã§ãã
Stream
ã®ã¹ã¼ãã¼ã¯ã©ã¹ã§ãã BaseStream
㯠AutoClosable
ãå®è£
ãã¦ãã¦ã BaseStream#close
ãå¼ã³åºãããæã«ã BaseStream#onClose
ã§å¼ã渡ãã Runnable
ãå®è¡ãã¾ãã
å¤æ°å®£è¨
Java8以åã®Semicolonless Javaã§ã¯å¤æ°å®£è¨ã«æ¡å¼µforæãç¨ãããã¦ãã¾ããããJava8ã§ã¯ Stream
㨠Stream#peek
ã®åããæãç¨ãããã¨ãããã¾ãã
if (Stream.of("James").peek(firstName -> Stream.of("Gosling").forEach(lastName -> System.out.println(firstName + " " + lastName))).toArray() == null ) {}
ã¾ããä½ããã®æ¹æ³ã§å®£è¨ãããå¤æ°ã®å¤ãæã¤ãä¸ã¤ããå¤ãæããªãStreamãä½ãã¾ãã Stream.of
ãå©ç¨ããã¨ç°¡åã« Stream
ãä½ãã¾ããã
ãã¦ããã® Stream
ã«å¯¾ã㦠Stream#forEach
ãå¼ãã§ããã®ä¸ã§å¤æ°ãå©ç¨ãããã¨ããã§ããã Stream#forEach
ã®æ»ãå¤ã¯ void
ã§ããåè¿°ã®voidãåé¿ããææ³ãç¨ãã¦ãè¯ãã®ã§ãããä»å㯠Stream#peek
ã使ãã¾ãã
Stream#peek
㯠Stream
ããã®ã¾ã¾è¿ãã¾ããã Stream
ã®åè¦ç´ ã«å¯¾ãã¦ãå¼æ°ã¨ãã¦æ¸¡ããéå¹²æ¸ã¢ã¯ã·ã§ã³ãå®è¡ãã¾ãã主ã«ãããã°ç¨éã§å©ç¨ããã¾ãããä»åã¯ãããæªç¨å©ç¨ãã¾ããã
ã¨ããã§ã©ã ãå¼ã§ã¯æããããã¯ãç¨ãã1è¡ã ãæ¸ãå ´åã«éããã»ãã³ãã³ãçç¥ãããã¨ãã§ãã¾ããã¤ã¾ãããã®ä¸ã§ã¯ä»»æã®ã¡ã½ãããå¼ã¶ãã¨ãã§ããããã§ããä»åã¯ããä¸ã¤å¤æ°ã宣è¨ãã¦ã Stream#forEach
ã§ããã2ã¤ã®å¤æ°ãå©ç¨ãã¦ãã¾ãã
Fizz Buzz
ãã¦ãå ¥éè¨äºã¨ãããã¨ã§ãFizz Buzz*1ã¾ã§ããã¾ãããã
if (java.util.stream.IntStream.rangeClosed(0, 100) .mapToObj(n -> n % 15 == 0 ? "FizzBuzz" : n % 3 == 0 ? "Fizz" : n % 5 == 0 ? "Buzz" : String.valueOf(n)) .peek(System.out::println) .toArray() == null) { }
ã¾ãã IntStream.rangeClosed
ã§0ãã100ã¾ã§ã® Integer
åã® Stream
ãçæãã¾ãã
次ã«ã Stream#mapToObj
ãå©ç¨ãã¦ããã®åè¦ç´ ã3é
æ¼ç®åãç¨ããé©å㪠String
ãªãã¸ã§ã¯ãã«å¤æãã¾ãã
ããã¦ã Stream#peek
ãå¼ã³åºãã¦æ¨æºåºåã«åºåããæå¾ã«å
è¿°ããææ³ãç¨ãã¦ã»ãã³ãã³ãæé¤ãã³ã¼ããå®è¡ãã¾ãã
ç°¡åã§ããã
Java 8ã«ãªã£ã¦ããSemicolonless Javaãã¨ã¦ãç°¡åã«ãªã£ã¦ãã¾ãã¾ããããªã®ã§ãJava 7以ä¸ç¸ãã¨ããã©ãã©ãç¸ãããã¤ããã¦ããã¨è¯ãã¨æãã¾ãã
åèã¾ã§ã«ãæJava 7ã§Semicolonless Javaå ¥éããã¨ãã®ã³ã¼ããè²¼ã£ã¦ããã¾ãã
縦書き俳句プログラミング in Semicolonless Java. · GitHub
Java 9æ代ã®Semicolonless Java
$ jshell
jshell> System.out.println("Hello, World!")
Hello, World!
ãªãã§ãï¼