Monday, April 12, 2010

[C code] string copy ใน C

ความสุขอย่างนึงในการเขียนโปรแกรมของผมคือการแก้โค้ดที่ทำงานได้ให้มันสั้นลงครับ (แล้วโค้ดที่ทำงานได้มันจะบั๊กก็ตอนแก้ให้สั้นเนี่ยแหละ ฮ่าๆๆ) ไม่รู้สิ รู้สึกว่่ามันเจ๋งดีนะเวลาได้เขียนโค้ด while หรือ for ปล่าวๆแบบให้การทำงานอยู่ในเงื่อนไขของลูปไปเลย เหอๆ
เมื่อวานผมก็อ่านโค้ด string copy ในหนังสือภาษาซีเล่มนึง โค้ดนี้เขียนโดยใช้ใช้พอยท์เตอร์ (เพราะมันอยู่ในบทเรื่องพอยท์เตอร์) โค้ดในหนังสือตอนแรกออกมาเป็นแบบนี้ครับ

void strcpy(char *s, char *t) {
while((*s = *t) != '\0') {
s++;
t++;
}
}

ไอ้คนอย่างผมก็เลยนั่งเขียนให้มันเหลือแค่บรรทัดเดียวไอ้ตรงวน while โค้ดผมได้ออกมาแบบนี้ครับ

void strcpy(char *s, char *t) {
while((*s++ = *t++) != '\0');
}

แฮ่ ในที่สุดมันก็เหลือบรรทัดเดียว ซึ่งพอผมอ่านหนังสือต่อไปมันก็ลดรูปมาเหลือเท่าที่ผมเขียนครับ
แต่ยังไม่หมด ตัวอย่างต่อมามันดันเขียนลูปได้สั้นกว่านี้อีก!!!

void strcpy(char *s, char *t) {
while(*s++ = *t++);
}

โห มันใช้ความบังเอิญที่ว่า character constant '\0' ดันมีค่าเป็น 0 พอดีมาเป็นเงื่อนไขในการเช็ค
สุดยอดไปเลยหวะ ชอบๆ

ก็เลยต้องมาเขียนบล็อกเก็บไว้หน่อย :)

No comments: