วันพฤหัสบดีที่ 5 มีนาคม พ.ศ. 2558

Java 8 : Streams & Functional Programming

    ในปัจจุบัน Java ก็ได้ Update มาเป็น Version 8 แล้ว แต่ในเมืองไทย องค์กรต่าง ๆ ก็ยังไม่สามารถ update ได้อย่างเต็มที่ เนื่องจาก Tool และ Library ต่าง ๆ ยังจำเป็นต้องคงไว้ เนื่องจาก หากมีการเปลี่ยน Version ไม่ว่าจะเป็น Java หรือ Library ต่าง ๆ จะมีผลกระทบต่อ Application ที่กำลังดำเนินการไปมากกว่าครึ่งทางแล้ว หรือ Application ที่ได้ทำการติดตั้งไว้แล้วกำลังดำเนินการช่วง Maintenance แต่หากเป็นไปได้ ใน Application ใหม่ ๆ ก็ เปลี่ยนไปสู่สิ่งที่ดีกว่ากันเถอะครับ ^^
    จริง ๆ แล้ว ใน Java Version 7 เองก็มีอะไรที่น่าสนใจเหมือนกัน แต่คงข้างมาเขียน 8 ก่อนเพราะมัน Wow กว่า ซึ่งที่ว่ามีอะไรใหม่ ๆ ที่น่าสนใจใน version นี้ก็ได้แก่ Collection และ Lambda
    มาลองดูตัวอย่าง Code ง่าย ๆ กันก่อน ว่าเราเห็นอะไรบ้าง ถ้าเรามีข้อมูลใน List ประมาณนี้
        List<String> s = new ArrayList<>();
        s.add("1");
        s.add("2");
        s.add("3");
    หากเราต้องการ ดูข้อมูลแต่ละรายการก็ต้องทำการวนข้อมูลเพื่อทำการดูข้อมูลทีละข้อมูล
        for(String a : s){
            System.out.println(a);
        }
    ต่อไป เป็นของ Java 8
        s.forEach(System.out::println);
    ตรงนี้จะเห็นว่ามี 2 ส่วนที่เสนอไปยังหัวเรื่องคือ
  1. Streams > forEach ที่เป็นความสามารถใหม่ของ Collection (จริง ๆ แล้วน่าจะบอกว่ามาจาก Iterable) ส่วนนี้จะทำหน้าที่ในการวนข้อมูลทีละรายการมาทำงาน
  2. Functional Programming ในนี้คือ a -> System.out.println(a) โดยส่วนแรกจะเป็น a คือ ตัวรับ parameter ส่วนที่อยู่หลังเครื่องหมาย -> คือ คำสั่ง
    จากตัวอย่างเล็ก ๆ ข้างต้น ความน่าสนใจมันอยู่ตรงนี้ครับ คือมันมีการลด code ในการทำ logic ที่ไม่จำเป็นต้องมีในทาง business ลงไป เพื่อตัดปัญหาในการเกิด error ที่ไม่จำเป็นขึ้นมา
    เรามาเริ่มทีละเรื่องกันดีกว่า เรื่องแรกขอเป็นไกล้ตัวก่อนเลยคือ Streams Stream นั้นเป็นตัวช่วยแสดงลำดับข้อมูล ของ Object ประเภท Iterator ซึ่งมีความสามารถในการทำรายการแบบขนานกันได้ ในการทำงาน Stream นั้นจะถูกสร้างจาก Collection
เราจะมาดูว่าเราใช้อะไรจาก Stream ได้บ้าง
  • For Each ส่วนแรกนี้เราได้เห็นตามตัวอย่างข้างบนแล้ว
  • Map/Filter/Reduce


  • ... ไว้แค่นี้ก่อนนะ เดี๋ยวไว้มาต่อ ...

    ไม่มีความคิดเห็น: