Hai ngày cuối tuần vừa qua, mình được tham dự khóa Android Advanced do GDG Việt Nam tổ chức. Thành quả thu lượm được từ sự kiện này là một cái áo thun (Size M mặc không vừa, cũng không ưng vì phía lưng có chữ FPT Software), một balo túi rút + 2 bữa trưa ăn Pizza miễn phí, haha. Đùa thôi, cái mình thấy tâm đắc nhất sau khóa học không phải là những kinh nghiệm cũng như kiến thức nâng cao về Android (như Necessarily Android tools & library, LifeCycle, Android Performance Patterns, Memory Leak, CPU, GPU Problems Detection, Eco-system của Firebase, bởi vì mình không biết là có nên switch từ một Web Developer sang Android Developer không nữa), càng không phải là mấy món quà tặng kể trên. Mà là mình biết được thêm về bản thân mình (mình giao tiếp kém quá và kiến thức nền còn hỏng nhiều chỗ) và mình cũng được biết thêm về những người trẻ tuổi và giỏi giang khác nữa (2 trainer của khóa học này - một bạn mới 23 tuổi nhưng đã là senior android developer tại Lazada và Google Expert - cùng một số học viên học hỏi tích cực và đầy kinh nghiệm nữa). Quan trọng là mình biết được mình cần phải lên kế hoạch tập trung vào những gì có thể giúp mình trở thành một senior developer.
Lan man nãy giờ đủ rồi, Quay lại chủ đề chính của bài #til hôm nay: Rescue Standard Error NOT Exception - Một thói quen xấu của Lập trình viên Ruby, đặc biệt là junior (và mình cũng là một trong số họ) đó là hay rescue exception như sau
begin
# something
rescue Exception => e
# notice error
end
Class Exception
trong Ruby có rất nhiều sub class, trong đó có nhiều class mà mình nghĩ là App không cần phải handle (xem danh sách tại đây). Vậy nên, một cách tốt hơn là chỉ rescue StandardError
Better
begin
# something
rescue => e
# notice Standard Error
end
là cách viết ngắn gọn của
begin
# something
rescue StandardError => e
# notice Standard Error
end
Nhưng tốt nhất là cụ thể hóa loại Exception mà bạn muốn app handle
Best
HTTP_ERRORS = [
EOFError,
Errno::ECONNRESET,
Errno::EINVAL,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
Timeout::Error
]
begin
some.http.call
rescue *HTTP_ERRORS => error
notify_airbrake(error)
end
- TODO: Tìm chưa thấy danh sách đầy đủ các exception của Rails Core, chắc phải chịu khó vào Docs của từng components cụ thể để coi các Exception của chúng. (Ví dụ ActiveRecord)
Mình đọc được practice này trên Best Ruby.