ฉันจะสละชื่อตัวแปรที่สั้นลงสำหรับรหัส“ columned” ที่ยาวขึ้นหรือไม่


17

ฉันเป็นนักเขียนโปรแกรมสมัครเล่นในชั้นเรียน CS ที่พยายามเรียนรู้ทักษะการเขียนโปรแกรมที่เหมาะสม นี่คือลักษณะของรหัสของฉันขอบของมันขยายไปถึง 103 คอลัมน์

int extractMessage(char keyWord[25], char cipherText[17424],
                   int rowSize, char message[388]) 
{
    int keyColumn    = 0;
    int cipherColumn = 0;
    int offset       = 1;
    int nextWord     = 1;

    int lengthOfWord   = 0;
    int lengthOfCipher = 0;

    lengthOfWord = length(keyWord);
    lengthOfCipher = length(cipherText);


    while (keyWord[keyColumn] != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyWord[keyColumn + offset] != cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
            cipherColumn++;
            continue;
        }
    }

ก่อนที่ฉันจะมีชื่อตัวแปรที่ยาวมากฉันมีสิ่งต่าง ๆ เช่น i, j, k แต่อาจารย์ของฉันยืนยันว่าเราจะไม่ใช้ตัวแปรเช่นนั้นใน "โลกมืออาชีพ" และแม้แต่ตัวแปรที่สั้นลงเช่น lenWord ก็ไม่เพียงพอเพราะผู้คนอาจคิดว่า มันหมายถึง "วรรณกรรมของโลกเลนนาร์ด" เขาบอกว่าจะเลือกชื่อตัวแปรที่มีความหมาย แต่โดยการทำเช่นนั้นฉันรู้สึกเหมือนว่าฉันได้ทำลายกฎทองของการเข้ารหัสเพื่อให้อยู่ภายใต้คอลัมน์ 80 คอลัมน์ ฉันจะรับสิ่งนี้ได้อย่างไร


26
ทำต่อไป; เพิ่มชื่อที่มีประโยชน์มากขึ้น คุณลองนึกถึงวิธีอธิบายcipherColumn + (rowSize*nextWord) + nextWordที่ทำให้ชัดเจนว่าการคำนวณนั้นใช้เพื่ออะไร ฉันเดิมพันว่าชื่อนั้นสั้นกว่าการคำนวณดังนั้นคุณจะได้รับประโยชน์การอ่านและความยาวบรรทัดลดลง อย่าปรับการกำหนดหรือคุณต้องย้ายมันทั้งหมดถ้าคุณเปลี่ยนชื่อตัวแปรที่ยาวที่สุด
jonrsharpe

2
อืม .. คุณกำลังพูดว่าฉันควรสร้างตัวแปรใหม่และเก็บผลลัพธ์ของ cipherColumn + (rowSize * nextWord) + nextWord ลงไปเพื่อให้ฉันสามารถใช้เพิ่มเติมได้หรือไม่ นั่นคือสิ่งที่ข้อดีทำอย่างไร ฉันกำลังถามอย่างแท้จริง
RaulT

8
ใช่นั่นคือข้อเสนอแนะของฉัน ฉันเป็นมืออาชีพและเป็นสิ่งที่ฉันทำดังนั้นบางคนก็เป็นอย่างน้อย
jonrsharpe

11
กฎทองคือการเขียนโค้ดที่สามารถอ่านและเข้าใจได้ เราเขียนโค้ดสำหรับคนอื่น (!) ไม่ใช่สำหรับเครื่อง สำหรับเครื่องที่มีรหัสเครื่อง สำหรับบางรหัสที่ดูเหมือนว่าคุณอธิบาย (ชื่อตัวอักษรเดี่ยว ฯลฯ ) คือการขาดความเคารพต่อโปรแกรมเมอร์อื่น ๆ (และในอนาคตคุณ - เพราะคุณจะลืมในอีกไม่กี่สัปดาห์หรือเดือนถัดไป) ไม่มีเหตุผลที่จะติดกับ 80 คอลัมน์ไม่ใช่ MS DOS ในยุค 80
rsm

