Làm thế nào để bạn điều hướng và cấu trúc lại mã được viết bằng một ngôn ngữ động?


14

Tôi thích việc viết Python, Ruby hoặc Javascript đòi hỏi rất ít bản tóm tắt. Tôi yêu các cấu trúc chức năng đơn giản. Tôi yêu cú pháp sạch sẽ và đơn giản.

Tuy nhiên, có ba điều tôi thực sự tệ khi phát triển một phần mềm lớn bằng ngôn ngữ động:

  • Điều hướng mã
  • Xác định giao diện của các đối tượng tôi đang sử dụng
  • Tái cấu trúc hiệu quả

Tôi đã thử các trình soạn thảo đơn giản (ví dụ Vim) cũng như IDE (Eclipse + PyDev) nhưng trong cả hai trường hợp, tôi cảm thấy mình phải cam kết nhiều hơn với bộ nhớ và / hoặc liên tục "grep" và đọc qua mã để nhận dạng các giao diện. Điều này đặc biệt đúng khi làm việc với một cơ sở mã lớn với nhiều phụ thuộc.

Đối với tái cấu trúc, ví dụ thay đổi tên phương thức, nó trở nên phụ thuộc rất nhiều vào chất lượng kiểm tra đơn vị của tôi. Và nếu tôi cố gắng cách ly các bài kiểm tra đơn vị của mình bằng cách "cắt chúng" phần còn lại của ứng dụng, thì không có gì đảm bảo rằng giao diện còn sơ khai của tôi luôn cập nhật với đối tượng tôi đang sử dụng.

Tôi chắc chắn có cách giải quyết cho những vấn đề này. Làm thế nào để bạn làm việc hiệu quả trong Python, Ruby hoặc Javascript?


Các tính năng đổi tên của PyDev hoạt động rất tốt đối với tôi cho đến nay.

Câu trả lời:


3

Điều hướng mã

Nhận một trình soạn thảo tốt hơn VIM.

Tôi sử dụng Komodo Chỉnh sửa.

Tôi cảm thấy mình phải dấn thân nhiều hơn vào trí nhớ

Tốt Suy nghĩ là tốt. Tôi thấy rằng "học tập" cuối cùng dẫn đến "bộ nhớ".

Liên tục "grep" và đọc qua mã để xác định các giao diện.

Đây là điển hình. Nếu bạn không thể nhớ chúng, thì chúng quá phức tạp phải không? Thời gian để đơn giản hóa.

Đơn giản là khó để tạo ra. Nhưng khi bạn gặp khó khăn trong việc ghi nhớ, đó là một triệu chứng của thiết kế xấu.

Tôi sử dụng grep. Nó làm việc cho tôi. Komodo Edit của tôi có rất nhiều tìm kiếm tốt đẹp. Notepad ++ cũng vậy

Xác định giao diện của các đối tượng tôi đang sử dụng

Doc String và help()chức năng làm việc. Tôi sử dụng chúng. Hằng ngày.

Tái cấu trúc hiệu quả ... nó trở nên cực kỳ phụ thuộc vào chất lượng các bài kiểm tra đơn vị của tôi.

Đó không phải là tin tức. Điều đó luôn luôn đúng, ngay cả trong một ngôn ngữ tĩnh.

Trong một ngôn ngữ tĩnh, chúng ta thường trở nên lười biếng, cho rằng - miễn là nó được biên dịch - nó thực sự có khả năng hoạt động. Điều này rõ ràng là sai, nhưng chúng ta trở nên lười biếng.


Tôi chắc chắn có cách giải quyết cho những vấn đề này.

Đây không phải là "vấn đề" và không yêu cầu "cách giải quyết".


Một ngôn ngữ động chính xác là không biết loại đối tượng bạn thao tác. Khi bạn nhận được một tham số, bạn giả sử nó xác định phương thức "quack ()" và "lông ()", nhưng bạn không biết tài liệu đó ở đâu (trên thực tế, chúng sẽ có nhiều tài liệu trong nhiều lần triển khai).

"Không biết loại vật thể"? Có thật không. Khi tôi thiết kế ứng dụng khách của một đối tượng, tôi biết tôi đã thiết kế kiểu gì.

Khi tôi xác định một dịch vụ, được sử dụng bởi nhiều khách hàng, loại "chính xác" không liên quan, khi tôi có một giao diện được yêu cầu quack()feathers().

Cuối cùng, tôi có Read-Execute-Print-Loop và các công cụ khác để xác định loại "chính xác" trong các trường hợp hiếm gặp khi tôi gặp vấn đề tế nhị. Đó là những gì tôi thực sự sử dụng hàng ngày.

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

Có vẻ như không quá khó - ít nhất là trong Python - để giải phóng loại đối tượng. Các ngôn ngữ động phải có REPL, giúp dễ dàng nhìn thấy những gì đang diễn ra.

Bạn cũng không biết thứ tự tham số dự kiến. Có vẻ khó cho một IDE để giúp đỡ ở đó.

Điều đó không có ý nghĩa nhiều. help()làm.

Và IDE của tôi thường có thể định vị định nghĩa. Không phải lúc nào - một số cấu trúc động phức tạp có thể dễ dàng che giấu lớp cơ sở. Trong trường hợp đó, tôi phải thực sự nghĩ về lớp của đối tượng để xác định định nghĩa phương thức. Tất nhiên, tôi đang viết mã, vì vậy có rất ít (hoặc không) bí ẩn ở đó.


6
Tôi cảm thấy mình có thể lập luận rằng việc bị buộc phải dấn thân nhiều hơn vào bộ nhớ giúp bạn có ít khả năng suy nghĩ hơn ...
Nicole

@Renesis: Ghi nhớ không phải là xấu nếu có bất kỳ loại mô hình hoặc hệ thống nào cho các giao diện.
S.Lott

1
Tôi đồng ý với các giao diện ghi nhớ @Renesis đưa tâm trí tôi ra khỏi suy nghĩ thực sự. Tôi không quan tâm đến việc một lập trình viên khác trong nhóm của tôi quyết định đặt mua các tham số như thế nào. Việc một cơ sở mã lớn sử dụng rất nhiều thư viện khác nhau với các tiêu chuẩn đặt tên khác nhau là không thường xuyên và thường không thể hoặc không thực tế để đơn giản hóa hoặc thống nhất các thành phần này.
Philippe Beaudoin

Re: Các chuỗi, chúng sẽ ổn khi bạn biết loại đối tượng, nhưng thường thì bạn không và bạn phải tìm kiếm nó.
Philippe Beaudoin

1
grr ... không có biên tập viên nào tốt hơn Vim: P
Anto


1

Có một công ty - JetBrains - tác giả của ReSharper, TeamCity và IDEA. Gần đây, họ bắt đầu xem xét các ngôn ngữ động và đã phát hành các công cụ của họ cho Python, PHP và Ruby.

Chất lượng là tuyệt vời. Đây không phải là các plugin khác cho IDE yêu thích của bạn nhưng IDE đầy đủ tính năng và chúng khá tốt để tái cấu trúc / điều hướng / gỡ lỗi, v.v. - chúng giống như IDEA lite.

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.