Posts

[Java] JShell เครื่องมือใหม่ที่มาพร้อมกับ Java 9+

Image
JShell คืออะไร ? JShell ถือกำเนิดมาพร้อมกับ Java 9 (JDK 9) เป็นเครื่องมือใหม่สำหรับ Java Developer ที่ตามหลังชาวบ้านมาอีกตัวหนึ่ง JShell เป็นเครื่องมือที่ช่วยให้เราสามารถทดลองเขียน code แบบง่ายๆ ไม่ต้องมาสร้าง file / project ให้วุ่นวาย (แอบเล่าให้ฟังว่าเมื่อก่อนผมใช้เว็บเขียน java online เพื่อทำอะไรแบบนี้ เหอๆ)

          REPL (Read-Eval-Print-Loop) เป็นคำนิยามอย่างเป็นทางการของ JShell หรือจะพูดให้ง่ายก็คือ การเขียนโปรแกรมแบบมี interaction ได้ทันที ถ้ายังไม่เข้าใจอีก ไปลองเล่นกันเลยดีกว่า


เริ่มต้นเขียนโปรแกรมบน JShell ติดตั้ง JDK (version 9 ขึ้นไป)
* JShell จะอยู่ใน JAVA_HOME/bin ถ้าอยากใช้ง่ายๆ ก็เพิ่มทำ PATH เข้า environment varible ไว้เลย

