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?
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?
Câu trả lời:
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.
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.
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.
-> 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.
"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.
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.