Tôi có hy sinh các tên biến ngắn hơn cho mã dài hơn có cột không?


17

Tôi là một lập trình viên nghiệp dư trong một lớp CS cố gắng học các kỹ năng lập trình phù hợp. Đây là cách mã của tôi trông, các cạnh của nó mở rộng đến 103 cột.

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;
        }
    }

Trước khi tôi có những tên biến siêu dài đó, tôi có những thứ như i, j, k, nhưng giáo sư của tôi khẳng định rằng chúng tôi không sử dụng các biến như thế trong "thế giới chuyên nghiệp" và thậm chí các biến rút ngắn như lenWord là không đủ vì mọi người có thể cho rằng nó là viết tắt của "Văn học thế giới của Lennard". Anh ta nói chọn các tên biến có ý nghĩa nhưng bằng cách đó tôi cảm thấy như mình đã phá vỡ Quy tắc vàng về mã hóa để giữ nó dưới 80 cột. Làm thế nào để tôi có được xung quanh này?


26
Tiếp tục đi; thêm tên hữu ích hơn . Bạn có thể nghĩ ra một cách để mô tả cipherColumn + (rowSize*nextWord) + nextWordmà làm cho nó rõ ràng những gì tính toán đó là cho , ví dụ? Tôi cá rằng tên đó ngắn hơn tính toán, vì vậy bạn sẽ có được lợi ích dễ đọc giảm độ dài dòng. Ngoài ra, không căn chỉnh các bài tập, hoặc bạn phải di chuyển tất cả chúng nếu bạn đổi tên biến dài nhất.
jonrsharpe 18/03/2017

2
Hmm .. vì vậy, bạn đang nói rằng tôi nên tạo một biến mới và lưu trữ kết quả của cextColumn + (rowSize * nextWord) + nextWord vào nó để tôi có thể sử dụng nó thêm? Đó là những gì các chuyên gia làm? Tôi thực sự đang hỏi
RaulT 18/03/2017

8
Vâng, đó là đề nghị của tôi. Tôi là dân chuyên nghiệp và đó là những gì tôi sẽ làm, vì vậy ... ít nhất là một số trong số họ.
jonrsharpe

11
nguyên tắc vàng là viết mã có thể đọc và hiểu. chúng tôi viết mã cho người khác (!) không phải cho máy móc. cho máy có mã máy. đối với một số người, mã trông giống như bạn mô tả (tên một chữ cái, v.v.) là sự thiếu tôn trọng đối với các lập trình viên khác (và cả bạn trong tương lai - bởi vì bạn sẽ quên trong vài tuần hoặc vài tháng tới). không có lý do gì để bám vào 80 cột, đó không phải là MS DOS trong thập niên 80.
rsm

3
@stijn vâng, nhưng đó là lần cuối cùng chúng tôi cần nó. giống như tôi không biên dịch mã c của mình cho bộ xử lý 8-bit 8086 trong trường hợp tôi cần lưu trữ nó trên thẻ đục lỗ, tôi cũng không nghĩ rằng cột vàng 80 cột có ý nghĩa gì trong thế kỷ 21. chúng ta nên mở rộng công nghệ này, không ngồi trong thập niên 80 và nghĩ rằng nó làm cho chúng ta trở thành những hacker thông minh. thông minh là sự đơn giản, dễ đọc và đẩy công nghệ đến mức tối đa. chúng tôi có màn hình full-hd, đã đến lúc sử dụng nó.
rsm

Câu trả lời:


24

Thông thường khi tôi thấy mã được đăng ở đây giống như của bạn, tôi chỉnh sửa nó, vì chúng tôi ghét cuộn ngang. Nhưng vì đó là một phần câu hỏi của bạn, tôi sẽ chỉ cho bạn chỉnh sửa ở đây:

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;
        }
    }
}

Nghỉ mà bạn có thể ngạc nhiên, nhưng nó dễ đọc hơn so với phiên bản cuộn ngang, và đó là tốt hơn so với rút ngắn tên để i, jk.

Nó không phải là bạn không bao giờ nên sử dụng i, jk. Đó là những cái tên đẹp khi lập chỉ mục 3 forvòng lặp lồng nhau . Nhưng ở đây, những cái tên thực sự là manh mối duy nhất của tôi về những gì bạn dự kiến ​​sẽ xảy ra. Đặc biệt là vì mã này không thực sự làm gì cả.

