Kể từ lần đầu tiên tôi đã viếtthực hành mã hóa phòng thủ
if ($a = 5) {
# do something with $a, e.g.
print "$a";
}
và đã trải qua phiên đánh đố bình thường của
- tại sao là kết quả luôn luôn đúng
- tại sao là $ a luôn 5
cho đến khi tôi nhận ra, tôi đã chỉ định 5 đến $ a, thay vì thực hiện so sánh.
Vì vậy, tôi quyết định viết rằng loại tình trạng trên như
if (5 == $a)
nói cách khác:
luôn đặt giá trị không đổi sang phía bên trái của toán tử so sánh, dẫn đến một lỗi biên dịch , bạn nên quên thêm dấu "=" thứ hai.
tôi có xu hướng để gọi mã hóanày phòng thủ và có xu hướng tin rằng đó là một người anh họ để phòng thủ-lập trình, không phải trên quy mô thuật toán, nhưng từ khóa theo từ khóa.
Bạn đã phát triển những phương pháp mã hóa phòng thủ nào?
Một tuần sau:
Một lớn "cảm ơn" để tất cả những ai đã trả lời hoặc có thể thêm câu trả lời khác trong tương lai.
Thật không may (hoặc khá may mắn thay!) Không có câu trả lời đúng nào. Đối với câu hỏi của tôi là để rộng, yêu cầu nhiều hơn cho ý kiến hoặc học hỏi kinh nghiệm, chứ không phải là sự kiện.
Tôi đã tìm ra, nếu tôi có thể nhớ làm điều đó, tôi có thể nhớ được == (đáng buồn) – gbarry
Tôi không thích sự rung chuyển đối với con đường suy nghĩ bình thường; Tôi không thử nghiệm 5, tôi đang thử nghiệm $ a. Tôi tìm thấy nó dễ dàng hơn nếu số lượng được kiểm tra được liệt kê đầu tiên. Có lẽ tôi là một thiểu số - nhưng tôi không thích kỹ thuật này, mặc dù nó được đề nghị bởi những người tôi tôn trọng. –
Sẽ tốt hơn nếu bạn không thể chỉ định bất kỳ thứ gì cho các biến trong nếu so sánh. Java và C# đã được tạo ra, bởi vì C++ có đầy đủ các bẫy như thế. Vậy tại sao vấn đề chuyển nhượng này vẫn tồn tại? – Silvercode