Tagged: Naming Convention

ศิลปะการตั้งชื่อภาค 3

แปลและย่อมาจากหนังสือ Clean Code ครับเกี่ยวกับ Naming Convention ต่อจากภาคแรกครับ และภาคที่สองเรามาต่อกันด้วยเรื่อง
Avoid Encodings
ไม่ใชเรื่องการเข้ารหัสนะครับแต่การ encoding นี้คือการเพิ่ม information เข้าไปในการประกาศตัวแปรเช่นประเภทของข้อมูล scope ของตัวแปรที่จะถูกใช้งานเนื่องการทำ Encoding จะส่งผลให้เราต้องสร้างเอกสารสำหรับอธิบายมาตรฐานการเเขียนในทีมของเราอีกทำให้เสียเวลามาก เพราะลำพังเขียนโปรแกรมก็ลำบากอยู่แล้วยังจะต้องมานั่งอ่านเอกสารการตั้งชื่อแบบแปลกๆอีก ตัวอย่างของการทำ Encoding แบบคลาสสิคอย่าง Hungarion Notation สำหรับโปรแกรมเมอร์รุ่นใหม่อาจไม่คุ้นเรื่องนี้วันนี้เรามาฟังนิทานกันหน่อย
Hungarian Notation (HN)
HN เป็นมาตรฐานการตั้งชื่อในสมัยเก่าโดยจะใช้ชื่อของตัวแปรเป็นตัวระบุ type หรือจุดประสงค์การใช้งานตัวแปรนั้นๆ โดยที่ตัวมันเองถูกออกแบบมาให้ทำงานโดยไม่ผูกติดกับภาษาใดๆ แต่การทำ HN ไปใช้อย่างหนักหน่วงนั้นเกิดขึ้นกับการเขียนโปรแกรมด้วยภาษา BCPL ซึ่งเป็นภาษาที่ไม่มี Type ทำให้โปรแกรมเมอร์ต้องจำกันเองว่าตัวแปรแต่ละตัวเป็น Type อะไรและถูกนำไปใช้งานเพื่ออะไรบ้างโดยปกติแล้วตัวแปรจะมีเป็นกลุ่มคำที่คำชุดแรกจะเป็นตัวอักษรตัวเล็กที่เป็นตัวอธิบาย type ของตัวแปรหรือเป็นจุดประสงค์การใช้งานของตัวแปร หลังจากนั้นจะตามด้วยชื่อของตัวแปรที่โปรแกรมเมอร์แต่ละคนจะเลือกใช้ ซึ่งตามปกติคำที่สองจะใช้ตัวอกษรแรกเป็นตัวใหญ่(Capital) ซึ่งการคั่นคำด้วยตัวอักษรตัวใหญ่นี้เราเรียกว่า CamelCase

lAccountNum : variable is a long integer ("l");
arru8NumberList : variable is an array of unsigned 8-bit integers ("arru8");
szName : variable is a zero-terminated string ("sz"); this was one of Simonyi's original suggested prefixes.

Continue reading

ศิลปะการตั้งชื่อภาค 2

แปลและย่อมาจากหนังสือ Clean Code ครับเกี่ยวกับ Naming Convention ต่อจากภาคแรกครับ เรามาต่อกันด้วยเรื่อง
Make Meaningful Distinctions
ข้อนี้คือเรื่องของกล้วยครับ b1, b2 ทุกคนคงเดาถูกโดยมาตรฐานแล้วเกิน 50% ของโปรแกรมเมอร์ชอบกินผลไม้มากเราจะเห็นผลไม้เต็มไปหมด Apple (a1, a2) Banana (b1, b2) ….. หนังสือโป๊ (x1, x2) ซึ่งมันทำให้เราธาตุไฟเข้าแทรกเวลานั่งอ่านโค้ด มันชวนให้คิดว่าเรากำลังเดินอยู่ในตลาดสดเช่น

public static void copyChars(char a1[], char a2[]) {
	for (int i = 0; i < a1.length; i++) {
		a2[i] = a1[i];
	}
}

เราจะเห็น Apple เด็มไปหมด “ไอ้บ้า” โค้ดชุดนี้จะดีขึ้นนะครับถ้าเราเปลี่ยน a1->destrination, a2->source ดังนั้นอย่าใช้คำที่ไม่สื่ออีกนะครับมันชวนปวดหัว ยังครับยังไม่พออีกเรื่องที่น่าสนใจเค้าเรียกว่า Noise Word เช่นเรามีคลาส Product และ ProductInfo และ ProductData ถูกครับเรามีคลาสสามคลาสที่ชื่อต่างกันแต่มันไม่สื่อเลยว่าไอ้สามอันนี้มันต่างกันยังไง Info กับ Data มันต่างกันตรงไหนครับพี่น้องถ้าจะเอาให้หนักกว่านั้นจะมีพวก a, an, the พ่วงมาด้วย :)
Continue reading

ศิลปะการตั้งชื่อ ส่วน .Use Intention-Revealing Names.

แปลและย่อมาจากหนังสือ Clean Code ครับเกี่ยวกับ Naming Convention
“บร๊ะเจ้า โค้ดชุดนี้มันทำอะไรเนี่ย!!!!” วลีนี้ทุกคนคงเคยตะโกน (ทั้งในใจและออกเสียง)ซึ่งประเด็นการอ่านโค้ดชาวบ้านไม่ออกนั้นมีมากมายหลายเหตุผลมาก แต่หนึ่งในเหตุผลสำคัญที่สุดคือ “มันตั้งชื่อ อะไรของมันเนี่ย a1, a2, a3…temp1, temp2,,,,” เจอแค่นี้ก็ไม่รู้จะงัดท่าไหนมาเดาแล้วครับ เรายังไม่นับการโชว์เทพย่อโค้ดให้สั้นนนนนนนนและอื่นๆที่จะกล่าวในภายหลัง โดยวันนี้เราจะมาดูเรื่องของการ ตั้งชื่อก่อน ซึ่งแต่ละภาษาก็จะมีวิธีการตั้งชื่อของตัวเองแต่เราสามารถสรุปหัวใจหลักในการตั้งชื่อได้ประมาณ 10 กว่าข้อครับ และเพื่อไม่ให้เสียเวลาเราจะมาเริ่มที่ข้อที่ 1 ก่อน
แสดงให้เห็นว่าเราตั้งชื่อด้วยความตั้งใจ
เนื่องจากการตั้งชื่อถือเป็นมารยาทที่ดีข้อหนึ่งในการเขียนโค้ด การจะเลือกชื่ออะไรมาใช้ควรจะเลือกด้วยความระมัดระวังและตั้งใจว่าชื่อที่ใช้นั้น “สื่อ” เพื่อให้คนที่มาอ่านโค้ดของเราสามารถคาดเดาการทำงานได้จากชื่อที่เราใช้ไม่ว่าจะเป็น ฟังก์ชั่น หรือ ตัวแปร เริ่มจากตัวแปรก่อนชื่อของตัวแปรต้องแสดงให้เห็นว่ามันทำหน้าที่อะไร มันถูกสร้างขึ้นมาเพื่ออะไร ถ้าการตั้งชื่อตัวแประที่ตั้งแล้วดันต้องเขียน comment เพิ่มแสดงว่าชื่อนั้นๆที่เราใช้ “ห่วย” ยกตัวอย่างเช่น
Continue reading