แม้จะไม่ได้ใช้ภาษาปาสคาล สิ่งแรกที่ผมได้จากการอ่านภาษาปาสคาลก็คือแนวคิดในการตั้งชื่อ และนิสัยที่ดีในการเขียน เช่น การเว้นวรรค การใส่ comment
ตั้งชื่อให้ดี ไม่ได้หมายถึงการมี นามมงคล
ตั้งชื่อให้ดี คือการสื่อสารกับตัวเอง
เพราะสิ่งที่เป็นศัตรูที่น่ากลัวที่สุดหมายเลขหนึ่งในการเขียนโปรแกรม ก็คือตัวเราเอง !
"เอ๊ะ...บรรทัดนี่มันทำอะไรของมันง่ะ"
"อือม์..พารากราฟนี้ก็ด้วย..."
"...เอ่อ..จริง ๆ แล้ว ทั้งโปรแกรมเลยนั่นแหละ ! ใครเขียนฟะ..."
นั่นคือสิ่งที่เราจะคิดในใจเมื่อกลับมาอ่านโค้ดที่เราเขียนเอง ในอีกสามเดือนถัดมา
ลืมไปเรียบร้อยนะสิครับ
ก็เลยต้องตั้งชื่อตัวแปรให้สื่อ มีการเว้นวรรคให้สวยงาม มีการใส่ comment เต็มพิกัด เพื่อเป็นการจัดการเชิงโครงสร้างให้พลาดยากขึ้น
วัตรปฎิบัติในการเขียนโปรแกรมที่ดี จึงไม่ต่างจากการเขียนบันทึกเล่าความคิดของตัวเองแต่อย่างไร
ผมเคย(=have) ตั้งชื่อตัวแปรแบบยาวมากกกกกกกกกกกกกก
อย่างเช่น
SumofAllCasesExceptTheFirstAndSecondCase
แต่ใช้แล้วเหนื่อยลิ้นห้อย
ตั้้งชื่อยาว 50 ตัวอักษร กับตั้งชื่อตัวอักษรเดียว แม้เครื่องมองว่าไม่มีอะไรแตกต่างก็จริง แต่ผลกระทบ กลับเกิดกับตัวคนเขียนโปรแกรมเองอย่างมหาศาล
ตอนหลังก็เลยกลับมาหาอะไรที่มัน "พอดี ๆ" เอาแบบทำแล้วกำลังสบายตัว-สบายใจ ไม่สั้นเกินจนนึกไม่ออกว่าคืออะไร
เช่น เมื่อผมคิดว่า
คะแนนชุดนี้จะใช้ได้เมื่อและสูงสุดต่ำกว่าร้อยลงมา และ ต่ำสุดมากกว่าศูนย์ขึ้นไป ค่าสูงสุดมากกว่าต่ำสุด
ลองมาดูว่า เวลาแปลงเป็นโปรแกรมแล้วจะเป็นอย่างไร
เมื่อเขียนเป็นโปรแกรมแบบสั้นมาก ก็จะเป็น
j=(n>x) AND (x<=100) AND (n=>0)
หรือแบบยาวมาก ก็จะเป็น
TheSetOfScoreMustBeValid = (MaximumValueofTheThirdYearStudentScore >= MinimumValueofTheThirdYearStudentScore) AND (MaximumValueofTheThirdYearStudentScore <=100) AND (MinimumValueofTheThirdYearStudentScore >=0)
แบบยาวกำลังดีดูบ้าง
ScoreIsValid = (MaxScore >= Minscore) AND (MaxScore <=100) AND (MinScore >=0)
สิ่งที่ผมได้เรียนรู้ก็คือ เมื่อผมตั้งชื่อตัวแปรให้ลงตัว (ยาวพอเหมาะ และมีความหมายที่คมชัด ฟังแล้วไม่มึนงง) การคิดบรรยายแบบภาษาพูด กับการเขียนโปรแกรม ก็กลายมาเป็นสิ่งเดียวกัน
เมื่อผสานการตั้งชื่อและการเขียน comment ประกอบให้ดี ๆ การเขียนโปรแกรมก็ไม่ต่างจากการเขียน blog เท่าไหร่หรอกครับ
ความแตกต่างมีนิดเดียว คือโปรแกรมที่เขียน จะรันในเครื่อง หรือรันในสมองคน เท่านั้นเอง..
ตั้งชื่อ กับ ใช้คำศัพท์ อันที่จริง ก็คือเรื่องเดยวกัน
มุมมองตรงนี้ ทำให้ผมตั้งข้อสังเกตุว่า ข้อเขียนดี ๆ ไม่น้อย โดยเฉพาะงานวิชาการ เนื้อหาถูกกลบซ่อนไว้ด้วยศัพท์เทคนิคที่สร้างความงุนงงให้ผู้อ่านที่ไม่ได้คุ้นกับคำเหล่านั้น และทำให้ไม่สามารถสื่อออกมาสู่สังคมวงกว้างได้ เพราะคนที่รู้จักศัพท์แบบนั้น มีน้อยคน
การคิดให้ชัด จึงต้องใช้ภาษา(คำศัพท์)ให้ชัดก่อน
การตั้งชื่อตัวแปรที่ดีอีกอย่างคือการตั้งชื่อให้สื่อกับข้อมูลที่เก็บด้วย เช่น
ScoreIsValid = (MaxScore >= Minscore) AND (MaxScore <=100) AND (MinScore >=0)
ก็เปลี่ยน
intScoreIsValid = (intMaxScore >= intMinscore) AND (intMaxScore <=100) AND (intMinScore >=0)
เมื่อมาดูใหม่ เราก็เข้าใจ คะแนต้องเป็๋นจำนวนเต็มนะ ถ้าคะแนนมาเป็นทศนิยม แปลว่า ข้อมูลแล้ว
หรือ
lngScoreIsValid = (lngMaxScore >= lngMinscore) AND (lngMaxScore <=100) AND (lngMinScore >=0)
คะแนนที่กรอกจะเป็นจำนวนจริง หรือ long ซึ่งจะเป็นจำนวนเต็มหรือทศนิยมก็ได้
ส่วนตัวแปรแบบ ข้อมความ ผมก็จะใช้ str นะหน้า
เช่น strName,strSername
ตัวแปร ประเภทอื่นๆก็จะใช้ตัวย่อนำหน้า เล่น frm obj int lng เป็นต้น
เมื่อเรากลับมาดูใหม่ก็จะเข้าใจได้ว่า ตัวแปรนี้เก็บข้อมูลแบบไหน
ขอบคุณ..คุณ สายลมแสงแดด ครับ