3
@stijn ใช่ แต่เป็นครั้งสุดท้ายที่เราต้องการมัน เช่นเดียวกับที่ฉันไม่ได้รวบรวมรหัส c ของฉันสำหรับโปรเซสเซอร์ 8 บิต 8086 ในกรณีที่ฉันต้องการเก็บไว้ในการ์ดเจาะฉันยังไม่คิดว่า80 คอลัมน์ทองคำ stardardมีความสำคัญใด ๆ ในศตวรรษที่ 21 เราควรยืดเทคโนโลยีนี้ไม่ใช่นั่งในยุค 80 และคิดว่ามันทำให้เราแฮ็กเกอร์ฉลาดขึ้น ฉลาดคือความเรียบง่ายความสามารถในการอ่านและการผลักดันเทคโนโลยีให้สูงสุด เรามีจอภาพแบบ full-hd ถึงเวลาที่จะใช้งานแล้ว
rsm

คำตอบ:


24

โดยปกติเมื่อฉันเห็นรหัสที่โพสต์ที่นี่เช่นคุณฉันแก้ไขเพราะเราเกลียดการเลื่อนในแนวนอน แต่เนื่องจากเป็นส่วนหนึ่งของคำถามของคุณฉันจะแสดงการแก้ไขที่นี่:

int extractMessage(char keyWord[25], char cipherText[17424],
                   int rowSize, char message[388]) 
{
    int keyColumn    = 0;
    int cipherColumn = 0;
    int offset       = 1;
    int nextWord     = 1;

    int lengthOfWord   = 0;
    int lengthOfCipher = 0;

    lengthOfWord = length(keyWord);
    lengthOfCipher = length(cipherText);


    while (keyWord[keyColumn] != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyWord[keyColumn + offset] 
        != cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
            cipherColumn++;
            continue;
        }
    }
}

แบ่งนั่นอาจจะเป็นที่น่าแปลกใจ แต่ก็อ่านได้มากขึ้นกว่ารุ่นที่มีเลื่อนแนวนอนและจะดีกว่าการตัดทอนชื่อเพื่อi, และjk

มันไม่ใช่ว่าคุณไม่ควรใช้i, และj kเหล่านี้เป็นชื่อที่ดีเมื่อทำดัชนีforลูปซ้อนกัน 3 รายการ แต่ที่นี่ชื่อเป็นเบาะแสเดียวของฉันเกี่ยวกับสิ่งที่คุณคาดว่าจะเกิดขึ้น โดยเฉพาะอย่างยิ่งเนื่องจากรหัสนี้ไม่ได้ทำอะไรเลย

กฎที่ดีที่สุดที่จะติดตามความยาวชื่อตัวแปรคือขอบเขต ยิ่งตัวแปรมีอายุการใช้งานนานเท่าไหร่ตัวแปรที่ยิ่งใหญ่กว่าชื่อของมันก็จะต้องแข่งขันกัน ชื่อCandiedOrangeไม่ซ้ำกันในการแลกเปลี่ยนสแต็ค ถ้าเราอยู่ในการแชทคุณอาจเรียกฉันว่า "แคนดี้" แต่ตอนนี้คุณอยู่ในขอบเขตที่ชื่อที่อาจจะสับสนกับCandide , ขนมหวานชิวหรือCandyfloss ดังนั้นขอบเขตที่ยาวขึ้นชื่อก็ควรจะยาวขึ้น ขอบเขตที่สั้นลงชื่อที่สั้นกว่าก็จะเป็นได้

ความยาวบรรทัดไม่ควรกำหนดความยาวชื่อ หากคุณรู้สึกว่ามันเป็นวิธีที่แตกต่างกันในการวางรหัสของคุณ เรามีเครื่องมือมากมายที่จะช่วยคุณทำเช่นนั้น

หนึ่งในสิ่งแรกที่ฉันมองหาคือเสียงที่ไม่จำเป็นในการกำจัด น่าเสียดายที่ตัวอย่างนี้ไม่ได้ทำอะไรเลยมันเป็นเสียงที่ไม่จำเป็น ฉันต้องการบางสิ่งบางอย่างเพื่อทำงานด้วยก่อนอื่นมาทำมันกันเถอะ

int calcCipherColumn(char keyWord[25], char cipherText[17424],
                     int rowSize, char message[388]) 
{
    int keyColumn    = 0;
    int cipherColumn = 0;
    int offset       = 1;
    int nextWord     = 1;

    int lengthOfWord   = 0;
    int lengthOfCipher = 0;

    lengthOfWord = length(keyWord);
    lengthOfCipher = length(cipherText);

    while (keyWord[keyColumn] != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyWord[keyColumn + offset] 
        != cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
            cipherColumn++;
            continue;
        }
    }
    return cipherColumn;
}

ตอนนี้มันทำอะไรบางอย่าง

ตอนนี้มันทำอะไรซักอย่างฉันสามารถเห็นสิ่งที่ฉันสามารถกำจัดได้ สิ่งที่ความยาวนี้ไม่ได้ใช้ นี่continueไม่ได้ทำอะไรเลย

int calcCipherColumn(char keyWord[25], char cipherText[17424],
                     int rowSize, char message[388]) 
{
    int keyColumn    = 0;
    int cipherColumn = 0;
    int offset       = 1;
    int nextWord     = 1;

    while (keyWord[keyColumn] != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyWord[keyColumn + offset] 
        != cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
            cipherColumn++;
        }
    }
    return cipherColumn;
}

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

int calcCipherColumn(char keyWord[25], char cipherText[17424],
                     int rowSize, char message[388]) 
{
    int keyColumn = 0;
    int cipherColumn = 0;
    int offset = 1;
    int nextWord = 1;

    while (keyWord[keyColumn] != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyWord[keyColumn + offset] 
        != cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
            cipherColumn++;
        }
    }
    return cipherColumn;
}

ใช่ฉันรู้ว่ามันอ่านได้น้อยลงเล็กน้อย แต่อย่างอื่นคุณจะทำให้ผู้คนบ้าคลั่งที่ใช้เครื่องมือ vdiff เพื่อตรวจจับการเปลี่ยนแปลง

ทีนี้ลองมาแก้ไขเส้นแบ่งโง่ที่เรามีเพราะเราพยายามอยู่ภายใต้ขีดจำกัดความยาวบรรทัด

int calcCipherColumn(
        char keyWord[25], 
        char cipherText[17424],
        int rowSize, 
        char message[388]
) {
    int keyColumn = 0;
    int keyOffset = 1;

    int nextWord = 1;
    int cipherColumn = 0;
    int cipherOffset = (rowSize * nextWord) + nextWord;

    char key = keyWord[keyColumn];
    char keyNext = keyWord[keyColumn + keyOffset];

    while (key != cipherText[cipherColumn]) {
        cipherColumn++;
        if (keyNext != cipherText[cipherColumn + cipherOffset]) {
            cipherColumn++;
        }
    }
    return cipherColumn;
}

ที่นั่นตอนนี้ตรรกะในลูปจะเน้นไปที่การเปลี่ยนแปลงในลูป อันที่จริงทุกอย่างยกเว้นcipherColumnสามารถทำเครื่องหมายfinalได้ และเฮ้! ดูนั่นสิ ตอนนี้เรามีห้องให้ทำ

ทั้งหมดที่ฉันทำคือเพิ่มตัวแปรอีก 3 ตัวเปลี่ยนชื่อใหม่และจัดเรียงใหม่อีกเล็กน้อย และผลลัพธ์ก็เกิดขึ้นเพื่อทำให้เส้นสั้นพอที่จะให้พอดีโดยไม่ต้องมีการเรียงตัวโง่!=

แน่ใจว่าชื่อkeyและkeyNextไม่ใช่คำอธิบายนั้น แต่พวกเขาแต่ละคนจะได้ใช้เพียงครั้งเดียวอย่ามีชีวิตอยู่นานขนาดนั้นและที่สำคัญที่สุดคือไม่ได้ทำอะไรที่น่าสนใจในวง ดังนั้นพวกเขาไม่จำเป็นต้องเป็น ด้วยการแนะนำตัวแปรเพิ่มเติมตอนนี้เรามีพื้นที่ที่จะทำให้ชื่อของพวกเขายาวถ้าเราต้องการ สิ่งต่าง ๆ เปลี่ยนแปลงดังนั้นในที่สุดเราอาจจำเป็นต้อง ถ้าเราทำมันดีที่เรามีห้องหายใจ

ฉันใช้เสรีภาพในการแสดงรูปแบบตัวแปร 6 แบบของเจฟฟ์กริกก์ในการวางพารามิเตอร์อินพุตเพื่อเคารพข้อจำกัดความยาวของบรรทัด


