- cho mình hỏi ta nên kiểm tra giá trị của biến trước khi gọi hàm hay là kiểm tra bên trong hàm
vd: method(int a , Object b) thì nên kiểm tra giá trị 2 biến a,b trước truyền nó vào hàm hay truyền vào hàm rồi mới kiểm tra
hoặc là : viết web thì nên kiểm tra tính đúng đắng của giá trị trước khi gọi api hay cứ truyền rồi sẽ kiểm tra tại service api - khi bắt ngoại lệ trong 1 hàm thì nên xử lý ngay tại hàm hay là ném ngoại lệ ra cho hàm khác xử lý , tức là dồn ngoại lệ lại 1 chổ rồi xử lý 1 lúc luôn hay là xử lý lẻ tẻ từng ngoại lệ ở từng hàm
Kiểm tra giá trị của biến và xử lý lỗi
-
Cả hai đều cần thiết. Ví dụ như khi bạn có một Web app cho phép nhập số thẻ tín dụng, bạn có thể viết một số phương pháp kiểm tra cơ bản tại client side (với JavaScript chẳng hạn) như là số thẻ tín dụng phải là 16 ký tự và bắt buộc phải là số (digit). Điều này để tránh tình trạng nếu khi người sử dụng nhập vào một số thẻ bất hợp lệ (với chữ cái trong số thẻ chẳng hạn), ứng dụng có thể phát hiện sớm và không cần phải gởi dữ liệu về server, do đó tránh cho user phải đợi lâu và tiêu tốn tài nguyên server không cần thiết. Tuy nhiên, có một số phương pháp kiểm tra khác mà bạn không muốn để lộ ở client side thì bạn phải viết trong hàm ở server side (ví dụ như mã kiểm tra cho số thẻ tín dụng, xác thực số thẻ tín dụng ăn khớp với tên người dùng trong cơ sở dữ liệu của bạn chẳng hạn), nếu bạn viết các mã này ở client side, người sử dụng có thể hiểu được logic trong đó và nếu là các hacker, họ hoàn toàn có thể khai thác các điểm yếu trong các giải thuật này và thậm chí ngăn không cho nó hoạt động đúng để hack vào ứng dụng của bạn. Một cách tổng quát, bạn sẽ cần phải thực hiện các biện pháp kiểm tra đơn giản trước khi gọi hàm và sau đó, thực hiện các biện pháp kiểm tra phức tạp hơn sau khi hàm được gọi.
-
Vẫn như trên, câu trả lời là tùy tình hình. Trong một số điều kiện nhất định, các ngoại lệ có thể được xử lý ngay tại hàm, nhưng trong một số trường hợp khác, bạn phải chuyển nó cho những lớp thích hợp. Tùy theo mức độ phức tạp của ngoại lệ và tùy theo cách bạn thiết kế ứng dụng. Nếu bạn chỉ dồn tất cả ngoại lệ vào các lớp trung tâm để xử lý, các lớp này có thể trở nên phức tạp ngoài tầm kiểm soát. Và ngược lại, nếu bạn chỉ xử lý tại chỗ, bạn sẽ khó theo dõi hết để biết có bao nhiêu loại ngoại lệ có thể phát sinh trong quá trình xử lý.Ví dụ như nếu bạn chia ứng dụng của bạn thành nhiều lớp, và tại lớp business logic ở sâu nhất lại có một ngoại lệ do dữ liêu có định dạng không đúng, bạn phải chuyển lại ngoại lệ này cho lớp định dạng dữ liệu ở ngoài hơn.
Hi VietReam.
Theo mình bạn không cần phải kiểm tra các dữ liệu nội tại của chương trình bạn vì nó là do bạn sinh ra. Với các dữ liệu được truyền từ ngoài vào thì cần kiểm tra do bạn không quản lý được nó.
Với các thư viện cấp ra thì coi như khi dùng lập trình viên phải đọc tài liệu và tự kiểm tra nên cũng kông cần.
- Với API bạn cấp ra nó coi như một trương trình độc lập nên bạn cần kiểm tra phía server.
- Về ngoại lệ thường thì nó sẽ theo triết lý ở trên nếu lỗi do dữ liệu ngoài truyền vào hãy ném nó ra. Còn không hãy bắt nó.
dữ liệu nội tại là gì vậy anh , constant hay gì? , còn anh nói
có phải ý anh là bạn dùng thư viện tôi bạn phải đọc tài liệu và tự kiểm tra giá trị của biến trước khi đưa vào nếu không sai bạn tự chịu đúng không, lúc này trách nhiệm kiểm tra dữ liệu sẽ là người sử dụng thư viện ?
Hi VietReam.
- Dữ liệu nội tại là những cái được sinh ra trong code của bạn (Hoặc trong phạm vi khối lệnh). VD:
delta = sqrt(x); // delta là dữ liệu sinh ra trong code của bạn.
y = 1 / delta; // Bạn phải kiểm tra điều kiện của delta trước.
- Đúng rồi. Khi bạn là người dùng thì mọi dữ liệu bạn truyền vào đều do bạn kiểm soát.
vậy x có phải kiểm tra và kiểm tra ở đâu ngay trong hàm hay trước khi được đưa vào hàm
Hi VietReam.
function(x)
delta = sqrt(x); // delta là dữ liệu sinh ra trong code của bạn.
y = 1 / delta; // Bạn phải kiểm tra điều kiện của delta trước.
Tất nhiên là kiểm tra trước khi gọi hàm rồi.
if x < 0
todo // Xử lý lỗi.
else
function(x)
Khi đó bạn sẽ không phải gọi hàm chỉ để kiểm tra và thoát. Cũng như bạn đã có đủ điều kiện để bắt lỗi. Thay vì đưa vào hàm và đợi nó bắn ra một sự kiện nào đó rồi lại bắt lại.
P/S Tất nhiên cũng giống như bạn trên nói. Nếu đó là một dịch vụ cấp ra thì cần viết các hàm để kiểm tra dữ liệu người dùng chuyền vào riêng.
function_api(x) // API cấp ra như một dịch vụ. Không quản lý đầu vào.
if check(x) // Hàm kiểm tra viết thêm theo tài liệu của thư viện.
function(x) // Các hàm thư viện được gọi không có kiếm tra.
Best practice là nên check.

Em tìm đọc cuốn effective java nó có nói mấy điều e quan tâm.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?