partially coding
posted on 10 Oct 2005 17:47 by tidno1 in csharp-and-dotnetปกติแล้วเวลาเราเขียน method อะไรขึ้นมาเราก็มักจะสร้างมันจาก class diagram ที่มีคนออกแบบมาให้ หรือหากเราทำการ design class เอง แล้วก็สร้าง method ที่จำเป็นไว้ เราก็มักจะเขียนแค่ implementation ไว้ก่อน ถ้าเป็น non-void method เราก็มักจะเขียนประโยค return พร้อมค่าส่งกลับอะไรซักค่า เช่น 0 หรือ null เพื่อให้มันแค่ compile ผ่าน
return 0;
}
return null;
}
แต่ว่าถ้าเราเขียน method เยอะ ๆ แล้วลืมทำให้เสร็จ แล้วถ้ายิ่งเรายุบ(folding) นั้นไว้ด้วย พอเรา coding ไปซักพักจนเกือบเสร็จ เราก็มักจะเทสต์โปรแกรมของเรา แล้วถ้ามันเกิดผ่านขึ้นมา ก็จะปล่อยมันไปจนลืมว่าเรายัง implement ไม่ครบ
จริง ๆ แล้วเรามักจะไม่ลืมอะไรติงต๊องขนาดนั้นหรอกครับ แต่ถ้าเป็นแบบว่ามี condition เยอะ ๆ แล้วแบบว่าเขียนไป if นึงแล้วเว้นอีก if นึงเอาไว้ ดูเผิน ๆ ก็คงคิดว่าเสร็จแล้ว ประมาณว่า
int ret = 0;
if(isFull) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
}
return ret;
}
ถ้ารันแล้วเจอ bug กว่าจะ debug อันนี้เจอก็คงนานอยู่ ในหนังสือ The pratice of programming ของ Kernighan & Pike แนะนำว่าควรตั้งค่าตัวแปร int เป็นเลขฐาน 16 ตัวนึงคือ 0XDEADBEEF รับรองว่าตอน debug ไม่เห็นก็ให้มันรู้ไป
แต่สำหรับ .NET แล้วเรามีวิธีนึงที่ดีกว่านี้ครับ คือการเขวี้ยง ( throw) exception ตัวนึง ซึ่งมีไว้เฉพาะสำหรับการนี้เลย นั่นคือ
int ret = 0XDEADBEEF;
if(isEditable) {
/**********************
* 100+ lines of code *
**********************/
ret = (dim + last) / cnt;
} else {
// not implemented
throw new NotImplementedException();
}
return ret;
}
throw new NotImplementedException("Method 'Shape Inflate()' have not complete");
return null;
}
อ้อ วิธีนี้จะใช้ได้ผลสำหรับพวกที่ไม่ได้ดัก exception แบบครอบจักรวาล แบบหนังสือไทยหลาย ๆ เล่มใช้กัน ดัง code ด้านล่างนี้นะครับ
จำไว้ว่าอย่าใช้นะครับ ไม่งั้นจะไม่แก้ปัญหาอะไรเลย เพราะ exception มีไว้เพื่อฟ้อง error ที่เกิดขึ้น
try {
s = s.Inflate(s.Size / 2);
//...
catch(Exception) {
// don't do anything
}
#1 By ลิ่ว on 2005-10-10 17:51