ข้อกำหนดการเข้ารหัส Delphi ผู้แต่ง: Tulipsys วันที่อัปเดต: 16 ธันวาคม 2546 สารบัญ 1 แบบแผนทั่วไป (การตั้งชื่อ - การเยื้องและการเว้นวรรค - ระยะขอบ - ตัวพิมพ์ - ความคิดเห็น) 2. 3. คำสั่ง (เริ่มต้น...สิ้นสุด คำสั่ง-ถ้า คำสั่ง-กรณี คำสั่ง-สำหรับ คำสั่ง-ในขณะที่ คำสั่ง-ซ้ำ คำสั่ง-พร้อมคำสั่ง-การจัดการข้อยกเว้น) ขั้นตอนและฟังก์ชัน (การตั้งชื่อและรูปแบบ-พารามิเตอร์อย่างเป็นทางการ-ตัวแปร-ประเภท-ประเภทที่กำหนดเอง) วัตถุประสงค์ของการกำหนดมาตรฐานการเข้ารหัสที่เกี่ยวข้องกับเชิงวัตถุ (การตั้งชื่อคลาสและการใช้รูปแบบฟิลด์วิธีการคุณสมบัติคุณสมบัติ) คือเพื่อให้กลุ่มโปรแกรมเมอร์สามารถสร้างโค้ดที่มีรูปแบบเดียวกันเพื่อให้ทีมสามารถสร้างและรักษา สไตล์บางอย่าง หากบรรลุเป้าหมายนี้ ไฟล์ทั้งหมดของโปรเจ็กต์จะดูเหมือนเขียนโดยโปรแกรมเมอร์ ข้อดีคือสนุก แต่ข้อดีคือโค้ดของโปรแกรมเมอร์แต่ละคนสามารถเข้าใจได้ง่ายโดยผู้อื่น ซึ่งจะช่วยปรับปรุงการบำรุงรักษาโค้ดได้อย่างมาก และช่วยลดค่าบำรุงรักษาอีกด้วย นี่เป็นสถานการณ์ในอุดมคติสำหรับทุกทีม สำหรับบุคคลทั่วไป การเลือกหรือสร้างบรรทัดฐานการเข้ารหัสด้วยตนเองและปฏิบัติตามบรรทัดฐานนี้สามารถให้ผลลัพธ์ที่ดีได้เช่นกัน นี่เป็นเป้าหมายที่น่าดึงดูดมาก แต่ก็ไม่ยากเกินไปที่จะบรรลุเป้าหมาย ภาษาการเขียนโปรแกรมแต่ละภาษามีมาตรฐานการเข้ารหัสของตัวเอง กล่าวได้ว่าเป็นบทสรุปของประสบการณ์ แน่นอนว่าเราต้องเรียนรู้จากมาตรฐานของภาษาการเขียนโปรแกรมอื่นๆ ด้วย ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องเรียนรู้จากผู้อื่น ประการที่สอง การใช้มาตรฐานการเข้ารหัสคือทำให้การทำงานของโปรแกรมเมอร์ง่ายขึ้น ความหมายของ "การทำให้เข้าใจง่าย" ไม่ใช่การลดจำนวนโค้ด (ในทางกลับกัน หลายครั้งที่การปฏิบัติตามมาตรฐานจะทำให้โค้ดมากขึ้น) แต่เพื่อลดจำนวนโค้ดของโปรแกรมเมอร์ แรงงานในการรักษารหัส การเขียนโปรแกรมเป็นงานที่ซับซ้อนมาก การจัดการกับความสัมพันธ์ต่างๆ เป็นเรื่องที่น่ากังวล และมีการเชื่อมโยงระหว่างความสัมพันธ์ต่างๆ อย่างแยกไม่ออก โปรแกรมเมอร์ควรใช้เวลาส่วนใหญ่ในการจัดการกับความสัมพันธ์และหลีกเลี่ยงการเสียเวลากับปัญหาที่มีรายละเอียดมากเกินไป หากเขาสามารถเข้าใจแนวคิดและโครงสร้างของโปรแกรมได้อย่างรวดเร็ว ก็จะวางแผนการบำรุงรักษาได้อย่างรวดเร็ว นอกจากนี้ มาตรฐานการเข้ารหัสควรเป็นมาตรฐานที่ใช้งานง่ายซึ่งคุณสามารถอ้างอิงและแก้ไขได้ แต่จะต้องใช้งานง่าย แต่ในกลุ่มต้องแน่ใจว่าทุกคนใช้มาตรฐานเดียวกัน การเขียนโปรแกรมเป็นงานที่ยืดหยุ่นมาก มีเพียงการคิดที่ยืดหยุ่นและการประยุกต์ใช้ที่ยืดหยุ่นเท่านั้นจึงจะได้รับผลลัพธ์ที่ดี นอกจากนี้ การใช้ข้อกำหนดส่วนใหญ่จะช่วยลดภาระหน่วยความจำของโปรแกรมเมอร์ ความสามารถในการคิดของมนุษย์นั้นยอดเยี่ยมมาก แต่ความจำยังแย่มาก เราต้องเผชิญกับคอมพิวเตอร์ตลอดทั้งวัน และสิ่งที่สำคัญที่สุดที่มันต้องการช่วยเราทำคือความทรงจำ ดังนั้นจึงเป็นหนึ่งในเป้าหมายของเราที่จะเพิ่มความได้เปรียบในการคิดของโปรแกรมเมอร์ สุดท้ายนี้ เครื่องมือการเขียนโปรแกรมมีอิทธิพลอย่างมากต่อมาตรฐานการเข้ารหัส และอิทธิพลนี้มาจากรูปแบบการเขียนโปรแกรมของนักพัฒนา นอกจากนี้ บนพื้นฐานของ C++ เราจะไม่ใช้ข้อกำหนดการเข้ารหัสที่เหมือนกันทุกประการใน Microsoft Visual C++ และ Borland C++ Builder Microsoft และ Borland มีสไตล์ที่แตกต่างและแตกต่างอย่างมาก ในฐานะผู้ใช้ เราสามารถทำการเปลี่ยนแปลงตามสิ่งนี้ได้ แต่ก็มีข้อจำกัด ที่จริงแล้ว เมื่อเราตัดสินใจเกี่ยวกับผู้ขายและเครื่องมือในการพัฒนา เราก็จะกำหนดรูปแบบในอนาคตของเราด้วย 1. แบบแผนทั่วไป 1.1 การตั้งชื่อ หลักการพื้นฐานของการตั้งชื่อคือชื่อควรแสดงถึงหน้าที่ของข้อมูลอย่างชัดเจน Object Pascal รองรับชื่อไฟล์ที่ยาว ชื่อควรใช้คำกริยา คำนาม หรือทั้งสองอย่างรวมกัน คุณต้องไม่ใช้คำสงวนและคำหลักที่กำหนดไว้ใน Delphi และพยายามอย่าใช้คำสงวนและคำหลักที่กำหนดไว้ในภาษาอื่น พยายามใช้คำให้ครบถ้วนและหลีกเลี่ยงการใช้คำย่อ คำนำหน้าและคำต่อท้าย ขีดล่าง หรือสัญลักษณ์อื่นๆ ในภาษาฮังการี แบบแผนการตั้งชื่อใช้เพื่อให้แน่ใจว่าชื่อสามารถอ่านได้ มาตรฐานการตั้งชื่อที่แสดงโดยระบบการตั้งชื่อของฮังการีได้พัฒนาคำนำหน้าและคำต่อท้ายจำนวนมากเพื่อระบุประเภท ขอบเขต หรือคุณลักษณะอื่นๆ ของข้อมูล ใน Delphi คุณสามารถใช้วิธีนี้ได้อย่างแน่นอน แต่นี่ไม่ใช่วิธีที่แนะนำ เหตุผลหนึ่งก็คือ รูปแบบการตั้งชื่อประเภทนี้ทำให้มีงานหน่วยความจำเพิ่มเติมมากเกินไป และอีกเหตุผลหนึ่งถูกกำหนดโดยคุณลักษณะของ Delphi เอง การตรวจสอบประเภทบังคับของ Delphi จะตรวจสอบการใช้งานตัวแปรทั้งหมดโดยอัตโนมัติ ดังนั้นเราจึงต้องให้ความสนใจเพียงเล็กน้อย (ใส่ใจกับการใช้อักษรตัวพิมพ์ใหญ่ของคำ) โดยไม่ต้องเพิ่มคำนำหน้าต่างๆ มากมาย นอกจากนี้ การพิจารณาข้อมูลควรขึ้นอยู่กับความหมายมากกว่าประเภทหรือขอบเขต และควรให้ความสำคัญกับโครงสร้างของโปรแกรม ความสัมพันธ์เชิงตรรกะ และแนวคิดการออกแบบ ดังนั้นใน Delphi คุณเพียงแค่ต้องใช้คำผสมกันในการตั้งชื่อเท่านั้น ไม่ต้องคำนึงถึงสิ่งอื่นใด และแน่นอนว่าคุณควรทำให้มันกระชับที่สุดเท่าที่จะเป็นไปได้ ในบางคำสั่ง (เช่น for loops) เราจำเป็นต้องใช้จำนวนเต็มหลายตัวเป็นตัวแปรในการนับ ที่นี่คุณสามารถใช้ตัวอักษรสามตัว i, j และ k เป็นชื่อตัวแปรได้ นี่เป็นนิสัยที่ได้รับการพัฒนาและคงไว้ในภาษา Fortran และได้รับการพิสูจน์แล้วว่ามีประโยชน์มากและง่ายต่อการเข้าใจ แน่นอนว่าเราจะได้ผลลัพธ์ที่ดีกว่าหากใช้ชื่อที่มีความหมายมากกว่านี้ เช่น: MyCounter โดยทั่วไปแล้ว ตัวอักษรทั้งสามตัว i, j และ k นั้นเพียงพอแล้ว ไม่เช่นนั้นกระบวนการหรือฟังก์ชันเพิ่มเติมก็ควรถูกแบ่งออก นี่เป็นตัวอย่างบางส่วน: 1. SongsList // ระบุว่านี่คือรายการเพลง จำนวนเพลงพหูพจน์บ่งชี้ว่ามีมากกว่าหนึ่งเพลง 2. SetCarColor // ระบุว่านี่คือฟังก์ชันในการตั้งค่าสีของ รถยนต์ หากมีการกำหนดคลาส TCar ระบบจะใช้ SetColor ในคลาสเป็นสมาชิกฟังก์ชันเพื่อกำหนดสีของรถ ให้ความสนใจกับการตั้งชื่อตัวแปรบูลีนด้วย ชื่อของตัวแปรบูลีนควรระบุความหมายของจริงและเท็จอย่างชัดเจน ตัวอย่างเช่น สำหรับตัวแปรที่บันทึกว่ามีไฟล์อยู่หรือไม่ การใช้ IsFileExisted จะดีกว่าการใช้ FileExisted สุดท้ายนี้ ห้ามตั้งชื่อตัวแปรโกลบอล Temp หรือ Tmp แต่ยังคงได้รับอนุญาตภายในขั้นตอนหรือฟังก์ชัน ในความเป็นจริง มีการถกเถียงกันเล็กน้อยเกี่ยวกับกฎนี้ มาตรฐานการเข้ารหัสบางอย่างเข้มงวดกว่านั้น แม้แต่ในขั้นตอนหรือฟังก์ชันก็ตาม อย่างไรก็ตาม หลายครั้งการตั้งชื่อนี้สะดวกมาก โดยเฉพาะอย่างยิ่งสำหรับขั้นตอนหรือฟังก์ชัน หากใช้เป็นตัวแปรร่วม ก็มีแนวโน้มว่าจะมีคำสั่งการกำหนดที่ไม่ตรงกับประเภท แม้ว่าคอมไพเลอร์จะให้ความช่วยเหลือคุณมากมายในเวลานี้ แต่ก็เป็นเรื่องยากที่จะหลีกเลี่ยงไม่ให้เกิดข้อผิดพลาดเล็กๆ น้อยๆ . โดยสรุป การปฏิบัติตามกฎนี้จะให้ผลลัพธ์ที่ดีกว่า แต่ไม่ควรปฏิบัติตามอย่างเคร่งครัดหากจำเป็น 1.2 การเยื้องและการเว้นวรรค ควรเว้นวรรคสองช่องระหว่างแต่ละระดับ ซึ่งจะทำให้โปรแกรมมีความชัดเจนและเป็นระเบียบ อย่าใช้อักขระแท็บ เนื่องจากความกว้างของอักขระแท็บเป็นเรื่องยากที่จะรักษาให้สอดคล้องกับการตั้งค่าและแอปพลิเคชันต่างๆ แต่อย่าคาดหวังว่าโปรแกรมของคุณจะดูได้เฉพาะใน Delphi เท่านั้น ให้ความสนใจกับการใช้โปรแกรมแก้ไขด้วย หากคุณเลือกเฉพาะ Delphi ก็ไม่มีปัญหา หากคุณใช้โปรแกรมประมวลผลข้อความเช่น Word โปรดใส่ใจกับการใช้แบบอักษรที่เหมาะสมเพื่อให้แน่ใจว่าความกว้างของตัวอักษรและสัญลักษณ์แต่ละตัว ก็เหมือนกัน เมื่อพิมพ์ด้วยโปรแกรมประมวลผลข้อความเช่น Word คุณควรใส่ใจกับการเลือกแบบอักษรด้วย การใช้ช่องว่างยังช่วยให้โปรแกรมสะอาดและทำให้โปรแกรมเมอร์เข้าใจโครงสร้างของโปรแกรมได้อย่างรวดเร็ว ต่อไปนี้เป็นข้อกำหนดและตัวอย่างที่เกี่ยวข้อง: 1. ควรมีช่องว่างระหว่างแต่ละคำ ตัวอย่างเช่น: สำหรับ TMyClass = class(TObject)2 ควรมีช่องว่างรอบๆ "=", "<>", ">=" และ "<="; ควรมีช่องว่างทางด้านขวาของ ":=" และ /// แต่ไม่ควรอยู่ทางด้านซ้าย ตัวอย่างเช่น: ถ้า a = b แล้ว a:= b; ควรมีช่องว่างระหว่างคำสงวนและคำสำคัญกับสัญลักษณ์ทางด้านซ้าย แต่ต้องไม่มีช่องว่างระหว่างคำสงวนกับสัญลักษณ์ทางด้านขวา ตัวอย่างเช่น: PROcedure ShowMessage โอเวอร์โหลด;4. การใช้วงเล็บ: ในคำจำกัดความและการเรียกใช้ขั้นตอนและฟังก์ชัน ไม่ควรเว้นวรรคระหว่างวงเล็บและคำและสัญลักษณ์ภายนอก ไม่ควรเว้นวรรคระหว่างวงเล็บและคำภายใน ในการตัดสินแบบมีเงื่อนไขของคำสั่ง if ควรใช้ช่องว่างระหว่างคำสงวน เช่น และ และ หรือ ตัวอย่างเช่น: ฟังก์ชัน Exchange(a: integer; b: integer); if (a = b) และ ((a = c) หรือ (a = d)) ดังนั้น … end;1.3 Margin Delphi Editor อยู่ที่ประมาณ 81 จากทางขวานั่น เป็นเส้นสีเข้มที่เหลืออยู่ที่ตัวอักษร ที่จริงแล้ว ภายใต้อินเทอร์เฟซเริ่มต้นของ Delphi เมื่อความละเอียดคือ 800*600 หน้าต่างที่ขยายใหญ่สุดจะแสดงตัวอักษร 4 ตัวทางด้านซ้ายของเส้นสีเข้ม ดังนั้นอย่าเขียนซอร์สโค้ดนอกเส้นสีเข้ม ซึ่งหมายความว่าแต่ละบรรทัดไม่ควรเกิน 80 ตัวอักษร รวมทั้งช่องว่างนำหน้าและตรงกลางด้วย หากคำสั่งยาวเกินไป การขึ้นบรรทัดใหม่จะเสร็จสมบูรณ์ และการขึ้นบรรทัดใหม่จะต้องเยื้องด้วยอักขระสองตัว นอกจากนี้ยังพิมพ์ได้ง่าย และส่วนที่เกินเส้นสีเข้มจะไม่ถูกพิมพ์ใน Delphi หากคุณใช้ซอฟต์แวร์ประมวลผลคำ เช่น Word เพื่อพิมพ์โปรแกรม Delphi ส่วนที่เกินจะถูกย้ายไปยังจุดเริ่มต้นของบรรทัดถัดไป ทำให้อ่านโปรแกรมที่พิมพ์ได้ยาก ดังนั้นพยายามทำการปรับเปลี่ยนทั้งหมดในขณะที่เขียนโค้ดและอย่าปล่อยให้งานประเภทนี้ต้องพิมพ์ เมื่อตัดบรรทัด ให้ใส่ใจกับการรักษาความสามารถในการอ่านของโปรแกรม และพยายามรักษาส่วนที่ครบถ้วนไว้ ตามตัวอย่าง หากฟังก์ชันยาวเกินไป ให้รวมคำอธิบายพารามิเตอร์ให้ครบถ้วน แทนที่จะรวมเฉพาะการประกาศประเภทข้อมูล วิธีเขียนสองวิธีแรกด้านล่างนี้ถูกต้อง และวิธีการเขียนต่อไปนี้ผิด: function AdditonFiveInputNumber(a: integer; b: integer; c: integer; d: ineger;e: integer): integer; //Correct function AdditonFiveInputNumber (a: integer;b: integer;c: integer;d: integer;e: integer): จำนวนเต็ม; //แก้ไขฟังก์ชัน AdditonFiveInputNumber (a: จำนวนเต็ม; b: จำนวนเต็ม; c: จำนวนเต็ม; d: จำนวนเต็ม; e: จำนวนเต็ม): จำนวนเต็ม; // ฟังก์ชั่นข้อผิดพลาด AdditonFiveInputNumber (a: จำนวนเต็ม; b: จำนวนเต็ม; c: จำนวนเต็ม; d: จำนวนเต็ม; e: จำนวนเต็ม ): จำนวนเต็ม; // ฟังก์ชั่นข้อผิดพลาด AdditonFiveInputNumber (a: จำนวนเต็ม; b: จำนวนเต็ม; c: integer; d: ineger;e: integer): integer; //ข้อผิดพลาด 1.4 ตัวอักษรตัวแรกของแต่ละคำในชื่อที่กำหนดเองจะต้องเป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และตัวอักษรอื่นๆ จะต้องเป็นตัวพิมพ์เล็ก คำและคำหลักที่สงวนไว้ของ Delphi ควรเป็นตัวพิมพ์เล็กทั้งหมด วิธีการเขียนของฟังก์ชันที่กำหนดไว้ล่วงหน้าของ Delphi นั้นเหมือนกับวิธีการเขียนชื่อที่กำหนดเอง ประเภทข้อมูลพื้นฐานใน Delphi ควรเป็นตัวพิมพ์เล็ก และตัวอักษรสองตัวแรกของประเภทคลาสขยายควรเป็นตัวพิมพ์ใหญ่ (ตัวอักษรตัวแรกของประเภทคลาสคือ "T") ต่อไปนี้คือตัวอย่าง: 1. ชื่อที่กำหนดเอง: MyFavouriteSong, CarList; 2. คำสงวน: if (a = b) และ ((a = c) หรือ (a = d)) จากนั้น … end; ('ทุกอย่างเรียบร้อย');4. ประเภทคลาสส่วนขยาย Delphi: MyStrings = TStrings.Create;1.5 ความคิดเห็น Delphi สนับสนุนความคิดเห็นสองประเภท: บล็อกความคิดเห็น ({}) และความคิดเห็นบรรทัดเดียว (//) วัตถุประสงค์ของการแสดงความคิดเห็นคือการอธิบายแนวคิดการออกแบบโปรแกรมและช่วยให้โปรแกรมเมอร์เข้าใจแนวคิดของโปรแกรมที่เขียนเมื่อสองปีก่อนหรือเมื่อวานโดยเร็วที่สุด นี่เป็นการแก้ปัญหาเรื่องความจำจริงๆ นะ สมองไม่ควรถูกใช้เป็นความจำมากเกินไป อย่าพึ่งสมองมากเกินไปในการเขียนโปรแกรม แต่ใช้คำให้มากที่สุด ดังนั้น ความคิดเห็นจึงเป็นสิ่งสำคัญมากในภาษาการเขียนโปรแกรม แม้ว่าผู้คนจำนวนมาก (โดยเฉพาะผู้เริ่มต้น รวมถึงโปรแกรมเมอร์จำนวนมาก) ไม่สนใจเรื่องนี้ และพวกเขาก็ไม่ค่อยเขียนความคิดเห็นเลย การใช้ความคิดเห็นอีกอย่างหนึ่งอยู่ในขั้นตอนการดีบักโปรแกรม ตัวอย่างเช่น หากมีสองคำสั่งและคุณไม่รู้ว่าอันไหนดีกว่าล่วงหน้า คุณต้องทดสอบ: ใส่ "//" ก่อนคำสั่ง (นั่นคือ เปลี่ยน แสดงความคิดเห็น) เรียกใช้คำสั่งอื่น แล้วทำตรงกันข้าม เราก็จะตัดสินใจเลือกได้อย่างง่ายดาย หากเป็นกลุ่มข้อความ ให้ใช้บล็อกความคิดเห็น แต่ต้องแน่ใจว่าได้วาง "{" และ "}" ในตำแหน่งที่โดดเด่น เช่น แยกบรรทัดบนและล่าง ต่อไปนี้เป็นหลักการใช้งานบางประการ: 1. ในกรณีส่วนใหญ่ จำเป็นต้องวางความคิดเห็นไว้หน้าตัวแปรและประเภทที่กำหนดเอง 2. ในกรณีส่วนใหญ่ จำเป็นต้องใส่ความคิดเห็นไว้ที่ด้านบนของไฟล์หน่วย ความคิดเห็นควรประกอบด้วย: ชื่อไฟล์ วันที่สร้าง วันที่แก้ไข ผู้เขียน ผู้เขียนแก้ไข และคำอธิบายที่จำเป็น 3. ความคิดเห็นควรมีความหมาย อย่าใช้ความคิดเห็นที่ไม่มีประโยชน์ ตัวอย่างเช่น: ในขณะที่ i < 8 dobegin … i:= i + 1; //Add one to iend; ความคิดเห็น "//Add one to i" ที่นี่ไม่มีความหมาย แน่นอนว่ามันไม่ได้หมายถึงคำสั่งง่ายๆ (คล้ายกับ: i : = i + 1) ไม่จำเป็นต้องแสดงความคิดเห็น เนื่องจากข้อความง่ายๆ มักมีบทบาทสำคัญมาก หากข้อความนี้ทำให้ผู้คนเกิดคำถามหรือเข้าใจยาก ก็ควรทำเครื่องหมายที่หน้าที่ของข้อความนี้ 4. อย่าพยายามสร้างโมโนแกรมในความคิดเห็น เว้นแต่คุณจะคิดว่ามันจำเป็นจริงๆ เพราะมันยากมากที่จะแก้ไขคำอธิบายประกอบโดยยังคงรักษารูปแบบให้สมบูรณ์และสวยงาม - 5. หากต้องการแยกแยะความคิดเห็นชั่วคราวจากความคิดเห็นถาวร คุณสามารถใช้วิธีของคุณเพื่อวางสัญลักษณ์พิเศษในความคิดเห็นได้ ข้อดีของสิ่งนี้คือหาง่าย 6. การเปลี่ยนแปลงคำสั่งจะถูกแมปกับความคิดเห็นที่เกี่ยวข้อง 7. ควรมีช่องว่างที่ชัดเจนระหว่างความคิดเห็นและโค้ด เพื่อให้คุณสามารถบอกได้ทันทีว่าอันไหนเป็นคำสั่งและอันไหนเป็นความคิดเห็น คุณสามารถใส่ความคิดเห็นในบรรทัดก่อนหรือหลังบรรทัดโค้ด หรือเว้นวรรคอย่างน้อยสองช่องต่อจากโค้ด อย่างไรก็ตาม เมื่อโค้ดและความคิดเห็นอยู่ในบรรทัดเดียวกัน อย่าใส่โค้ดไว้หลังความคิดเห็น นอกจากนี้ อย่าใส่โค้ดไว้หลังความคิดเห็น