Mục đích của Ký hiệu Hungary là mã hóa thông tin vào mã định danh mà không thể mã hóa theo cách khác trong hệ thống loại. Ý kiến riêng của tôi là nếu thông tin này đủ quan trọng để được mã hóa, thì nó đủ quan trọng để được mã hóa trong hệ thống loại, nơi nó có thể được kiểm tra chính xác. Và nếu thông tin không quan trọng, vậy thì tại sao bạn lại muốn làm lộn xộn mã nguồn của mình với nó?
Hoặc, để nói rõ hơn: thông tin loại thuộc hệ thống loại. (Lưu ý: nó không phải là một hệ thống kiểu tĩnh . Miễn là nó bắt được các lỗi loại, tôi không quan tâm khi nó bắt được chúng.)
Một vài câu trả lời khác đề cập đến Đơn vị đo lường là cách sử dụng chấp nhận của Ký hiệu Hungary. (Tôi hơi ngạc nhiên khi chưa có ai nhắc đến Tàu quỹ đạo Khí hậu Sao Hỏa của NASA, vì điều đó dường như xuất hiện mọi lúc trong các cuộc thảo luận về Ký hiệu Hungary).
Đây là một ví dụ đơn giản trong F #:
[<Measure>] type m
[<Measure>] type ft
let someLength = 48.15<m>
let someOtherLength = 16.2342<ft>
someLength + someOtherLength
// someLength + someOtherLength
// -------------^^^^^^^^^^^^^^^
// error FS0001: The unit of measure 'ft' does not match the unit of measure 'm'.
Nhìn kìa, Ma, không có người Hung!
Nếu tôi đã sử dụng Hungarian Notation thay vì các loại ở đây, điều đó sẽ không giúp tôi một chút:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Trình biên dịch cho phép nó đi thẳng qua. Bây giờ tôi đang dựa vào một con người để phát hiện ra lỗi cơ bản là gì. Đó không phải là những gì một trình kiểm tra loại dành cho?
Thậm chí tốt hơn, sử dụng ngôn ngữ lập trình Frink :
someLength = 48.15m
someOtherLength = 16.2342ft
someLength + someOtherLength
// 53.09818416 m (length)
// Wanna know the answer in a good old fashioned American unit?
someLength + someOtherLength -> yd
// 58.06888031496062992
// Are you an astrophysicist?
someLength + someOtherLength -> parsec
// 1.7207949554318336148e-15
// ... or a fundmentalist Christian who refuses to use units invented
// less than 2000 years ago?
someLength + someOtherLength -> biblicalcubits
// 95.893563822870765006
Vì vậy, tóm lại: Tôi không thích Ký hiệu Hungary. Bạn không bao giờ nên sử dụng nó.
Điều đó đang được nói, tôi nghĩ rằng sử dụng ký hiệu Hungary là một ý tưởng tốt. Đợi đã, cái gì?
Vâng! Trong trường hợp cụ thể này , bạn đã đề cập:
Hơn nữa, hầu hết các mã của chúng tôi phải chạy trên một số DSP kỳ lạ, trong đó một khái niệm như bool hoặc float không tồn tại
Nhưng đó chính xác là trường hợp sử dụng hợp lý duy nhất cho Ký hiệu Hungary!
PS: Tôi hết lòng khuyên bạn nên nhìn vào Frink. Hướng dẫn sử dụng của nó chứa một số trò đùa rắm tuyệt vời nhất từng có. Đó cũng là một ngôn ngữ khá tuyệt :-)