ว้าวนั่นเป็นคำอธิบาย! ใช่ฉันรู้ว่ารหัสไม่ได้ทำอะไรเลยฉันอาจจะโพสต์มากกว่าตัวอย่างเล็ก ๆ ของมัน แต่ฉันคิดว่าฉันพยายามที่จะเข้าใจความคิดทั่วไปเกี่ยวกับสิ่งที่มืออาชีพทำเกี่ยวกับความยาวคอลัมน์รหัสและชื่อตัวแปร แต่คำตอบของคุณแสดงให้เห็นถึงการเปลี่ยนแปลงที่น่ารักบางอย่างที่ฉันจะนำไปใช้ในรหัสของฉันนับจากนี้ไป! อีกหนึ่งคำถามที่ฉันมีคือคุณคิดว่ามันเหมาะสมที่จะทำการแพร่ระบาดหรือไม่ ก่อนที่ผู้ประกอบการ? มี "มาตรฐาน" ที่ยอมรับหรือไม่
RaulT

1
@RaulT ใช้เวลาอ่านสิ่งใดก็ตามที่โค้ดเบสของคุณทำงานอยู่มันจะทำให้คุณมีความคิดว่าคุณสามารถใช้อะไรได้บ้างซึ่งจะไม่ทำให้เซอร์โค้ดคนอื่นประหลาดใจ ปฏิบัติตามเอกสารมาตรฐานหากคุณมี แต่สิ่งที่ดีที่สุดคือถามเพื่อนโปรแกรมเมอร์และถามพวกเขาว่าสิ่งที่คุณอ่านนั้นเป็นอย่างไร โอ้และดู codereview.stackexchange.com
candied_orange

ฉันจะเพิ่มความคิดเห็นด้านล่างcipherOffsetและอธิบายการคำนวณเพราะสูตรนั้นไม่ชัดเจน คุณจะลืมทำไมในสามสัปดาห์
เนลสัน

15

คนอื่น ๆ ได้ทำคำแนะนำที่มีประโยชน์แล้วให้ฉันสรุป:

  • 80 ตัวอักษรต่อบรรทัดอาจเป็นกฎทองในยุค 80 ทุกวันนี้คนส่วนใหญ่ยอมรับว่า 100 ถึง 130 ตัวอักษรเป็นเรื่องปกติ
  • ใช้การแบ่งบรรทัดภายในนิพจน์ของคุณ
  • แบ่งการแสดงความยาวโดยแนะนำผลลัพธ์ระดับกลาง

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

ตัวอย่างเช่นถ้าคุณมีตัวแปรสำหรับคอลัมน์ของตารางการเข้ารหัสคำหลักของคุณและมันเป็นที่ชัดเจนว่ามีเพียงหนึ่งโต๊ะที่ใช้ในขอบเขตของตัวแปรของคุณก็เป็นเรื่องปกติที่จะเรียกมันหรือแม้กระทั่งcolumn colหากขอบเขตมีขนาดใหญ่ขึ้นและมีหลายตารางที่เกี่ยวข้องจะเหมาะสมที่จะเรียกkeyWordEncryptionTableColumnใช้

อีกตัวอย่างหนึ่ง: iถ้าคุณมีห่วงกับร่างกายทอดสองหรือสามสายและมีการใช้ดัชนีสำหรับการเข้าถึงองค์ประกอบของอาร์เรย์มีอะไรผิดปกติกับการเรียกดัชนี ในบริบทนี้มันเป็นมากขึ้นสามารถอ่านได้ (สำหรับคนส่วนใหญ่อย่างน้อย) arrayIndexOfMyVerySpecialDataSetกว่าการพูด


1
ฉันเห็นด้วยกับคุณตอบ ที่ทำงานเราใช้ 80 ตัวอักษรต่อบรรทัดสำหรับ c / c ++ เพื่อเหตุผลดั้งเดิมและเพราะเราใช้คำวิจารณ์ สำหรับ C # 100 ตัวอักษร / บรรทัดบางครั้งฉันก็ทำผิดและไปกว่า 100 เล็กน้อยเพื่อให้อ่านง่าย
peval27

ว้าวช่างเป็นคำตอบที่ดีมาก !! คำตอบเหล่านี้ยอดเยี่ยมมากขอบคุณสำหรับความช่วยเหลือที่ฉันขอบคุณ!
RaulT

