หลีกเลี่ยง Long import lists โดยใช้ Wildcards ใน Java/Kotlin
การ import โดยใช้ wildcard คือ การย่อ import เช่น เมื่อเราต้องการที่จะใช้งานหลายๆ class ใน package เดียวกัน เราก็สามารถใช้ * เพื่อย่อให้เหลือบรรทัดเดียวได้
ตัวอย่าง
เมื่อเราต้องการจะ import หลายๆ class จาก package เดียวกัน เราจะเขียนแบบนี้
เราจะเห็นว่าเมื่อ import หลายๆ class ในไฟล์นั้นเยอะ เราก็เลยขี้เกียจหรืออยากจะย่อ หรือ IDE auto หรือบลาๆๆ ใส่ให้ ซึ่ง java หรือ kotlin ก็มี option ให้เราใช้งานโดยใช้ wildcard import (*) ซึ่งจะเป็นแบบนี้
Performance
ในส่วนของ compile-time performance ก็จะมีเพียงเล็กน้อย เนื่องจาก compiler จะทำการแปลง source code ไปเป็น bytecode files ก่อน
ตัวอย่างแรก ถ้ามีการใช้ wildcard import ดังตัวอย่างที่ 1 นั้นสิ่งที่เกิดขึ้นก็คือ compiler จะเห็นว่ามี Calendar ที่เราประกาศไว้ใน code และทำการไปค้นหาใน package ที่ทำการ import เข้ามา ถ้าเจอจะนำไป compile เมื่อทำการ compilation เสร็จ ก็จะไม่มีการแสดง import ใน bytecode นั้น
(1)
import java.util.*////.........val cal = Calendar.getInstance()..........
จึงเป็นสาเหตุ ถ้าเราใช้ wildcard import เวลา runtime จะไม่มีผลต่อ performance เลย
ตัวอย่างสอง ถ้ามีการ import แบบเจาะจง class ที่เราต้องการเลย compiler ก็จะไม่ต้องไปค้นหาใน package แล้ว compiler ก็จะนำไปไป compile เลย
(2)
import java.util.Calendar////.........val cal = Calendar.getInstance()..........
Readability
- อ่านง่าย รู้ว่า class ที่เราใช้ในมาจาก package ไหน
Ambiguities
- นำไปสู่ความไม่ชัดเจน เมื่อมี class ที่ชื่อเหมือนกับ package อื่นด้วย
ในบาง Project ก็จะมีการ check style ของ source code ก่อนที่จะทำการ build ซึ่งจะมี rule ในการ disallow wildcard imports
ถ้าใครที่ใช้ IntelliJ IDEA
- โดย default แล้ว IntelliJ IDEA จะทำการ convert Long import lists ไปเป็น wildcard imports เมื่อเห็นว่ามีการ 5 import statements ใน package เดียวกัน
- สามารถตั้งค่าได้โดย Preferences -> Editor -> Code Style -> Java (or Kotlin) ไปที่ tab imports
Reference :
หนังสือ Clean Code — Robert C. Martin
https://tharakamd-12.medium.com/is-it-bad-to-use-wildcard-imports-in-java-1b46a863b2be