có 2 loại lỗi là error/lỗi và exception/ngoại lệ. Error là cái dễ xảy ra hơn exception. Exception thì phải chạy 1000 lần có 1 lần bị lỗi thì mới gọi là exception. Có câu "exception must be exceptional". Ngoại lệ phải là chuyện gì thặc khó có thể xảy ra được mới gọi là ngoại lệ. Error thì sao cũng được.
Validate password sai mà bảo là ngoại lệ thì bị khùng à
khác mẹ gì bảo viết hàm kiểm tra 1 số có phải số nguyên tố ko có nên trả về ngoại lệ ko khi số đó là số nguyên tố. Trả về đúng/sai hoặc error code valid/invalid rồi if else check thôi
if/else vs try/catch thì có trade off cả. If else thì luôn tốn 1 so sánh, branch prediction gì đó có thể coi là 5-10 cpu cycle đi. Còn try/catch thì nếu ko có ngoại lệ sẽ ít hơn branch prediction, cho là mất khoảng 2-4 cycle đi, nhưng nếu gặp ngoại lệ sẽ tốn 1000 cycle. Nếu tỉ lệ gặp "ngoại lệ" lên tới 50% thì code chạy tốn 500 cycle mỗi lần try/catch, chậm hơn if/else 100 lần, nên mới có câu nói throw ngoại lệ chậm lắm. Vì vậy throw ngoại lệ phải thực sự là ngoại lệ tỉ lệ 1/1000 xảy ra thì mới throw để try/catch lẹ hơn if/else, mà code dễ đọc hơn, còn tỉ lệ lỗi cao quá thì trả về error code rồi dùng if/else mà check.