ฉันเห็นด้วยอย่างยิ่งกับการกดความคิดที่ว่าอักขระ 80 บรรทัดล้าสมัยแล้ว มันยังคงใช้สำหรับบางโครงการและสถานที่ (ส่วนใหญ่เพื่อความมั่นคง) แต่สำหรับหลาย ๆ คนมันไม่จำเป็นเพียงธรรมดาเท่านั้น devs จำนวนมากใช้สิ่งที่ต้องการเช่น Visual Studio หรือ IntelliJ บนหน้าจอเต็มและมีจอภาพที่สองสำหรับสิ่งอื่น ๆ (เอกสารประกอบ ฯลฯ ) พวกเขาจึงมีหน้าจออสังหาริมทรัพย์มากมายสำหรับรหัสของพวกเขา หากคุณใช้เพียง 80 ตัวอักษรต่อบรรทัดคุณอาจมีพื้นที่ว่างที่ไม่ได้ใช้มากมาย และขีด จำกัด ของตัวละคร 80 ทำให้คุณเจ็บ! โดยเฉพาะอย่างยิ่งเมื่อคุณพิจารณาว่า lib มาตรฐานสามารถบังคับชื่อลายาวได้
Kat

1
ประเด็นของฉันคือในบางภาษาไม่มีการหลีกเลี่ยงความจริงที่ว่า 80 ตัวอักษรเป็นข้อ จำกัด ที่ยิ่งใหญ่ แล้วทำไมมันถึงมีความจำเป็น? นอกจากนี้ยังมีการกล่าวถึงว่าบรรณาธิการชื่อใหญ่และ IDEs ทุกคนล้วนมีคำนุ่มนวลที่ยอดเยี่ยมในทุกวันนี้ซึ่งช่วยให้คุณไม่จำกัดความยาวของบรรทัดทั้งหมด คุณสามารถให้ความยาวบรรทัดเป็นสิ่งที่ผู้อ่านมองเห็นได้ พวกเขาสามารถปรับขนาดหน้าต่างเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ฉันพบว่าวิธีนี้เป็นการส่วนตัวในบางครั้ง และฉันยังไม่ผิดหวังกับวิธีการห่อแบบอ่อนนี้
Kat

เมื่อใดก็ตามที่คุณใช้ชื่อตัวแปรแบบง่ายคุณจะต้องมั่นใจในขอบเขต 100% ฉันใช้เวลาสามชั่วโมงเพื่อเรียนรู้เกี่ยวกับการปิด JavaScript
เนลสัน

3

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

เกี่ยวกับการสรุป

ExtractMessage(char keyWord[25], char cipherText[17424],
               int rowSize, char message[388]) 

สิ่งนี้ไม่มีจุดประสงค์เพียง จำกัด ความยาวของบรรทัดไม่ทำให้อ่านง่ายขึ้น หากคุณต้องการให้สิ่งนี้สามารถอ่านได้ให้ทำสิ่งนี้:

ExtractMessage(
  char keyWord[25],
  char cipherText[17424],
  int rowSize,
  char message[388]
  )
{

และจากนั้นคุณอาจต้องการจัดตำแหน่งตัวระบุประเภท (เพิ่มช่องว่างหลังจาก int) อย่างไรก็ตามควรระวัง / จำกัด ด้วยการสรุป initalizations หรือรายการอาร์กิวเมนต์ดังนี้:

int keyColumn    = 0;
int cipherColumn = 0;
int offset       = 1;
int nextWord     = 1;

ปัญหาคือเมื่อคุณเปลี่ยนชื่อหรือเพิ่มตัวแปรคุณอาจต้องฟอร์แมตใหม่ทั้งบล็อกเพื่อรักษารูปลักษณ์ที่สวยงาม มันไม่ได้มีไว้สำหรับการทำงานเท่าที่การเปลี่ยนแปลงที่ไม่มีความหมายที่คุณจะแนะนำมันจะดูน่ากลัวในระบบควบคุมเวอร์ชัน เพื่อนร่วมงานของคุณจะเห็นคุณเปลี่ยนไฟล์และทำสิ่งที่แตกต่างกับเวอร์ชันก่อนหน้าเพื่อดูสิ่งที่คุณทำ จากนั้นทุกบรรทัดจะสว่างขึ้นเมื่อมีการเปลี่ยนแปลงปิดบังการเปลี่ยนแปลงที่แท้จริง มันจะขึ้นอยู่กับคุณภาพของเครื่องมือเปรียบเทียบที่ใช้จริง ๆ แล้วมันจะแย่ขนาดนี้ แต่โดยทั่วไปแล้วมันก็ไม่ควรทำรหัสส่วนตัวเกินไปและ / หรือการจัดรูปแบบของหนึ่งบรรทัดขึ้นอยู่กับอีก

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

โปรดทราบว่าสถานที่ทำงานอาจมีการจัดรูปแบบอัตโนมัติที่เกิดขึ้นซึ่งจะกำจัดรูปแบบแฟนซีใด ๆ ที่คุณทำกับโค้ดของคุณก่อนที่จะส่งไปยังระบบควบคุมเวอร์ชัน


1
โดยส่วนตัวบล็อกรหัสแรกในคำตอบของคุณสามารถอ่านได้มากกว่าบล็อกที่สอง
Miles Rout

1
ไม่เคยทำสิ่งที่สามมันเป็นฝันร้ายของการบำรุงรักษาที่จะทำให้มันเป็นอย่างนั้น
jwenting

3

ข้อจำกัดความรับผิดชอบ: ฉันพูดเกินจริงไปเล็กน้อยเพื่อทำให้ประเด็นของฉันชัดเจนขึ้น ดังนั้นให้นำสุดยอดด้วยเม็ดเกลือ

ครูของคุณถูกต้อง 100%: ไม่มี "กฎทอง" ประมาณ 80 ตัวอักษรอีกต่อไป (เว้นแต่ว่าคุณกำลังเขียนโค้ดลินุกซ์นั่นคือ) กฎนั้นได้รับการจัดตั้งขึ้นเนื่องจากขนาดของเทอร์มินัลในเวลานั้น แต่ทุกวันนี้คุณสามารถอัดตัวอักษรได้มากกว่า 150 ตัวในหน้าต่างเอนเดอร์ของคุณ และแม้ว่าคุณจะเกินขีด จำกัด ตัวแก้ไขของคุณจะหวังว่าจะตัดบรรทัดให้นุ่มเพื่อที่คุณไม่ต้องเลื่อน และเหตุผลเดียวที่จะได้ไปไกลกว่า 80 ตัวอักษรเป็นความต้องการของการเลื่อน

ที่กล่าวว่ามีความจำเป็นที่จะไม่ปล่อยให้บรรทัดของคุณเติบโตอย่างไม่มีกำหนด ยิ่งสายยาวขึ้นเท่าไหร่มันก็ยิ่งยากขึ้นสำหรับมนุษย์ที่จะแยกวิเคราะห์ แต่ชื่อตัวแปรสั้นไม่เป็นวิธีการรักษาสำหรับปัญหาเส้นยาว

วิธีการรักษาคือการแยกการแสดงออกของคุณมีเหตุผลโดยการแนะนำชื่อตัวแปรที่ถูกต้องมากยิ่งขึ้น อย่าพยายามฉลาดด้วยช่องว่าง เพียงระบุ subexpression ใด ๆ ที่สามารถตั้งชื่อ aptly และสร้างตัวแปรให้ ที่ทำให้ทั้งรหัสคำนวณตัวแปรได้ง่ายขึ้นและโค้ดที่ใช้ตัวแปรนั้น


ไม่ใช่ส่วนหนึ่งของคำถามของคุณ แต่ฉันต้องการที่จะแสดงความคิดเห็นกับมัน: มันเป็นความคิดที่ดีมากที่จะจัดแนว=โอเปอเรเตอร์ของคุณในแนวตั้ง

มีสามเหตุผลคือ:

  1. การแก้ไขบล็อกที่มีตัวดำเนินการที่ได้รับการกำหนดแนวตั้งคือ PITA เมื่อใดก็ตามที่ความยาวของตัวแปรเปลี่ยนแปลงมากที่สุด (เปลี่ยนชื่อเพิ่มลบ) คุณต้องรีทัชทุกบรรทัดในบล็อกเพื่อให้เลย์เอาต์ "nice" ของคุณกลับมาอีกครั้ง

    แน่นอนว่าปัญหานี้อาจลดลงเล็กน้อยโดยใช้เครื่องมือแก้ไขที่มีความสามารถดังนั้นจึงเป็นเหตุผลเล็กน้อย เหตุผลที่แท้จริงคือข้อที่สอง:

  2. gitบรรดาช่องว่างปลอมเปลี่ยนแปลงการแนะนำให้รู้จักในวงกว้างไม่เล่นอย่างกับระบบการควบคุมรุ่นที่ทันสมัยเช่น พวกเขามีแนวโน้มที่จะสร้างความขัดแย้งผสานจำนวนมากโดยที่ไม่มีความขัดแย้งเกิดขึ้นจริงและในกรณีที่ไม่มีข้อขัดแย้งใด ๆ จะถูกส่งสัญญาณหากไม่ได้ใช้การจัดตำแหน่ง ความขัดแย้งปลอมเหล่านี้แต่ละครั้งจะทำให้คุณเสียเวลาอันมีค่าไป

  3. การจัดตำแหน่งดำเนินการศูนย์ความหมาย semantical มันไม่มีจุดหมาย ไม่มีอะไรที่คุณสามารถเข้าใจได้ดีขึ้นด้วยการจัดตำแหน่ง ทุกบรรทัดในบล็อกของคุณจำเป็นต้องอ่านด้วยตัวเองเพื่อทำความเข้าใจว่ามันทำอะไรการเชื่อมต่อกับบรรทัดด้านบนและด้านล่างนั้นเป็นลักษณะของการสร้างประโยคอย่างแท้จริง

เนื่องจากการจัดตำแหน่งไม่ได้มีความหมายเชิงความหมายใด ๆ แต่ก่อให้เกิดค่าใช้จ่ายที่สำคัญคุณควรปลดเปลื้องนิสัยก่อนที่จะเสียค่าใช้จ่ายอีกต่อไป


ถ้าคุณชอบความยาว 80 ตัวอักษรลองใช้การเขียนโปรแกรม Fortran จริงมาตรฐานใหม่เพิ่มขีด จำกัด บรรทัด Fortran เป็น 132 ตัวอักษร แต่มันยังคงมีผลเช่นเดียวกับที่ทำให้การรวบรวมโปรแกรมใด ๆ ที่เกินขีด จำกัด หากคุณเก่งเรื่องการเขียนโปรแกรมคุณจะเกลียดชัง Fortran รวมถึงขีดจำกัดความยาวบรรทัด หลังจากนั้นคุณจะหายเป็นปกติตลอดชีวิต

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


3

การประชุมโวหารมากมาย(ไม่ใช่กฎ!) ผุดขึ้นมาหลายปีเนื่องจากข้อ จำกัด ในสภาพแวดล้อมการเขียนโปรแกรม ย้อนกลับไปในวันชกการ์ดคุณมี ฮาร์ดข้อ จำกัด เกี่ยวกับจำนวนตัวอักษรที่สามารถปรากฏบนบรรทัดแหล่งทางกายภาพ (ซึ่งเป็นเหตุผลที่ Fortran ลิขสิทธิ์คอลัมน์ 6 สำหรับตัวอักษรต่อของบรรทัด) เมื่อไม่กี่สิบปีก่อนที่ฉันทำงานกับเทอร์มินัล VT220 สีเหลืองอำพัน - ดำ - ดำ 80x24; ในขณะที่บรรณาธิการที่ฉันใช้ไม่ได้ จำกัด บรรทัดไว้ที่ 80 ตัวอักษรชีวิตง่ายขึ้นมากถ้าคุณพยายามอย่างที่สุดที่จะหลีกเลี่ยงการเลื่อนแนวนอน

ภายใต้ Fortran เวอร์ชันเก่า (สูงถึง '77, IINM) คุณไม่สามารถมีตัวระบุที่ยาวกว่า 6 ถึง 8 ตัวอักษร แม้เป็นปลายยุค 80, C จะรับประกันเท่านั้นที่ 8 ตัวแรกในชื่อภายนอกมีความหมาย (ซึ่งเป็นเหตุผลที่บางฟังก์ชั่นห้องสมุดมีชื่อที่เป็นคำอธิบายที่เยี่ยมยอดเช่นstrpbrk)

แน่นอนว่าสองทศวรรษในศตวรรษที่ 21 เราไม่มีข้อ จำกัด เหล่านั้นอีกต่อไป ไม่มีเหตุผลที่จะไม่ใช้ตัวระบุที่เป็นคำอธิบายเพิ่มเติม

สิ่งที่เป็นในบริบทที่เหมาะสมiและjและkมีความสมบูรณ์แบบที่เหมาะสมชื่อที่มีความหมาย หากฉันวนซ้ำอาร์เรย์หรือเวกเตอร์เป็นวงกลมและฉันต้องการบางสิ่งบางอย่างเพื่อระบุองค์ประกอบปัจจุบันiทำงานได้ดีอย่างสมบูรณ์ ฉันจะไม่ใช้ชื่อเช่นcurrentElement- มันไม่มีความหมายในบริบทนั้นและมันเพิ่มความยุ่งเหยิงทางสายตา

ต้องบอกว่าอาจารย์ของคุณไม่ผิดที่จะบังคับให้คุณคิดในแง่ของชื่อที่ยาวกว่าและมีความหมายมากขึ้นสำหรับทุกสิ่ง - ชีวิตจะง่ายขึ้นสำหรับคุณถ้าคุณเคยชินกับนิสัยนั้นก่อน เป็นคนที่เป็นที่ครั้งหนึ่งถูกบังคับให้พอดีทุกอย่างลงใน 8 ตัวอักษรหรือน้อยกว่าก็แน่นอนดีกว่าที่จะผิดพลาดในด้านของข้อมูลที่มากกว่าน้อยกว่า ในขณะที่คุณได้รับประสบการณ์มากขึ้นคุณจะได้เรียนรู้ว่าคุณสามารถประหยัดได้ตามความยาวของตัวระบุและที่ใดที่คุณต้องอธิบายให้ละเอียดมากขึ้น


-1

ฉันไม่แน่ใจว่ามันใช้งานได้กับ c หรือไม่ แต่มีวิธีแยกสูตรในหลายบรรทัดหรือไม่ ฉันรู้ว่ามีบางอย่างที่เหมือนกันสำหรับงูหลาม

ดูว่าคุณสามารถเริ่ม + (rowSize * nextWord) + nextWord]) {ในบรรทัดใหม่ (เช่นกด Enter ใน IDE ของคุณและดูว่ามันเยื้องหรือไม่เพื่อให้ C ทราบว่าการแสดงออกก่อนหน้านี้จะเสร็จสมบูรณ์ในบรรทัดปัจจุบัน)


1
ใช่มันเป็นไปได้อย่างแน่นอน C จะจดจำบรรทัดและบรรทัดของรหัสจนกว่าคุณจะเพิ่มอัฒภาค ปัญหาที่เกิดขึ้นก็คือฟังก์ชั่นของเราต้องไม่เกิน 50 บรรทัดและแม้ว่าโค้ดตัวอย่างของฉันจะไม่มี 50 บรรทัดมันเป็นเพียงเศษเสี้ยวของฟังก์ชั่นทั้งหมดของฉัน ฉันรู้สึกหดหู่อย่างหนักในการเขียนในกล่องขนาด 50 x 80 อัลกอริทึมที่มีตัวแปรที่มีความหมายซึ่งสามารถใช้งานฟังก์ชั่นที่ฉันต้องการได้เช่นกัน ฉันสามารถเก็บรหัสยาว ๆ เหล่านี้ไว้ในฟังก์ชั่นใหม่ ๆ ได้ แต่ฉันรู้สึกว่าฉันจะจบลงด้วยการใช้งานฟังก์ชั่นมากมายผู้คนจะสูญเสียการอ่านรหัส
RaulT

5
"ฉันรู้สึกว่าฉันจะจบลงด้วยการเรียกใช้ฟังก์ชั่นมากมายผู้คนจะสูญเสียการอ่านรหัส" ค่อนข้างตรงกันข้าม! การแยกรหัสออกเป็นวิธีการแยกช่วยให้คุณสามารถตั้งชื่อที่สื่อความหมายได้เพิ่มความสามารถในการอ่านได้ ถ้าคุณจบด้วยวิธีที่มากเกินไปในชั้นเรียนของคุณอาจทำไปมาก (หลักการความรับผิดชอบเดียว) การแยกเมธอดลงในคลาสที่แยกต่างหากอีกครั้งช่วยให้คุณสามารถตั้งชื่อที่สื่อความหมายได้
Roman Reiner

ฟังก์ชั่นใด ๆ ที่เข้าใกล้ 50 บรรทัดอาจยาวเกินไปและซับซ้อนเกินไป (มีข้อยกเว้นที่เป็นไปได้ของการเริ่มต้นข้อมูลด้วยความซับซ้อน 1) แต่โดยทั่วไปเมื่อมีการ จำกัด เช่นที่กล่าวถึงพวกเขาเป็นบรรทัดของรหัสไม่ใช่บรรทัดข้อความ บรรทัดของรหัสคืออัฒภาคมักจะไม่ถูกนับเป็นบรรทัดพิเศษให้ตรวจสอบกับ Prof!
Steve Barnes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.