Quy tắc tốt nhất để làm theo chiều dài tên biến là phạm vi. Cuộc sống biến càng dài, tên biến của nó càng phải cạnh tranh. Tên CandiedOrange là duy nhất trên trao đổi ngăn xếp. Nếu chúng tôi đang trò chuyện, bạn có thể gọi tôi là "Candy". Nhưng ngay bây giờ, bạn đang ở trong một phạm vi mà tên đó có thể bị nhầm lẫn với Candide , Candy Chiu hoặc Candyfloss . Vì vậy, phạm vi càng dài, tên càng dài. Phạm vi càng ngắn, tên càng ngắn.

Độ dài dòng không bao giờ chỉ ra chiều dài tên. Nếu bạn cảm thấy như vậy thì hãy tìm một cách khác để trình bày mã của bạn. Chúng tôi có nhiều công cụ để giúp bạn làm điều đó.

Một trong những điều đầu tiên tôi tìm kiếm là tiếng ồn không cần thiết để loại bỏ. Thật không may, ví dụ này không làm gì cả, vì vậy tất cả đều là tiếng ồn không cần thiết. Tôi cần một cái gì đó để làm việc với vì vậy trước tiên hãy làm cho nó làm một cái gì đó.

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;
}

Ở đó, bây giờ nó làm một cái gì đó.

Bây giờ nó làm một cái gì đó, tôi có thể thấy những gì tôi có thể thoát khỏi. Thứ chiều dài này thậm chí không được sử dụng. Điều này continuecũng không làm gì cả.

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;
}

Chúng ta hãy thực hiện một số điều chỉnh không gian trắng nhỏ, bởi vì chúng ta sống trong một thế giới kiểm soát nguồn và thật tuyệt khi lý do duy nhất một dòng được báo cáo là thay đổi là vì nó làm một cái gì đó khác nhau, không phải vì một phần của nó phải xếp hàng trong một cột.

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;
}

Vâng, tôi biết nó hơi khó đọc nhưng nếu không, bạn sẽ khiến mọi người phát điên khi sử dụng các công cụ vdiff để phát hiện các thay đổi.

Bây giờ chúng ta hãy sửa những ngắt dòng ngớ ngẩn mà chúng ta có bởi vì chúng ta đang cố gắng duy trì giới hạn độ dài của dòng.

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;
}

Ở đó, bây giờ logic trong vòng lặp được tập trung vào những gì thay đổi trong vòng lặp. Trong thực tế, tất cả mọi thứ ngoại trừ cipherColumncó thể được đánh dấu final. Và này! Nhìn kìa. Bây giờ chúng ta có chỗ để làm điều đó.

Tất cả những gì tôi đã làm là thêm 3 biến nữa, đổi tên một và sắp xếp lại chúng một chút. Và kết quả chỉ xảy ra để làm cho các dòng đủ ngắn để phù hợp mà không có một dòng ngắt ngớ ngẩn trên !=.

Chắc chắn tên keykeyNextkhông phải là mô tả, nhưng mỗi cái chỉ được sử dụng một lần, không sống lâu như vậy và quan trọng nhất là không làm bất cứ điều gì thú vị trong vòng lặp. Vì vậy, họ không cần phải như vậy. Bằng cách giới thiệu các biến phụ, giờ đây chúng ta có chỗ để đặt tên của chúng dài nếu chúng ta cần. Mọi thứ thay đổi, vì vậy cuối cùng chúng ta có thể cần phải. Nếu chúng ta làm, thật tốt khi chúng ta có phòng thở.

Tôi cũng có quyền tự do chỉ cho bạn kiểu biến thể mẫu 6 của Jeff Grigg trong việc đưa ra các tham số đầu vào để tôn trọng các hạn chế độ dài dòng.


Wow đó là mô tả! Vâng, tôi biết rằng mã không thực sự làm gì cả, tôi có lẽ nên đăng nhiều hơn một đoạn nhỏ của nó nhưng tôi đoán tôi đã cố gắng để có được ý tưởng chung về những gì các chuyên gia làm liên quan đến độ dài cột mã và tên biến, nhưng câu trả lời của bạn cho thấy một số thay đổi rất ngọt ngào tôi chắc chắn sẽ thực hiện trong mã của mình kể từ bây giờ! Một câu hỏi nữa tôi có là: bạn thấy nó phù hợp ở đâu để thực hiện phá vỡ dòng? Trước khi khai thác? Có một "tiêu chuẩn" được chấp nhận?
RaulT

