Cộng đồng ngôn ngữ lập trình Go hiện đang tranh luận gay gắt về một đề xuất mới nhằm đơn giản hóa việc xử lý lỗi bằng toán tử '?', cho thấy sự phân hóa ngày càng tăng giữa các lập trình viên kỳ cựu và những người mới làm quen với ngôn ngữ này.
Xử lý lỗi truyền thống và hiện đại
Cuộc thảo luận cho thấy sự chia rẽ đáng kể trong cộng đồng Go về cách tiếp cận xử lý lỗi. Các lập trình viên Go lâu năm đã quen và thậm chí đánh giá cao mẫu if err != nil
rõ ràng, trong khi các lập trình viên đến từ các ngôn ngữ khác thường thấy nó rườm rà và lặp đi lặp lại. Như một thành viên cộng đồng nhận xét:
Nếu bạn quen với exceptions và các ngôn ngữ có toán tử '?', việc phải gõ
if err != nil
liên tục có thể rất khó chịu. Tuy nhiên, khi đã sử dụng ngôn ngữ này một thời gian, bạn sẽ bắt đầu không thích hệ thống phức tạp mà các ngôn ngữ khác dùng để che giấu lỗi.
Tác động của đề xuất và mối quan ngại của cộng đồng
Thay đổi được đề xuất sẽ ảnh hưởng đến khoảng 1,98% tất cả các câu lệnh trong thư viện chuẩn của Go, thể hiện một sự chuyển đổi đáng kể trong cách viết và đọc mã Go. Các thành viên cộng đồng đã nêu ra một số quan ngại về đề xuất này, bao gồm khả năng gây nhầm lẫn cho người mới, nguy cơ bỏ sót việc xử lý lỗi với ký hiệu '?' dễ bị bỏ qua, và liệu một thay đổi cơ bản như vậy có thực sự cần thiết khi các công cụ phát triển hiện đại đã có sẵn.
Các số liệu thống kê chính từ đề xuất:
- Tổng cộng 723.292 câu lệnh được phân tích trong thư viện chuẩn
- 14.304 câu lệnh có thể chuyển đổi sang cú pháp mới
- 1,98% tổng số câu lệnh sẽ được thay đổi
- 2.825 câu lệnh (0,39%) sẽ sử dụng dấu ? mà không có khối tùy chọn
Bối cảnh phát triển hiện đại
Thú vị là một số lập trình viên chỉ ra rằng với sự xuất hiện của các công cụ phát triển hỗ trợ bởi AI và copilot, gánh nặng viết mã boilerplate đã giảm đáng kể. Tiến bộ công nghệ này khiến một số người đặt câu hỏi liệu những thay đổi cú pháp để giảm boilerplate có còn quan trọng như vài năm trước hay không.
Uy tín kỹ thuật
Đề xuất này có trọng lượng đáng kể trong cộng đồng, đến từ Ian Lance Taylor, một nhân vật quan trọng trong việc phát triển Go, người đã có công lớn trong việc đưa generics vào ngôn ngữ này. Nền tảng này đã khuyến khích nhiều lập trình viên xem xét nghiêm túc đề xuất này mặc dù họ có những lo ngại ban đầu.
Cuộc tranh luận tiếp tục phát triển, với cộng đồng đang cân nhắc giữa lợi ích của việc giảm boilerplate và các nguyên tắc đơn giản, rõ ràng trong xử lý lỗi của Go.
Tham khảo: discussion: spec: reduce error handling boilerplate using ? #71460