เรียกใช้ jshell โดยรันคำสั่ง jshell
$ jshell | Welcome to JShell -- Version 11 | For an introduction type: /help intro jshell>
เมื่อเข้าสู่ jshell แล้ว เราก็สามารถเริ่มพิมพ์ code java ได้เลย
jshell> System.out.println("Hello World"); Hello World
หรือจะเขียน method
jshell> String say(String msg) { ...> System.out.println(…

บทวิเคราะห์ Lambda Expression ปลอมของ Java เปรียบเทียบกับภาษา Kotlin

ตั้งแต่ Java 8 ถูกปล่อยออกมา จนถึงวันนี้ Java 9, Java 10 ก็ออกกันแบบรัวๆ และยังมี Java 11 ที่บอกว่าจะเป็น LTS (Long-Term Support) มาจ่ออยู่อีก ถึงแม้ว่า Java จะเป็นภาษาอันดับ 1 (*อ้างอิงข้อมูลด้านล่าง) แต่ปัจจุบันภาษาใหม่ ๆ ก็ได้รับความนิยมอย่างรวดเร็ว ทำให้ Java ต้องพยายามปรับตัว และทำตัวลู่เข้าสู่ Functional Language อย่างที่หลายๆ ภาษาเป็น

          Lambda Expression เป็นหนึ่งใน syntax ที่ได้รับความนิยมสูง แต่สำหรับ Java เพิ่งมาใน Java 8 และสร้างความสับสนให้เหล่า Java Developer เจ้าเก่าพอสมควร ซึ่งผมเองก็เคยเขียนบล็อกไว้บ้าง (เขียน Lambda และใช้ syntax ใหม่ ๆทำความเข้าใจให้มากขึ้นกับ Lambda Expression)

Higher-Order Function           เป็นคุณสมบัติอย่างหนึ่งของ funtional language คือ ฟังก์ชันที่สามารถรับ parameter เป็นฟังก์ชันได้ หรือถ้าจะเรียกให้เข้าใจง่ายขึ้นมันก็คือ "Lambda Receiver" เพราะเวลาเรียกฟังก์ชันเพื่อใช้งาน เราสามารถส่ง lambda expression มาได้นั่นเอง จะเห็นว่าใน Java 8 ถึง Java 10 นั้นก็ยังไม่มี syntax ส่วนนี้โผล่มาให้ได้เขียนกัน
แล้วรับ parameter เ…

[Java] Spring Framework กับความสามารถ Dependency Injection

Image
"Spring" ประกอบด้วย Spring Projects มากมายให้เราได้เลือกใช้งาน ซึ่งการที่จะพูดว่า "ใช้ Spring" คงจะแคบเกินไปแล้ว ซึ่งในส่วนของโพสนี้ก็จะเล่าถึง Spring Framework ที่เกี่ยวข้องในการทำ Web Application แบบง่ายๆ กันครับ

          เราสามารถเริ่มต้น Web Application Project ที่ใช้ Spring Boot ได้ง่ายๆ ถ้ายังไม่รู้จักแนะนำให้ไปทำความรู้จักกันก่อนครับ >> รู้จัก Spring Boot ฉบับมือใหม่
Dependency Injection           สิ่งที่ยิ่งใหญ่ที่สุดของ Spring คือเรื่องความสามารถในการทำ dependency injection (DI) ซึ่ง DI นี้เองที่จะสามารถเชื่อมโยง spring framework ต่างๆ เข้าด้วยกัน และมีประโยชน์อย่างมากในการออกแบบ architecture ของ project
@AutowiredAutowired เป็น annotation ที่ทำให้เราสามารถ 'Inject' object ขึ้นมาใช้งานได้ โดย object ดังกล่าวจะต้องถูกประกาศไว้ก่อนหน้า และเป็น object ที่มีความเป็น Spring หรือมีชื่ออย่างเป็นทางการว่า "Spring Bean"

Spring Bean คือ class ที่ถูกเพิ่มความสามารถเข้าไป โดยมีคุณสมบัติรองรับ DI ซึ่งมีวิธีที่จะได้มาซึ่งความสามารถนี้มี 3 วิธี คือ

[Java] รู้จัก Spring Boot ฉบับมือใหม่

Image
Spring Boot หน้าที่หลักๆ คือจัดเตรียมโปรเจคให้เรามี library ที่เกี่ยวข้องอย่างครบครัน และมี embedded application server ติดมาให้ เป็นประโยชน์ในการ test มากๆๆ

Spring Initializr เหมาะสำหรับผู้เริ่มต้นโปรเจค Spring Boot เป็นเว็บไซต์ที่จะช่วยสร้างโปรเจคอย่างง่ายขึ้นมา โดยจะต้อง download มาเป็น *.zip หรือในบาง editor ก็สามารถสร้างโปรเจคในลักษณะเดียวกันได้เลย(ไม่ต้องผ่านเว็บก็ได้) ในเคสนี้ผมลองสร้างผ่านเว็บครับ เอาแบบ clean สุดๆ ไม่ได้ใส่อะไรเพิ่มเลยนะครับ


โหลดมาแล้วจะเห็นว่าเป็น maven project ตามที่ได้เลือกไว้ และนี่คือสิ่งที่ maven dependency ดูดมาให้เรา
mvn dependency:tree[INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ SpringBoot2Tutorial --- [INFO] th.in.lordgift:SpringBoot2Tutorial:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:5.0.4.RELEASE:compile [INFO] | | +- org.springframe…

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

Image
Push Notification           Push Notification หรือ การแจ้งเตือน คือ การที่แอปพลิเคชันนำข้อมูลมาแสดงในแถบแจ้งเตือนของระบบปฏิบัติการนั้นๆ กำหนด ไม่ว่าจะเป็น Mobile(iOS, Android) หรือ Computer ทั่วไปซึ่ง modern browser ในปัจจุบันก็สามารถแสดงแถบแจ้งเตือนได้แล้ว


          เราสามารถแบ่งการแจ้งเตือนออกเป็น 2 แบบ ดังนี้
Local Notification            คือ การที่ app. แสดง notification เอง ไม่มีอะไรเกี่ยวข้องกับ server ใดๆ ปกติแล้วจะแยกได้อีก 2 แบบย่อย คือ แจ้งเตือนตามเวลาที่กำหนด และแจ้งเตือนเป็นรอบๆ เช่น แอปนาฬิกาปลุก แอปแจ้งเตือนนัดหมาย เป็นต้น

Remote Notification            คือ การที่ app. รับข้อมูลมาจาก server แบบไม่จำเป็นต้อง request ไปก่อน ตัวอย่างที่ยกมาได้ชัดที่สุดคงหนีไม่พ้น โปรแกรมแชท ต่างๆ ของเครื่องเรานี่แหละครับ

เมื่อเราส่งข้อความไปหาเพื่อน

          สิ่งที่คนทั่วไปเข้าใจ...

          สิ่งที่ developer ควรรู้

          จะเห็นว่า จริงๆ แล้ว mobile จะต้องเรียกไปที่ server เพื่อให้ server เป็นตัวจัดการข้อมูลก่อน จากนั้นก็ส่งของไปให้ push server เป็นตัวจัดการส่งไปที่เครื่องปลายทาง ซึ…

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering ผ่าน Maven

การสร้าง Hibernate Entity ผ่าน Eclipse (สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering) นั้นอาจจะดูยุ่งยาก เพราะมีขั้นตอนค่อนข้างเยอะ อีกทั้งยังไม่สามารถ share code ร่วมกัน หรือจะเก็บไว้ใช้ในโปรเจคอื่นก็ลำบาก โพสนี้ผมจะมาแชร์วิธีการที่สะดวกมากขึ้น เพราะเราจะ generated Entity ด้วย maven กัน

          Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก(Maven Plugin) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก (Wildfly Maven Plugin) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน (Maven WAR Plugin) เป็นต้น

          สำหรับโพสนี้เราจะมาใช้ Maven AntRun Plugin สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน

ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน่ใจก่อนว่ารู้จั…

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering

Image
Hibernate ประกอบด้วยหลายส่วน ซึ่งผมได้เขียนไว้แล้วก่อนหน้านี้ (รู้จัก OR-Mapping และ Hibernate เบื้องต้น) ในโพสนี้เราจะมาสร้าง ORM ภาคปฏิบัติกัน **คำเตือน ภาพประกอบเยอะมาก**

          การ mapping ระหว่าง database กับ class นั้น เรารู้แล้วว่า Entity Class เป็นตัวกลางที่ตอบโจทย์การใช้งาน การที่เราจะสร้าง Entity Class ได้นั้น เราต้องรู้โครงสร้าง database ก่อน ซึ่งเราสามารถตั้งค่า connection และ generated Entity Class โดยอัตโนมัติได้ โดยวิธีการดังกล่าวเรียกว่าวิธีการทำ..

"Hibernate Reverse Engineering"
          Hibernate Reverse Engineering ยังมีหัวใจสำคัญอีกอย่างหนึ่งคือ การทำ Type Mapping เพื่อกำหนดว่าถ้าเจอ Database data type ต้องแปลงเป็น Java data type อะไร

Eclipse ยังคงเป็น editor ที่มีเครื่องมือในการสร้าง Hibernate Entity Class ที่ดีตัวหนึ่งอยู่ ถึงแม้ว่าตอนนี้ผมแทบจะหนีไปใช้ editor จากค่าย  JetBrains ถึงแม้ว่า IntelliJ IDEA สามารถสร้าง Entity Class ได้เช่นกัน แต่ปัญหาคือ Mapped Type จะถูกกำหนดไว้แล้ว (default) ซึ่งบางครั้งเราอาจไม่ได้ต้องการ type ข้างต…

Facebook Comment