1
@RaulT dành một chút thời gian để đọc bất kỳ loại tiền mã hóa nào mà bạn đang làm việc. Nó sẽ cho bạn ý tưởng về những gì bạn có thể sử dụng mà sẽ không gây ngạc nhiên cho các lập trình viên khác. Thực hiện theo một tài liệu tiêu chuẩn nếu bạn có. Nhưng tốt nhất là hỏi các lập trình viên đồng nghiệp và hỏi họ xem công cụ của bạn có thể đọc được như thế nào. Ồ và kiểm tra codereview.stackexchange.com
candied_orange 18/03/2017

Tôi sẽ thêm một nhận xét bên dưới crypt Offerset và giải thích tính toán vì công thức đó không rõ ràng. Bạn sẽ quên tại sao trong ba tuần.
Nelson

15

Những người khác đã đưa ra một số gợi ý hữu ích, hãy để tôi tóm tắt:

  • 80 ký tự trên mỗi dòng có thể là một quy tắc vàng trong thập niên 80. Ngày nay hầu hết mọi người đều đồng ý rằng 100 đến 130 ký tự là ổn.
  • Sử dụng ngắt dòng bên trong biểu thức của bạn.
  • Chia biểu thức dài bằng cách giới thiệu kết quả trung gian.

Tôi muốn thêm một đề nghị khác: Đừng giáo điều về những cái tên dài! Phạm vi của một biến càng lớn, càng nhiều thông tin phải được đặt vào tên của nó. Và nói chung, đó là một ý tưởng tốt để giữ phạm vi của các biến nhỏ.

Ví dụ: nếu bạn có một biến cho cột của bảng mã hóa từ khóa và rõ ràng là chỉ có một bảng này được sử dụng trong phạm vi của biến của bạn, bạn có thể gọi nó columnhoặc thậm chí là ổn col. Nếu phạm vi lớn hơn và có nhiều bảng liên quan, thì gọi nó là hợp lý keyWordEncryptionTableColumn.

Một ví dụ khác: Nếu bạn có một vòng lặp với phần thân trải dài hai hoặc ba dòng và phải sử dụng một chỉ mục để truy cập các phần tử của một mảng, thì không có gì sai khi gọi chỉ mục i. Trong bối cảnh này, nó dễ đọc hơn nhiều (đối với hầu hết mọi người ít nhất) hơn là, nói arrayIndexOfMyVerySpecialDataSet.


1
Tôi đồng ý với bạn trả lời. Trong công việc, chúng tôi sử dụng 80 char / line cho c / c ++ vì lý do cũ và vì chúng tôi sử dụng bảng đánh giá. Đối với ký tự / dòng C # 100, đôi khi tôi đã phá vỡ quy tắc và tăng nhẹ hơn 100 để giữ cho dễ đọc.
peval27

Wow, thật là một câu trả lời tuyệt vời !! Tất cả những câu trả lời này đều rất tuyệt, cảm ơn vì sự giúp đỡ mà tôi đánh giá cao nó!
RaulT

Tôi hoàn toàn đồng ý với việc nhấn vào ý tưởng rằng 80 dòng ký tự đã lỗi thời. Nó vẫn áp dụng cho một số dự án và địa điểm nhất định (chủ yếu là tính nhất quán), nhưng đối với nhiều người, nó hoàn toàn không cần thiết. Nhiều nhà phát triển đang sử dụng một cái gì đó như Visual Studio hoặc IntelliJ trên một màn hình đầy đủ và có một màn hình thứ hai cho các thứ khác (tài liệu, v.v.). Do đó, họ có rất nhiều bất động sản màn hình cho mã của họ. Nếu bạn chỉ sử dụng 80 ký tự trên mỗi dòng, bạn có thể có rất nhiều không gian chưa sử dụng. Và giới hạn 80 ký tự làm tổn thương bạn! Đặc biệt là khi bạn xem xét rằng lib tiêu chuẩn có thể buộc tên ass dài.
Kat

1
Quan điểm của tôi là trong một số ngôn ngữ, thực sự không tránh khỏi thực tế là 80 ký tự là một hạn chế lớn. Vậy tại sao nó lại không cần thiết? Nó cũng xin đề cập rằng khá nhiều tất cả các biên tập viên và IDE lớn đều có từ mềm thông minh tuyệt vời trong những ngày này, cho phép bạn không hạn chế độ dài dòng AT ALL. Bạn có thể để độ dài dòng là bất cứ điều gì người đọc có thể nhìn thấy. Họ có thể thay đổi kích thước cửa sổ của họ để có được kết quả tối ưu hơn. Cá nhân tôi đôi khi thấy cách tiếp cận này là lý tưởng. Và tôi vẫn chưa thất vọng với cách thức hoạt động của cái bọc mềm này.
Kat

