Thailand Travel
Thailand Hotels
Thailand Golf Package
 




indentation style in Java programming

self-documenting program คือความพยายามผนวกเอกสารโปรแกรมลงไปในต้นฉบับโปรแกรมโดยตรง ประกอบด้วยสามหัวข้อ

-prose comment โปรแกรมเมอร์อธิบายเหตุผล ความมุ่งหมาย ความเห็น และข้อมูลอะไรก็ตามที่ไม่สามารถ"สกัด"ออกมาได้จากต้นฉบับโปรแกรม โดยใช้ภาษาธรรมชาติแทรกลงไปเป็นคอมเมนท์

-naming convention การตั้งชื่อคลาส ชื่อเมธอด ชื่อตัวแปร ชื่อค่าคงที่ ชื่อพารามิเตอร์ ชื่อบล็อก ฯลฯให้เข้ากับเนื้อหาโปรแกรม

-indentation style จะเป็นหัวข้อของเราในจังหวะนี้

คำว่า indentation ตรงตัวหมายถึงการจัดย่อหน้า แต่เมื่อโปรแกรมเมอร์พูดถึง indentation style แล้วมันจะหมายรวมไปถึงช่องว่างและฟอร์แมตใดๆก็ตามที่จะช่วยให้หน้าตาของต้นฉบับโปรแกรมออกมาเป็นระเบียบ อ่านเข้าใจง่าย แก้ไขง่าย

น้องๆที่เปิดหนังสือแล้วยังต้องพิมพ์ต้นฉบับโปรแกรมตามลงเครื่อง อาจจะยังไม่เข้าใจว่าทำไมหนอทำไมมันต้องจัดแบบนี้ แต่ไม่เป็นแบบนั้น หรือเขียนเองแล้วพยายามเลียนแบบฟอร์แมตตามที่เห็นในหนังสือแต่ยังตะหงิดๆว่าทำไมมันไม่เหมือน ก็จะได้โอกาสไขปริศนาเสียทีว่ารูปแบบที่เราเห็นมันมีกติกาอย่างไร

เมื่อ indentation style มันพูดถึงการควบคุมช่องว่าง เราลองมาพิจารณากันว่าช่องว่างที่ว่านี่มันมีกี่แบบ

-tab character ('\t') สำหรับแทรกระหว่างกั้นหน้าซ้ายกับอักษรแรกของแต่ละบรรทัด ได้จากปุ่ม Tab

-space character (' ') สำหรับแทรกระหว่างอะไรก็ตามที่ควรแทรกในระหว่างบรรทัด ได้จาก Space Bar

-newline character ('\n') ได้จากปุ่ม Enter
....-\n เดี่ยวๆสำหรับขึ้นบรรทัดใหม่ มักใช้เมื่อจบสเตทเมนท์
....-\n\n สองตัวติดคือบรรทัดว่างสำหรับแทรกระหว่างบล็อกของสเตทเมนท์

คราวนี้มาดูข้อแนะนำการใช้ช่องว่างแต่ละแบบ

-tab character
....-ควรตั้งความกว้าง tab ไว้ที่ 4 ตัวอักษร น้อยกว่านี้จะอ่านยาก มากกว่านี้จะกินที่ อีกเหตุผลคือนี่เป็นตัวเลขที่โปรแกรมเมอร์ส่วนใหญ่เขาใช้กัน ฝึกสายตาให้คุ้นกับค่ามาตรฐานย่อมได้เปรียบ
....-สำหรับบรรทัดแรกให้เริ่มพิมพ์อักษรแรกที่คอลัมน์ 0 ชิดกับกั้นหน้าซ้ายเสมอ
....-เมื่อขึ้นบรรทัดใหม่ หากไม่มีเหตุผลอะไรเป็นพิเศษให้จัดย่อหน้าให้ตรงกับบรรทัดก่อนหน้า เพื่อสื่อว่าสองบรรทัดนี้ความสำคัญอยู่ในระดับเดียวกัน
....-เมื่อเปิดบล็อกใหม่ด้วยปีกกาเปิด ('{') ต้องเพิ่ม tab ให้บรรทัดถัดไปหนึ่งขั้น เพื่อสื่อว่าบรรทัดหลังเป็น subordinate ของบรรทัดก่อนหน้า
....-เมื่อจะปิดบล็อกด้วยปีกกาปิด ('}') ให้ขึ้นบรรทัดใหม่ ลด tab ลงหนึ่งขั้นแล้วจึงพิมพ์ปีกกาปิด เพื่อสื่อว่าบรรทัดถัดไปจะไม่เป็น subordinate อย่างบรรทัดก่อนหน้าอีกแล้ว หากบรรทัดที่พิมพ์ปีกกาปิดนั้นไม่มีปีกกาเปิดต่อท้าย ให้เริ่มบรรทัดใหม่ที่ tab ตรงกับปีกกาปิดได้ทันที

