2009-04-23 40 views
5

Gần đây tôi đã thêm một chức năng HasValue vào thư viện javascript nội bộ của chúng tôi:Có đáng để có một hàm trả về nghịch đảo của một hàm khác không?

function HasValue(item) { 
    return (item !== undefined && item !== null); 
} 

Một trong một convorsation với một đồng nghiệp, chúng tôi đã đưa ra ý tưởng cũng thêm một chức năng mà sẽ về cơ bản chỉ là nghịch đảo: có lẽ HasNoValue, hoặc IsNothing Nếu chúng ta đã kết thúc làm điều đó chúng ta sẽ có:

function HasNoValue(item) { 
    return (item === undefined || item === null); 
} 
function HasValue(item) { 
    return !HasNoValue(item); 
} 

Tuy nhiên, chúng tôi không chắc chắn cho dù đó là dễ đọc hơn để có cả hai, hoặc HasValue. Điều nào dễ đọc hơn/được ưa thích hơn?

A:

if (HasValue(x) && !HasValue(y)) 

B:

if (HasValue(x) && HasNoValue(y)) 
+1

là gì! == Tôi biết cái gì! = Là. Đang sử dụng! == tương đương với không ===? Tôi chưa bao giờ thấy điều đó được sử dụng trước đây. –

+1

@J Isa Isaacks Có,! == là === như!= là == – Greg

+0

@John: Xem câu trả lời cho http://stackoverflow.com/questions/359494/javascript-vs/359509#359509 thông tin về === và! == bằng JavaScript. –

Trả lời

20

tôi bao la thích A đến B. "!" là một thành ngữ lập trình cần được hiểu bởi tất cả.

1

Chỉ vì lợi ích của việc có ít dòng mã và vì chức năng của bạn trả về một Boolean, tôi muốn nói đi với phương pháp A. Nếu bạn phải lo lắng về khả năng đọc, bạn luôn có thể thử:

if (HasValue(x) && !(HasValue(y))) 
0

Tôi sẽ nói tùy chọn A rõ ràng hơn, bạn biết chính xác ý nghĩa của nó.

8

Tôi đang bỏ phiếu "A" cho đến nay.

gánh nặng bảo trì bổ sung khi thực hiện điều này cho mỗi hàm boolean trả về không phải là giá trị so với "hiểu biết" rõ ràng và dễ đọc ", và thực tế tôi tin rằng" B "thực sự là ít hơn vì nó rất dễ bỏ lỡ "Không" ở giữa tên.

0

Tôi sẽ gắn liền với tùy chọn A nhưng đó chỉ là tôi.

12

Nếu !HasValue(y)HasNoValue(y) được đảm bảo tương đương lôgic trên toàn bộ phạm vi đầu vào là y, thì tôi rất thích !HasValue(y).

Tôi sẽ ngần ngại ngay cả một chức năng có tên HasNoValue(y) vì chắc chắn ai đó sẽ viết !HasNoValue(y).

+1

Rất đồng ý với điều này. Tôi ghét nó khi mọi người viết mã như 'while (! IsNotDisabled()) ...', bởi vì nó đưa tôi đi quá nhiều nỗ lực tinh thần để tìm ra tất cả những sự phủ định của sự phủ định. Các hàm trả về các boolean không được có 'Không' là bất kỳ biến thể nào trong tên của chúng. –

2

Tôi biết mình sẽ hoàn toàn đơn độc với ý kiến ​​này và nếu tôi phải đối mặt với sự lựa chọn này trong một dự án hợp tác, tôi chắc chắn sẽ đi với A, vì nó khá rõ ràng đó là quyền điều cần làm , nhưng tôi phải nói rằng tôi đánh giá cao độ dài của tùy chọn B. Từ ngữ dễ đọc và dễ hiểu hơn nhiều so với biểu tượng, ngay cả khi nó là một cái gì đó trần tục như dấu chấm than yêu quý của chúng tôi.

Đặc biệt là bây giờ IDE có sự hấp dẫn tốt hơn rất nhiều so với trước đây, tôi thường có xu hướng lựa chọn độ chi tiết hơn nhiều so với trước đây với tất cả đặt tên. 9 lần trong số 10, khả năng đọc vượt trội hơn những khác biệt về hiệu suất nhỏ, giảm dần.

+0

Phải, đó là lý do tại sao chúng tôi đưa ra lựa chọn thứ hai, cuối cùng tôi nghĩ rằng A là giải pháp đúng, nhưng tôi thích khả năng đọc. – chills42

Các vấn đề liên quan