Bất cứ khi nào bạn sử dụng tên biến đơn giản, bạn PHẢI chắc chắn 100% về phạm vi. Tôi đã dành ba giờ để tìm hiểu về việc đóng JavaScript.
Nelson

3

Tôi thường đồng ý với bạn giáo viên. Tuy nhiên, nếu bạn có một biến mà bạn sẽ sử dụng rất nhiều trong một đoạn mã lớn, thì tốt hơn là sử dụng một dạng tốc ký cho nó sau khi rõ ràng về ý nghĩa của nó. Giống như khi bạn có rất nhiều biểu thức và bài tập số học phức tạp, chúng không đọc tốt với tên biến dài.

Về phác thảo:

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

Điều này không phục vụ mục đích, chỉ giới hạn độ dài dòng không làm cho nó dễ đọc hơn. Nếu bạn muốn điều này có thể đọc được, hãy làm điều này:

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

Và sau đó bạn thậm chí có thể muốn căn chỉnh các định danh loại (thêm khoảng trắng sau int). Tuy nhiên, hãy cẩn thận / hạn chế với các danh sách lập luận hoặc danh sách đối số như thế này:

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

Vấn đề là khi bạn thay đổi tên hoặc thêm một biến, bạn có thể phải định dạng lại toàn bộ khối để duy trì giao diện đẹp. Nó không dành cho công việc nhiều như những thay đổi vô nghĩa mà bạn sẽ giới thiệu, nó sẽ trông thật kinh khủng trong một hệ thống kiểm soát phiên bản. Đồng nghiệp của bạn sẽ thấy bạn thay đổi tệp và làm khác với phiên bản trước để xem bạn đã làm gì. Sau đó, mỗi dòng sẽ sáng lên khi thay đổi, che khuất sự thay đổi thực sự. Nó sẽ phụ thuộc một chút vào chất lượng của công cụ so sánh được sử dụng, điều này thực sự tệ đến mức nào nhưng nói chung, không nên để mã quá cá nhân và / hoặc định dạng của một dòng phụ thuộc vào dòng khác.

Đôi khi phác thảo có thể phục vụ một mục đích, nếu bạn có hàng chục dòng liên tiếp gần giống nhau, sẽ dễ dàng nhận ra chúng khác nhau ở đâu nếu bạn phác thảo chúng.

Lưu ý rằng một nơi làm việc có thể có một số định dạng tự động đang diễn ra sẽ xóa bỏ mọi định dạng ưa thích mà bạn thực hiện đối với mã của mình trước khi gửi nó đến hệ thống kiểm soát phiên bản.


1
Cá nhân khối mã đầu tiên trong câu trả lời của bạn dễ đọc hơn nhiều so với khối thứ hai.
Miles Rout

1
không bao giờ làm thứ ba, đó là một cơn ác mộng bảo trì để giữ nó như thế.
jwenting

3

Tuyên bố miễn trừ trách nhiệm: Tôi đang phóng đại một chút ở đây để làm cho quan điểm của tôi rõ ràng hơn. Vì vậy, lấy bất kỳ so sánh với một hạt muối.

Giáo viên của bạn đúng 100%: Không còn "quy tắc vàng" nào về 80 ký tự nữa (trừ khi bạn đang viết mã linux, nghĩa là như vậy). Quy tắc đó được thiết lập vì kích thước của các thiết bị đầu cuối tại thời điểm đó, nhưng ngày nay, bạn dễ dàng nhồi nhét hơn 150 ký tự trong cửa sổ enditor của bạn. Và ngay cả khi bạn vượt quá giới hạn đó, trình soạn thảo của bạn sẽ hy vọng bọc mềm dòng để bạn không phải cuộn. Và lý do duy nhất để không vượt quá 80 ký tự là nhu cầu cuộn .

Điều đó nói rằng, thực sự không cần thiết phải để dòng của bạn phát triển vô hạn. Dòng càng dài, con người càng khó phân tích. Nhưng tên biến ngắn không phải là phương thuốc cho vấn đề dài dòng .