-space
....-เคาะ space เพียงครั้งเดียวสำหรับแต่ละตำแหน่งที่ต้องการ space เพื่อประหยัดเนื้อที่และคีย์สโตรก
....-เคาะ space กั้นระหว่างชื่อคลาส ชื่อเมธอด ชื่อตัวแปร ค่าป้อน คีย์เวิร์ดโอเปอเรเตอร์ ปีกกาปิด/เปิด ฯลฯ
....-เคาะ space ตามหลังจุลภาค (',') ที่กั้นระหว่างไอเทมในลิสต์
....-อย่าแทรก space ระหว่าง dot operator ('.') กับ identifiers (ชื่อคลาส ชื่ออินสแตนซ์ ชื่อเมธอดและชื่อฟิลด์) เพราะ dot operator มีไว้เพื่อเชื่อมสองสิ่งให้กลายเป็นสิ่งใหม่ที่มีความหมายต่างจากเดิม

-newline
....-ขึ้นบรรทัดใหม่เมื่อจบสเตทเมนท์ปกติ
....-แต่ละตำแหน่งที่ต้องการบรรทัดว่างให้แทรกบรรทัดว่างเพียงบรรทัดเดียวเท่านั้น เพื่อประหยัดเนื้อที่และคีย์สโตรก
....-จัดกลุ่มของสเตทเมนท์ที่เกี่ยวข้องกันเป็นหนึ่งหน่วยความคิด อย่าแทรกบรรทัดว่างลงไปแยกหนึ่งหน่วยความคิดนี้ออกจากกันเด็ดขาด
....-แทรกบรรทัดว่างลงไปตรงกลางแยกสองหน่วยความคิดออกจากกัน
....-แทรกบรรทัดว่างระหว่างบล็อกหลักของคลาส เช่น บล็อกของการประกาศชื่อฟิลด์ บล็อกของคอนสตรักเตอร์ บล็อกของเมธอด ฯลฯ

-tab และ space
....-อย่าใช้ space ในตำแหน่งที่ควรจะใช้ tab ด้วยเหตุผลหลักสองข้อ
........-ประหยัดคีย์สโตรก คุณต้องเคาะ space สี่ครั้งจึงจะได้ช่องว่างเท่ากับ tab หนึ่งครั้ง
........-โปรแกรมเมอร์ a อาจจะตั้งความกว้าง tab ไว้ที่ 4 ตัวอักษร ขณะที่โปรแกรมเมอร์ b ตั้งไว้ที่ 6 ตัวอักษร เมื่อมีการส่งไฟล์ให้กันจะไม่เกิดปัญหา"ความกว้าง tab ที่ไม่คุ้นตา"
....-แต่คุณอาจจะใช้ tab แทน space ก็ได้ เมื่อต้องจัดคอลัมน์ของเทกซ์ให้ตรงกัน เช่น เมื่อคุณต้องป้อนค่าเริ่มต้นให้ตัวแปรในลักษณะตาราง หากคอลัมน์ตรงกัน การอ่านหรือแก้ไขข้อมูลในตารางก็ง่ายขึ้น

-tab และ newline
....-หากหนึ่งสเตทเมนท์ยาวเกินกว่าหนึ่งบรรทัด ให้ปัดส่วนเกินของสเตทเมนท์มาไว้ในบรรทัดถัดไป และเพิ่ม tab จากต้นสเตทเมนท์ขึ้นหนึ่งหรือสองขั้น เพื่อเป็นจุดสังเกตว่าสเตทเมนท์นี้มีความยาวมากกว่าปกติ

-space และ newline
....-อาจวางสเตทเมนท์สั้นๆที่มีความเกี่ยวข้องกันหลายอันไว้บนบรรทัดเดียวกัน โดยใช้ space กั้นระหว่างสเตทเมนท์

รายละเอียดมากพอดู ถ้าอ่านแล้วงงไม่ต้องตกใจ ลองจับทางโปรแกรมตัวอย่างนี้ให้ได้แล้วกลับไปอ่านใหม่

import package.class;
import package.class;

class MyClass {

____keyword keyword type field;
____keyword keyword type field;
____type field;
____type field;

____public MyClass(type name, type name) {
________field = name;
________field = name;
____}

____public type method() {
________statement;
________statement;

________if (expression) {
____________statement;
____________statement;
________} else {
____________statement;
________}
________statement; statement; statement;
________statement;
________while (expression) {
____________for (statement; expression; statement) {
________________for (statement; expression; statement) {
____________________statement;
____________________statement;

____________________statement;
____________________statement;
________________}
____________}
____________statement;
________}
________return type;
____}

____static {
________try {
____________statement;
____________statement;
________} catch(type name) {}
________very very very very very very very very very very very very very
________________very very very very very very very very very very very
________________very very very very very long statement;
________statement;
____}
}

นี่เป็นเพียงข้อแนะนำคร่าวๆเท่านั้น ลองเอาไปใช้แล้วปรับเปลี่ยนได้ตามความพอใจครับ

ผมเคยเห็นกระทู้ที่โปรแกรมเมอร์คุยกันเรื่อง indentation style อยู่สองสามครั้ง แต่ยังไม่เคยเห็นกระทู้ที่ละเอียดพอสำหรับผู้เริ่มต้น ต้องการสอบถามเพิ่มเติมหรือแสดงความเห็นก็เชิญเลยครับ


จากคุณ : vigor [29 มี.ค. 2545 - 22:29:00]