Bài viết Cách viết mã không thể xác định này trình bày một số kỹ thuật tuyệt vời nhất mà con người biết đến. Một số trong số những người yêu thích của tôi là:
Công dụng mới cho tên cho bé
Hãy mua một cuốn sổ đặt tên cho trẻ sơ sinh và bạn sẽ không bao giờ gặp khó khăn với những cái tên biến đổi. Fred là một cái tên tuyệt vời và dễ nhập. Nếu bạn đang tìm kiếm các tên biến dễ nhập, hãy thử adsf hoặc aoeu nếu bạn nhập bằng bàn phím DSK.
Lỗi chính tả sáng tạo
Nếu bạn phải sử dụng biến mô tả và tên hàm, hãy viết sai chính tả. Bằng cách viết sai chính tả trong một số hàm và tên biến, và viết đúng chính tả ở những tên khác (chẳng hạn như SetPintleOpening SetPintalClosing), chúng tôi sẽ phủ nhận việc sử dụng kỹ thuật tìm kiếm grep hoặc IDE một cách hiệu quả. Nó hoạt động tốt một cách đáng kinh ngạc. Thêm hương vị quốc tế bằng cách đánh vần tory hoặc tori ở các rạp / rạp chiếu phim khác nhau.
Hãy trừu tượng
Trong việc đặt tên cho các hàm và biến, hãy sử dụng nhiều các từ trừu tượng như it, everything, data, handle, things, do, routine, performance và các chữ số, ví dụ như routineX48, PerformDataFunction, DoIt, HandleStuff và do_args_method.
Viết hoa
Viết hoa ngẫu nhiên chữ cái đầu tiên của một âm tiết ở giữa một từ. Ví dụ ComputeRasterHistoGram ().
Chữ thường l Trông rất giống chữ số 1
Sử dụng chữ thường l để chỉ các hằng số dài. ví dụ: 10l có nhiều khả năng bị nhầm với 101 mà 10L là. Cấm bất kỳ phông chữ nào phân biệt rõ ràng uvw wW gq9 2z 5s il17 |! J oO08 `'";,. M nn rn {[()]}. Hãy sáng tạo.
Tái chế các biến của bạn
Bất cứ nơi nào cho phép các quy tắc phạm vi, hãy sử dụng lại các tên biến không liên quan hiện có. Tương tự, sử dụng cùng một biến tạm thời cho hai mục đích không liên quan (mục đích để tiết kiệm các vị trí ngăn xếp). Đối với một biến thể kỳ lạ, hãy thay đổi biến, ví dụ: gán một giá trị cho một biến ở đầu một phương thức rất dài, và sau đó ở một nơi nào đó ở giữa, thay đổi ý nghĩa của biến theo cách tinh tế, chẳng hạn như chuyển đổi nó từ tọa độ dựa trên 0 đến tọa độ dựa trên 1. Hãy chắc chắn không ghi lại sự thay đổi ý nghĩa này.
Cd wrttn wtht vwls s mch trsr
Khi sử dụng các chữ viết tắt bên trong tên biến hoặc phương thức, hãy phá vỡ sự nhàm chán bằng một số biến thể cho cùng một từ, và thậm chí thỉnh thoảng đánh vần nó lâu dài. Điều này giúp đánh bại những kẻ lười biếng sử dụng tìm kiếm văn bản để hiểu một số khía cạnh của chương trình của bạn. Hãy coi các cách viết biến thể là một biến thể của mưu đồ, ví dụ như trộn màu Quốc tế với màu Mỹ và kulerz nói dude. Nếu bạn đánh vần tên đầy đủ, chỉ có một cách khả thi để đánh vần từng tên. Những điều này quá dễ dàng để lập trình viên bảo trì nhớ. Bởi vì có rất nhiều cách khác nhau để viết tắt một từ, với các từ viết tắt, bạn có thể có một số biến số khác nhau đều có cùng mục đích rõ ràng. Như một phần thưởng bổ sung, lập trình viên bảo trì thậm chí có thể không nhận thấy chúng là các biến riêng biệt.
Tham chiếu phim ít người biết đến
Sử dụng các tên không đổi như LancelotsFavouriteColour thay vì màu xanh lam và gán giá trị hex cho nó là $ 0204FB. Màu sắc trông giống hệt màu xanh lam thuần túy trên màn hình và một lập trình viên bảo trì sẽ phải tìm ra 0204FB (hoặc sử dụng một số công cụ đồ họa) để biết nó trông như thế nào. Chỉ ai đó thân thiết với Monty Python và Chén Thánh mới biết rằng màu sắc yêu thích của Lancelot là màu xanh lam. Nếu một lập trình viên bảo trì không thể trích dẫn toàn bộ phim Monty Python từ bộ nhớ, anh ta hoặc cô ta không có công việc làm lập trình viên.
Ghi lại điều hiển nhiên
Tiêu mã bằng các nhận xét như / * thêm 1 vào i * / tuy nhiên, đừng bao giờ ghi lại những thứ hấp dẫn như mục đích tổng thể của gói hoặc phương thức.
Tài liệu Không phải Tại sao
Chỉ ghi lại chi tiết về những gì một chương trình thực hiện, không phải những gì nó đang cố gắng hoàn thành. Bằng cách đó, nếu có lỗi, người sửa lỗi sẽ không biết mã phải làm gì.
Phản ứng phụ
Trong C, các hàm được coi là không có ý nghĩa (không có tác dụng phụ). Tôi hy vọng rằng gợi ý là đủ.
Sử dụng bát phân
Chuyển các ký tự bát phân vào danh sách các số thập phân như sau:
array = new int []
{
111,
120,
013,
121,
};
ASCII mở rộng
Các ký tự ASCII mở rộng hoàn toàn hợp lệ dưới dạng tên biến, bao gồm các ký tự ß, Ð và ñ. Chúng hầu như không thể nhập nếu không sao chép / dán trong một trình soạn thảo văn bản đơn giản.
Tên từ các ngôn ngữ khác
Sử dụng từ điển tiếng nước ngoài làm nguồn cho các tên biến. Ví dụ, sử dụng punkt của Đức cho điểm. Các lập trình viên bảo trì, nếu bạn không nắm chắc tiếng Đức, sẽ tận hưởng trải nghiệm đa văn hóa trong việc giải mã ý nghĩa.
Tên từ Toán học
Chọn các tên biến giả dạng toán tử toán học, ví dụ:
openParen = (slash + asterix) / equals;
Mã giả dạng như bình luận và phó bản
Bao gồm các phần mã được chú thích nhưng thoạt nhìn thì không có.
for(j=0; j<array_len; j+ =8)
{
total += array[j+0 ];
total += array[j+1 ];
total += array[j+2 ]; /* Main body of
total += array[j+3]; * loop is unrolled
total += array[j+4]; * for greater speed.
total += array[j+5]; */
total += array[j+6 ];
total += array[j+7 ];
}
Nếu không có mã màu, bạn có nhận thấy rằng ba dòng mã được nhận xét không?
Tên tùy ý giả trang làm từ khóa
Khi lập tài liệu, và bạn cần một tên tùy ý để đại diện cho tên tệp, hãy sử dụng "tệp". Không bao giờ sử dụng tên tùy ý rõ ràng như "Charlie.dat" hoặc "Frodo.txt". Nói chung, trong các ví dụ của bạn, hãy sử dụng các tên tùy ý nghe giống các từ khóa dành riêng nhất có thể. Ví dụ: tên hay cho các tham số hoặc biến sẽ là "bank", "blank", "class", "const", "hằng", "đầu vào", "khóa", "từ khóa", "loại", "đầu ra" , "tham số" "parm", "hệ thống", "loại", "giá trị", "var" và "biến". Nếu bạn sử dụng các từ dành riêng thực tế cho các tên tùy ý của mình, các từ này sẽ bị bộ xử lý lệnh hoặc trình biên dịch của bạn từ chối, thì càng tốt. Nếu bạn làm tốt điều này,
Tên mã không được khớp với tên màn hình
Chọn tên biến của bạn để hoàn toàn không liên quan đến nhãn được sử dụng khi các biến đó được hiển thị trên màn hình. Ví dụ: trên màn hình gắn nhãn trường "Mã bưu điện" nhưng trong mã gọi biến liên quan là "zip".
Chọn nhà điều hành quá tải tốt nhất
Trong C ++, quá tải +, -, *, / để thực hiện những việc hoàn toàn không liên quan đến cộng, trừ, v.v. Sau cùng, nếu Stroustroup có thể sử dụng toán tử shift để thực hiện I / O, tại sao bạn không nên sáng tạo như nhau? Nếu bạn quá tải +, hãy đảm bảo rằng bạn làm theo cách mà i = i + 5; có nghĩa hoàn toàn khác với i + = 5; Dưới đây là một ví dụ về việc nâng sự xáo trộn toán tử quá tải thành một nghệ thuật cao. Quá tải '!' toán tử cho một lớp, nhưng có quá tải không liên quan gì đến việc đảo ngược hoặc phủ định. Làm cho nó trả về một số nguyên. Sau đó, để có được giá trị logic cho nó, bạn phải sử dụng '! ! '. Tuy nhiên, điều này đảo ngược logic, vì vậy [cuộn trống] bạn phải sử dụng '! ! ! '. Đừng nhầm lẫn! toán tử, trả về một boolean 0 hoặc 1, với toán tử phủ định logic ~ bit.
Ngoại lệ
Tôi sẽ cho bạn biết một bí mật mã hóa ít được biết đến. Ngoại lệ là một nỗi đau ở phía sau. Mã được viết đúng cách không bao giờ bị lỗi, vì vậy các ngoại lệ thực sự không cần thiết. Đừng lãng phí thời gian cho chúng. Các ngoại lệ của lớp con dành cho những người không đủ năng lực biết mã của họ sẽ bị lỗi. Bạn có thể đơn giản hóa chương trình của mình bằng cách chỉ có một lần thử / bắt duy nhất trong toàn bộ ứng dụng (trong chính) gọi System.exit (). Chỉ cần dán một tập hợp ném tiêu chuẩn hoàn hảo trên mọi tiêu đề phương thức cho dù chúng thực sự có thể ném bất kỳ ngoại lệ nào hay không.
Vị trí ma trận ma thuật
Sử dụng các giá trị đặc biệt ở các vị trí ma trận nhất định làm cờ. Một lựa chọn tốt là phần tử [3] [0] trong ma trận biến đổi được sử dụng với hệ tọa độ thuần nhất.
Đã xem lại các khe Magic Array
Nếu bạn cần một số biến thuộc một kiểu nhất định, chỉ cần xác định một mảng của chúng, sau đó truy cập chúng theo số. Chọn một quy ước đánh số mà chỉ bạn biết và không ghi lại nó. Và đừng bận tâm đến việc xác định các hằng số #define cho các chỉ mục. Mọi người nên biết rằng widget biến toàn cục [15] là nút hủy. Đây chỉ là một biến thể cập nhật về việc sử dụng địa chỉ số tuyệt đối trong mã trình hợp dịch.
Không bao giờ làm đẹp
Không bao giờ sử dụng trình chỉnh sửa mã nguồn tự động (trình làm đẹp) để giữ cho mã của bạn được căn chỉnh. Lobby để họ cấm họ khỏi công ty của bạn với lý do họ tạo delta sai trong PVCS / CVS (theo dõi kiểm soát phiên bản) hoặc mọi lập trình viên nên có kiểu thụt lề của riêng mình được giữ vĩnh viễn bất khả xâm phạm cho bất kỳ mô-đun nào anh ta đã viết. Nhấn mạnh rằng các lập trình viên khác tuân theo các quy ước mang phong cách riêng đó trong các mô-đun của "anh ta". Việc cấm các trình làm đẹp khá dễ dàng, ngay cả khi chúng tiết kiệm được hàng triệu lần nhấn phím thực hiện căn chỉnh thủ công và lãng phí ngày để hiểu sai mã được căn chỉnh kém. Chỉ cần nhấn mạnh rằng tất cả mọi người đều sử dụng cùng một định dạng ngăn nắp, không chỉ để lưu trữ trong kho lưu trữ chung mà còn trong khi họ đang chỉnh sửa. Điều này bắt đầu một RWAR và ông chủ, để giữ hòa bình, sẽ cấm thu dọn tự động. Không cần tự động thu dọn, bây giờ bạn có thể vô tình điều chỉnh sai mã để tạo ra ảo giác quang học rằng các phần của vòng lặp và ifs dài hơn hoặc ngắn hơn thực tế, hoặc các mệnh đề khác khớp với if khác so với thực tế. ví dụ
if(a)
if(b) x=y;
else x=z;
Thử nghiệm dành cho những kẻ hèn nhát
Một coder dũng cảm sẽ bỏ qua bước đó. Có quá nhiều lập trình viên sợ sếp, sợ mất việc, sợ thư ghét của khách hàng và sợ bị kiện. Nỗi sợ hãi này làm tê liệt hành động và giảm năng suất. Các nghiên cứu đã chỉ ra rằng việc loại bỏ giai đoạn thử nghiệm có nghĩa là các nhà quản lý có thể đặt trước ngày tàu, một sự hỗ trợ hiển nhiên trong quá trình lập kế hoạch. Khi không còn sợ hãi, sự đổi mới và thử nghiệm có thể nở rộ. Vai trò của lập trình viên là sản xuất mã và việc gỡ lỗi có thể được thực hiện bằng nỗ lực hợp tác của bộ phận trợ giúp và nhóm bảo trì kế thừa.
Nếu chúng ta hoàn toàn tin tưởng vào khả năng viết mã của mình, thì việc kiểm tra sẽ không cần thiết. Nếu chúng ta nhìn vào điều này một cách logic, thì bất kỳ kẻ ngốc nào cũng có thể nhận ra rằng thử nghiệm thậm chí không cố gắng giải quyết một vấn đề kỹ thuật, đúng hơn, đây là một vấn đề của sự tự tin về cảm xúc. Một giải pháp hiệu quả hơn cho vấn đề thiếu tự tin này là loại bỏ hoàn toàn việc kiểm tra và gửi các lập trình viên của chúng tôi đến các khóa học về lòng tự trọng. Rốt cuộc, nếu chúng tôi chọn làm thử nghiệm, thì chúng tôi phải kiểm tra mọi thay đổi của chương trình, nhưng chúng tôi chỉ cần gửi các lập trình viên đến một khóa học về xây dựng lòng tự trọng. Lợi ích chi phí là đáng kinh ngạc như nó là hiển nhiên.
Đảo ngược quy ước Thông thường Đúng Sai
Đảo ngược các định nghĩa thông thường về true và false. Nghe có vẻ rất rõ ràng nhưng nó hoạt động rất tốt. Bạn có thể ẩn:
#define TRUE 0
#define FALSE 1
ở đâu đó sâu trong mã để nó được lấy ra khỏi ruột của chương trình từ một số tệp mà không ai còn nhìn vào nữa. Sau đó buộc chương trình thực hiện các phép so sánh như:
if ( var == TRUE )
if ( var != FALSE )
ai đó bị ràng buộc phải "sửa" phần dư thừa rõ ràng và sử dụng var ở nơi khác theo cách thông thường:
if ( var )
Một kỹ thuật khác là làm cho TRUE và FALSE có cùng giá trị, mặc dù hầu hết sẽ coi đó là gian lận. Sử dụng các giá trị 1 và 2 hoặc -1 và 0 là một cách tinh tế hơn để nâng tầm mọi người và trông vẫn đáng nể. Bạn có thể sử dụng kỹ thuật tương tự này trong Java bằng cách xác định một hằng số tĩnh được gọi là TRUE. Các lập trình viên có thể nghi ngờ bạn nhiều hơn vì có một nghĩa đen tích hợp sẵn trong Java.
Khai thác bệnh tâm thần phân liệt
Java phân liệt về khai báo mảng. Bạn có thể thực hiện chúng theo cách C cũ, cách String x [], (sử dụng ký hiệu tiền tố hỗn hợp) hoặc cách mới String [] x, sử dụng ký hiệu tiền tố thuần túy. Nếu bạn muốn thực sự gây nhầm lẫn cho mọi người, hãy kết hợp các ký hiệu, ví dụ.
byte[ ] rowvector, colvector , matrix[ ];
tương đương với:
byte[ ] rowvector;
byte[ ] colvector;
byte[ ][] matrix;