Biện pháp khắc phục là phân chia các biểu thức của bạn một cách hợp lý bằng cách giới thiệu các biến được đặt tên chính xác hơn . Đừng cố tỏ ra thông minh với khoảng trắng. Chỉ cần xác định bất kỳ biểu thức con nào có thể được đặt tên một cách khéo léo và tạo một biến cho nó. Điều đó đơn giản hóa cả mã tính toán biến và mã sử dụng biến đó .


Không phải là một phần của câu hỏi của bạn, nhưng dù sao tôi cũng muốn bình luận về nó: Đó là một ý tưởng rất tồi để sắp xếp theo chiều dọc các =toán tử của bạn .

Có ba lý do cho điều đó:

  1. Chỉnh sửa một khối chứa các toán tử được phân bổ theo chiều dọc là một PITA. Bất cứ khi nào độ dài của biến lớn nhất thay đổi (đổi tên, thêm, xóa), bạn cần chỉnh sửa lại tất cả các dòng trong khối để lấy lại bố cục "đẹp" của bạn.

    Tất nhiên, vấn đề này có thể được giảm bớt một chút bằng cách sử dụng một trình soạn thảo có thẩm quyền, vì vậy đó là lý do nhỏ. Lý do thực sự là thứ hai:

  2. Những thay đổi khoảng trắng giả được giới thiệu bằng cách sắp xếp lại không chơi độc đáo với các hệ thống kiểm soát phiên bản hiện đại như thế nào git. Họ có xu hướng tạo ra một số lượng đáng kể các xung đột hợp nhất trong đó không có xung đột thực sự xảy ra và nơi không có xung đột sẽ được báo hiệu nếu không sử dụng căn chỉnh. Mỗi xung đột giả này sẽ khiến bạn mất thời gian quý báu .

  3. Sự liên kết mang ý nghĩa ngữ nghĩa bằng không . Nó là vô nghĩa. Không có gì mà bạn có thể hiểu rõ hơn với sự liên kết. Mỗi dòng trong khối của bạn cần phải tự đọc để hiểu những gì nó làm, kết nối với các dòng trên và dưới đây hoàn toàn là bản chất cú pháp.

Vì sự liên kết không mang bất kỳ ý nghĩa ngữ nghĩa nào, nhưng tạo ra chi phí đáng kể, bạn nên bỏ thói quen này trước khi nó làm bạn tốn thêm thời gian.


Nếu bạn thích giới hạn 80 ký tự rất nhiều, hãy thử lập trình fortran. Đúng như vậy, các tiêu chuẩn mới hơn đã nâng giới hạn dòng fortran lên 132 ký tự, nhưng nó vẫn có hiệu lực khi làm tê liệt việc biên dịch của bất kỳ chương trình nào vượt quá giới hạn. Nếu bạn giỏi lập trình, bạn sẽ sớm ghét fortran, bao gồm cả giới hạn độ dài dòng của nó. Sau đó, bạn sẽ được chữa lành cho đến hết đời.

Bản thân tôi đã phải thực hiện một số chương trình fortran một cách chuyên nghiệp, và tôi nói với bạn, nó đã dạy tôi ghét giới hạn chiều dài đó một cách thân thương nhất. Hoàn toàn không có gì bực bội hơn việc phải chia một dòng đơn giản và dễ đọc khác thành các phần chỉ vì trình biên dịch sẽ không biên dịch chính xác nữa. Và chắc chắn có những dòng mã đơn giản nhất khi chúng được thể hiện dưới dạng một dòng duy nhất.


3

Rất nhiều quy ước về phong cách (không phải quy tắc!) Nảy ra trong nhiều năm do những hạn chế trong môi trường lập trình. Trở lại trong những ngày đấm thẻ, bạn đã có một cứng giới hạn về số lượng ký tự có thể xuất hiện trên một dòng nguồn vật lý (đó là lý do tại sao Fortran reserved cột 6 cho các ký tự tiếp tục dòng). Không phải là nhiều thập kỷ trước, tôi đã làm việc trên một thiết bị đầu cuối VT220 màu hổ phách 80x24; trong khi các trình soạn thảo tôi đã sử dụng không giới hạn dòng đến 80 ký tự, cuộc sống sẽ dễ dàng hơn rất nhiều nếu bạn cố hết sức để tránh cuộn ngang.

