วันศุกร์ที่ 28 มกราคม พ.ศ. 2565

Code duplication

กลับมาดูโค้ดตัวเอง แล้วก็ตะลึงกับโค้ดที่เขียนซ้ำกันเยอะแยะมาก ลักษณะท่าทางมันก็จะประมาณนี้ 

private void ControllerRaycast(Vector3 origin, Quaternion rot) {
    RaycastHit hit;
    if (Physics.Raycast(origin, rot * Vector3.forward, out hit, 100f, culling))
        // blah
    if (Physics.Raycast(origin, rot * Vector3.forward, out hit, 100f, layerMask)) {
        // blah
    }
}

อันที่จริงรู้สึกว่าจะ concern เรื่อง method ซ้ำมานานแล้ว แต่จำไม่ได้ว่าทำไมตอนนั้นไม่ทำ interface มาให้ class อื่น implement กัน แต่คงเป็นเพราะว่ามี method ชื่อเดียวกันนี้แหละ อันนึงมันรับ argument ไม่เหมือนพวก

วันนี้ก็จัดการรื้อซะเลย ทำ interface มาแล้วก็ implement interface นี้ซะ

ส่วนเรื่อง argument ไม่เหมือนกันก็แยกเป็น 2 interface ไปก่อน คิดว่าไม่ดีเท่าไหร่หรอก แต่ด้วย context มันต่างกันก็พอรับได้มั้ง จะเอามาใส่ใน interface เดียวกันก็แปลกๆที่เวลาจะใช้จะเลือกใช้แค่ method เดียวเท่านั้น

ก็จะได้ประมาณนี้

/// <summary>
/// A simple controller raycast
/// </summary>
public interface IController {
    public void ControllerRaycast(InputDevice device);
}

/// <summary>
/// Yet another simple controller raycast with line renderer
/// </summary>
public interface IRayController {
    public void ControllerRaycast(InputDevice device, LineRenderer line);
}

แต่ท้ายที่สุดแล้วอยากทำเป็น callback มากกว่า ทำการ raycast ครั้งเดียว แล้วก็เรียก callback เอา

ถ้ามีเวลาก็จะมารื้อกันอีกรอบ 😂

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

แสดงความคิดเห็น

Logical operator!!!

พอดีว่าผมต้องทำ method GetDown เอาไว้ใช้เอง เพราะว่าหาใน doc แล้วมันไม่เจอ มีแต่ get value แบบต่อเนื่อง frame by frame หลักการของมันก็คือจะ ...