Một lập trình viên, nhiều ngôn ngữ - vấn đề nan giải tên


14

Khi bạn làm việc trên nhiều ngôn ngữ lập trình, có một vấn đề bạn gặp phải ...

Tên hợp lệ (định danh) trong một ngôn ngữ không hợp lệ trong ngôn ngữ khác. Ví dụ...

var new function thislà một từ khóa trong JavaScript, nhưng bạn có thể sử dụng chúng một cách tự do trong Python. Tương tự list dict defcó thể được sử dụng trong JavaScript mà không có vấn đề.

Đây là một điều rất phổ biến và một cái gì đó mà các lập trình viên thường nhanh chóng làm quen khi họ lập trình bằng nhiều ngôn ngữ.

Tuy nhiên, khi bạn làm việc cộng tác, bạn phải đưa ra một số quy tắc / hướng dẫn cho các thành viên trong nhóm của mình để đảm bảo tính thống nhất và thống nhất trong mã. Với các đội, vấn đề này trở nên quan trọng hơn là chỉ cần nhớ những gì hợp lệ và những gì không trong khi bạn lập trình.

Vì vậy, câu hỏi của tôi là, những chiến lược bạn áp dụng ...

  • chỉ cần lấy một tập hợp tất cả các từ dành riêng có trong tất cả các ngôn ngữ bạn sử dụng, đưa ra một danh sách cho mọi người và kiêng sử dụng chúng?
  • chấp nhận sự đa dạng và chịu thêm đau đớn khi "chuyển ngữ cảnh"
  • chấp nhận một nền tảng trung gian nơi một ngôn ngữ có thể sử dụng ngôn ngữ kia, nhưng không phải ngược lại

(Lưu ý: tôi chỉ nói về Python và JavaScript trong câu hỏi này ... nhưng vui lòng trả lời rộng hơn câu hỏi)

- CẬP NHẬT -

Cảm ơn tất cả các câu trả lời. Vì vậy, sự đồng thuận chung mà tôi thấy đang nổi lên là cho phép các lập trình viên sử dụng bất kỳ tên nào bất kể họ làm ngôn ngữ nào khác - miễn là tên được mô tả, điều đó không gây hại.


1
Hoặc chỉ yêu cầu mỗi tên biến bắt đầu bằng a $. Nó hoạt động trong PHP, JavaScript và một số trình biên dịch C / C ++ . Nói một cách nghiêm túc, đây là một điều mà PHP đã đúng IMHO.
Joey Adams

Câu trả lời:


46

Đã lập trình được khá nhiều ngôn ngữ trong hơn 30 năm kinh nghiệm của tôi, tôi sẽ nói rằng cố gắng tìm các tiêu chuẩn đặt tên sẽ hoạt động trong bất kỳ ngôn ngữ nào có lẽ là một ý tưởng tuyệt vời.

Ngay từ đầu trong trải nghiệm của mình, tôi đã thử sử dụng các macro #define trong C để tạo ra những thứ sẽ làm cho mã C của tôi trông giống như mã Pascal mà tôi đã sử dụng trước đó. Tôi đã quá quen với việc lập trình trong Pascal và tôi nghĩ rằng nếu tôi có thể làm cho C hoạt động như Pascal thì nó sẽ giúp tôi làm việc hiệu quả hơn. Tôi sớm phát hiện ra rằng tôi đã sai.

Điều khiến tôi làm việc hiệu quả hơn là học C và không cố gắng tận dụng cú pháp Pascal sang ngôn ngữ khác chỉ vì nó giúp tôi thoải mái hơn.

Tôi nghĩ rằng bạn sẽ có khả năng hạn chế các lập trình viên của mình bằng cách ngăn họ làm điều gì đó bằng một ngôn ngữ, chỉ vì việc thực hiện nó bằng ngôn ngữ khác mà bạn đang sử dụng là sai.

Nếu bạn giới hạn các quy ước đặt tên của mình vào những điều hợp lý để giải thích việc sử dụng biến, thì có lẽ bạn sẽ tạo mã tốt, bằng bất kỳ ngôn ngữ nào.


3
Tên có ý nghĩa là tất cả lý do bạn cần.
JeffO

24

Bạn không nên đặt tên "danh sách", "mới", "var", "này" ở vị trí đầu tiên, vì chúng không đủ để mô tả bằng bất kỳ ngôn ngữ nào.


2
Ditto "chức năng". Nếu nó không phải là một từ khóa, nó không có nghĩa là.
MPelletier

11

Chuyển từ javascript sang python đã là một chuyển đổi ngữ cảnh. Tôi không nghĩ nó là xấu nếu tên biến thay đổi, đặc biệt là nếu những thay đổi trong tên là thành ngữ với ngôn ngữ. Người ta thậm chí có thể tranh luận các công tắc ngữ cảnh khó hơn có thể giúp ích trong trường hợp này vì nó giúp củng cố "anh bạn, bạn đang viết javascript chứ không phải python."


7

Tôi nghĩ rằng nếu bạn đang sử dụng biến mô tả đặt tên cho vấn đề bạn mô tả thì nên tối thiểu. Như đã nói, nếu nó là tối thiểu, thì việc chấp nhận dịch chuyển ngữ cảnh gây ra bởi việc đặt tên biến giữa các ngôn ngữ cũng trở nên tối thiểu.


5

Hầu hết các từ dành riêng (trong bất kỳ ngôn ngữ) là khá chung chung. Tôi thích tên biến / hàm mô tả nhiều hơn và điều đó có nghĩa là tôi gần như không bao giờ gặp phải vấn đề này. Tôi nên thừa nhận đã bị Charles Simonyi lây nhiễm với sơ đồ đặt tên ban đầu của mình - đây là tại Xerox vào cuối những năm 70, trước khi nó được gọi là Ký hiệu Hungary - và điều đó cũng có nghĩa là những cái tên đó không phải là con người lành mạnh sẽ bao giờ sử dụng như những từ dành riêng.


5

Bạn không nên lãng phí thời gian vào việc viết hướng dẫn cho đến khi bạn phát hiện ra đây là một vấn đề thực tế chứ không phải giả thuyết.

Một tình huống tôi có thể nghĩ về nơi điều này có thể trở thành vấn đề là khi bạn chia sẻ cấu trúc dữ liệu giữa các ngôn ngữ lập trình. Ví dụ: nếu bạn có một đối tượng Javascript ở phía máy khách được phản ánh trong một đối tượng Python ở phía máy chủ và bạn tự nhiên muốn chúng có cùng tên cho các thành viên của chúng. Trong trường hợp đó, quy tắc rất đơn giản: Không sử dụng tên là các từ dành riêng trong bất kỳ ngôn ngữ nào. Đó là nó. Viết nó trong hướng dẫn nếu bạn muốn. Bây giờ chuyển sang các nhiệm vụ quan trọng hơn.

BTW, không liệt kê hay dict là một từ dành riêng trong Python. Chúng có thể được sử dụng làm tên biến, mặc dù tên khá tệ hại.


3

Theo kinh nghiệm của tôi, cách khắc phục cho việc này là có các quy ước đặt tên rộng áp dụng cho tất cả các ngôn ngữ. Cho dù đó là JavaScript, C # hay một số ngôn ngữ thú vị khác, cách các biến và lớp được đặt tên có thể trở thành một tiêu chuẩn trong cơ sở mã, đó là cách tôi thường thấy khi giải quyết vấn đề này. Các quy ước có thể được sự đồng ý bởi sự đồng thuận của mọi người, đơn giản là đa số muốn có một hướng dẫn, quản lý nói, "Đây là cách chúng tôi làm điều đó", hoặc một vài khả năng khác mà tôi tưởng tượng.

Tôi hiếm khi thấy vấn đề định danh mà bạn mô tả bởi vì hầu hết thời gian lớp hoặc tên biến của tôi đủ để mô tả để không xung đột quá dễ dàng. Đồng thời, nếu một người đang làm việc với những người khác hơn là có sự rõ ràng về cách nhóm muốn xử lý thì đây là điểm quan trọng.


2

Tôi không thể thấy làm thế nào điều này có thể là một vấn đề, trừ khi bạn có kế hoạch chuyển mã từ ngôn ngữ này sang ngôn ngữ khác. Nếu cá nhân bạn có xu hướng quên tên biến nào là hợp lệ, thì đừng sử dụng tên biến trừ khi bạn chắc chắn rằng nó hợp lệ. Nhưng nếu người khác sử dụng tên biến không hợp lệ, mã của họ sẽ không biên dịch hoặc chạy. Vì vậy, nếu bạn đang làm việc với mã của người khác và họ gọi một cái gì đó là "var", bạn có thể chắc chắn rằng đó là một tên hợp lệ trên bất kỳ ngôn ngữ nào họ đang sử dụng.

Nếu bạn có thể lên kế hoạch chuyển mã từ ngôn ngữ này sang ngôn ngữ khác, thì bạn có thể cần một danh sách các tên bị cấm. Ví dụ, tài liệu thực hành mã hóa C của tôi cấm sử dụng mới hoặc lớp làm biến vì điều đó làm cho mã khó chuyển sang C ++ hơn. Trong trường hợp đó, thật hợp lý khi đặt quy tắc giúp dễ dàng thực hiện công việc đó, nếu nó trở nên cần thiết,


-2

Chỉ cần sử dụng CamelCase hàng đầu. Nó hoạt động ở khắp mọi nơi. Điều này được gọi là tìm kiếm mẫu số chung thấp nhất giữa các hệ thống không tương thích và bạn sẽ thấy mình làm điều này thường xuyên!


5
Ngoại trừ trong một số ngôn ngữ, trường hợp của chữ cái đầu tiên rất có ý nghĩa cú pháp.
Karl Bielefeldt

1
... Và nó vi phạm tiêu chuẩn gần như văn hóa được thiết lập bằng nhiều ngôn ngữ.
tdammers

Ký hiệu Hungary gây khó chịu hơn nhiều cho CamelCase ... ;-)
Zeke Hansell

@Karl: rõ ràng gợi ý được giới hạn trong giới hạn của ngôn ngữ. Bạn có biết rằng Java có thể bắt đầu các tên biến bằng ký hiệu đô la không? Tôi đã thấy mã Java trông giống như PHP, rõ ràng là nơi lập trình viên trước đó đã học lập trình!
dotancohen

@dotancohen: Tôi nhớ đã xem một chương trình pascal trên một tạp chí sở thích nhiều năm trước, khi pascal chỉ đang làm cảnh. Rõ ràng là rõ ràng từ cấu trúc của mã (và thực tế là họ đã sử dụng các biến toàn cục để truyền giá trị cho các chương trình con và hàm) rằng chương trình là một trong những chương trình cơ bản tốt nhất mà tôi từng thấy Pascal bằng văn bản. ;-)
Zeke Hansell
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.