Trong các phiên bản cũ hơn của Fortran (tối đa '77, IINM), bạn thậm chí không thể có số nhận dạng dài hơn 6 đến 8 ký tự. Ngay cả vào cuối thập niên 80, C chỉ đảm bảo rằng 8 ký tự đầu tiên trong tên bên ngoài là có ý nghĩa (đó là lý do tại sao một số chức năng thư viện có tên mô tả tuyệt vời như thế strpbrk).

Tất nhiên, hai thập kỷ đến thế kỷ 21, chúng ta không còn những giới hạn đó nữa. Không có lý do gì để không sử dụng các định danh mô tả nhiều hơn.

Có điều là, trong bối cảnh phải, ijkhoàn toàn hợp lý, tên có ý nghĩa . Nếu tôi lặp qua một mảng hoặc một vectơ trong một vòng lặp và tôi chỉ cần một cái gì đó để xác định phần tử hiện tại, ihoạt động hoàn toàn tốt. Tôi sẽ không sử dụng một cái tên như currentElement- nó không có ý nghĩa hơn trong bối cảnh đó và nó chỉ thêm sự lộn xộn thị giác.

Như đã nói, giáo viên của bạn không sai khi buộc bạn phải suy nghĩ về những cái tên mô tả dài hơn cho mọi thứ - cuộc sống sẽ dễ dàng hơn cho bạn nếu bạn tập thói quen đó trước, và sau đó học cách tiết kiệm khi cần thiết. Là một người từng lúc buộc phải ghép mọi thứ thành 8 ký tự hoặc ít hơn, chắc chắn tốt hơn là sai ở phía nhiều thông tin hơn là ít hơn. Khi bạn có được nhiều kinh nghiệm hơn, bạn sẽ tìm hiểu nơi bạn có thể tiết kiệm chi phí cho độ dài định danh và nơi bạn cần mô tả thêm một chút.


-1

Tôi không chắc liệu điều này có hiệu quả với c hay không nhưng có cách nào để phân chia công thức trên nhiều dòng không? Tôi biết một cái gì đó như thế tồn tại cho python.

Xem bạn có thể bắt đầu + (rowSize * nextWord) + nextWord]) {trên một dòng mới. (Giống như nhấn enter trong IDE của bạn và xem nếu nó thụt lề để C biết rằng biểu thức trước đó đang được hoàn thành trên dòng hiện tại)


1
Vâng, điều này chắc chắn là có thể. C không nhận ra các dòng và dòng mã cho đến khi bạn thêm một cái gì đó như dấu chấm phẩy. Vấn đề với điều đó là các hàm của chúng tôi không thể vượt quá 50 dòng và mặc dù mã ví dụ của tôi không có 50 dòng nhưng nó chỉ là một phần trong tổng số hàm của tôi. Tôi cảm thấy bị hạn chế rất nhiều khi viết vào ô 50 x 80, các thuật toán với các biến có ý nghĩa có thể thực hiện các chức năng tôi cũng cần chúng. Tôi có thể tiếp tục lưu trữ các đoạn mã dài này vào các hàm mới nhưng tôi cảm thấy như tôi sẽ kết thúc với rất nhiều lệnh gọi hàm, mọi người sẽ bị mất khi đọc mã.
RaulT

5
"Tôi cảm thấy như tôi sẽ kết thúc với rất nhiều cuộc gọi chức năng, mọi người sẽ bị mất khi đọc mã." Hoàn toàn ngược lại! Trích xuất mã thành các phương thức riêng biệt cho phép bạn đặt cho chúng tên mô tả tăng khả năng đọc (đặc biệt là phương pháp bạn đang trích xuất từ ​​đó). Nếu bạn kết thúc với quá nhiều phương thức, lớp của bạn có thể sẽ làm rất nhiều (nguyên tắc trách nhiệm duy nhất). Trích xuất các phương thức vào một lớp riêng biệt một lần nữa cho phép bạn đặt cho cái tên đó một cái tên mô tả.
Roman Reiner

Bất kỳ hàm nào tiếp cận 50 dòng có lẽ quá dài và quá phức tạp, (ngoại trừ khả năng khởi tạo dữ liệu có độ phức tạp là 1), nhưng thông thường khi các giới hạn như được thảo luận, chúng là các dòng không phải là dòng văn bản nên tách một dòng dòng mã, nghĩa là dấu chấm phẩy thường sẽ không được tính là một dòng bổ sung, hãy kiểm tra với Prof!
Steve Barnes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.