เขียน one-liner เพื่อการ set ค่า

เขียน one-liner เพื่อการ set ค่า

เขียนแล้วดูอ่านยาก แต่ก็ดูเป็นขั้นเป็นตอนดี code ดูสวย แต่อ่านยากจัง

Layer.setLayerId(
    Optional.ofNullable(getCellValueAsString(sheet, i, 1)) // 1. ห่อค่าด้วย Optional (ป้องกัน null)
            .filter(s -> s.matches("[0-9]+"))              // 2. กรองเอาเฉพาะค่าที่เป็นตัวเลข
            .map(Integer::parseInt)                           // 3. ถ้าผ่านเงื่อนไข แปลงเป็น Integer
            .orElse(0)                                        // 4. ถ้าไม่ผ่านเงื่อนไขใดๆ เลย ให้ใช้ค่า 0
);

เนื่องจากเราไม่อยาก จะเขียน code ในลักษณะข้างล่างนี้ (ถ้ามีค่าเดียวก็โอเค แต่ถ้าหลายค่าก็แย่หน่อย)

แต่มันก็ตรงไปตรงมาที่สุดแล้ว

// 1. ดึงค่าจากเซลล์มาเก็บในตัวแปรก่อน
String value = getCellValueAsString(sheet, i, 1);

// 2. ใช้ ternary operator เพื่อแปลงค่า
// ถ้า value เป็นตัวเลข ก็แปลงเป็น Integer, ถ้าไม่ใช่ ก็ให้เป็น 0
int layerId = (value != null && value.matches("[0-9]+")) ? Integer.parseInt(value) : 0;

// 3. กำหนดค่า ID
Layer.setLayerId(layerId);

เขียนแบบข้างล่างนี้ น่าจะง่ายที่สุด แต่ดันไปเรียกใช้งาน function 2 รอบ ถ้า function ซับซ้อน มันก็เสียเวลา ก็ดูแย่ไปหน่อย

// ⚠️ ไม่แนะนำ: เรียกฟังก์ชันซ้ำซ้อน
Layer.setLayerId(
    getCellValueAsString(sheet, i, 1).matches("[0-9]+") ? Integer.parseInt(getCellValueAsString(sheet, i, 1)) : 0
);

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *