Bí quyết nào bạn có thể cung cấp cho ai đó chuyển mã?


8

Bạn có lời khuyên nào (mẹo, kỹ thuật, gotchas, et cetera) cho ai đó đang chuyển thư viện mã từ ngôn ngữ này sang ngôn ngữ khác hoặc viết lại để làm việc trong một trình biên dịch, môi trường khác?


Lời khuyên của tôi: Đừng.
JohnFx

@ John John - Đừng làm gì?
Moshe

2
không "cổng" - tức là sao chép một thứ gì đó vào ngôn ngữ mới giữ lại các tính năng của ngôn ngữ gốc. Hoàn toàn viết lại nó để nó có kết quả thử nghiệm tương tự.
S.Lott

@ S.Lott Đó là những gì tôi có nghĩa là "cổng".
Moshe

1
Ý của bạn là gì? Đây là một gợi ý. Đừng bình luận về câu hỏi của riêng bạn. cập nhật câu hỏi của bạn để được đầy đủ và rõ ràng. Không bao giờ nhận xét về câu hỏi của riêng bạn bởi vì đó là câu hỏi của bạn. Bạn sở hữu nó và bạn có thể làm cho nó hoàn hảo. Vui lòng xóa các bình luận tạo thành một dấu vết khó theo dõi khi bình luận của bạn cho rằng chúng tôi biết bạn đang nói gì với những từ như "Đó là ý tôi". "Điều đó" đề cập đến điều gì?
S.Lott

Câu trả lời:


2

Mỗi nền tảng (thư viện ngôn ngữ và hệ thống) có tính cách riêng của nó. Cách một lập trình viên Ruby thiết kế API của họ tận dụng các tính năng và văn hóa độc đáo tạo nên Ruby. Điều này khác biệt rõ rệt so với cách mà nhà phát triển C hoặc C ++ thiết kế API của họ, điều này lại khác với cách mà nhà phát triển Java hoặc C # sẽ làm.

Bạn muốn lấy ý tưởng từ nền tảng ban đầu, và đưa chúng vào các khái niệm tạo nên nền tảng mới. Không có gì cảm thấy kém tự nhiên hơn việc sử dụng một thư viện được thiết kế theo cách hoàn toàn khác so với các thư viện khác trong nền tảng. Có một số nền tảng lập trình thực sự được thiết kế tốt và thanh lịch. Bạn muốn tận dụng những điểm mạnh cho cổng của bạn.


5

Biết các khả năng riêng của cả ngôn ngữ / khung "đến" và "từ" của bạn.

Tôi đã chuyển một thư viện lịch sang iOS từ Javascript. iOS có một lớp lịch mạnh mẽ trong khi JavaScript không có gì sử dụng cho tôi. (Tôi đã chuyển đổi từ lịch tôn giáo sang lịch Gregorian và ngược lại.)

Tôi đã dành thời gian viết lại toàn bộ thư viện trong Objective-C chỉ để nhận ra rằng mã của tôi phần lớn là dư thừa. (Nhân tiện, tôi đã làm một công việc tồi tệ và nhận được kết quả không chính xác. Đó là khi tôi lùi lại một bước và nhận ra sai lầm của mình.)

Một vài chục dòng phương thức chuyển đổi có thể thay thế bằng sáu hoặc nhiều dòng mã khung gốc.


4

Nếu đây là một dự án quan trọng (thường là chuyển), hãy viết một kế hoạch kiểm tra hoàn chỉnh (lý tưởng nhất là kiểm tra đơn vị bằng ngôn ngữ đích) TRƯỚC KHI chuyển từng đoạn mã và toàn bộ hệ thống.

Không có cách nào trên thế giới rằng việc chuyển mạng sẽ chính xác 100% trong lần thử đầu tiên, vì vậy bạn cần đảm bảo trước rằng bạn đang nắm bắt mọi thứ.

Nếu có thể, hãy thực hiện cùng một kế hoạch cho mã gốc bởi vì không có gì đảm bảo rằng nó được viết chính xác và trên thực tế, việc có một hành vi tương đương có thể phụ thuộc vào việc triển khai không chính xác.


+1 cho kế hoạch kiểm tra với các bài kiểm tra đơn vị bằng ngôn ngữ đích.
Aditya P

3

-> Tập trung vào chức năng không phải là cách nó đã được mã hóa.

-> Suy nghĩ trước khi viết, bởi vì một số yếu tố có thể được xử lý bằng ngôn ngữ, nền tảng, v.v.

-> Sử dụng lợi thế của nền tảng mới.


1

"Chuyển" - như bạn dường như đang sử dụng từ này - chỉ là TDD với mã kế thừa gây phiền nhiễu.

Nhận các trường hợp thử nghiệm ngay. Xác nhận rằng mã kế thừa vượt qua các trường hợp thử nghiệm.

Sau đó loại bỏ mã di sản.

Sau đó viết mã mới vượt qua các trường hợp thử nghiệm bằng ngôn ngữ mới.


0

Xây dựng một sơ đồ lớp / cây phân cấp để bạn biết cổng nào trước. Ánh xạ các kiểu dữ liệu cơ bản (int -> Int32?). Làm tương tự cho các cấu trúc dữ liệu.

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.