2010-06-12 29 views
7

Cái nào tốt hơn?Sử dụng nếu ... khác ... hoặc chỉ khi ... để xác định số tiền được trả lại

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
    return false; 
} 

hoặc

có hiệu quả, họ làm điều tương tự. Nếu $val không phải là 'a', hàm trả về false. Chỉ là sở thích cá nhân?

+0

Điều gì xảy ra nếu khối khác có nhiều dòng và tôi đoán là một phần của đệ quy? Điều này cảm thấy một chút bối rối với tôi (không thể định dạng mã một cách chính xác trong các bình luận?): 'Private Node deleteMin (Node x) { nếu (x.left == null) return x.right; x.left = deleteMin (x.left); x.N = kích thước (x.left) + kích thước (x.right) + 1; trả lại x; } ' – allanx2000

Trả lời

7

Tôi nghĩ rằng nó đi xuống cách so sánh "cảm thấy" với bạn. Tôi sẽ sử dụng đầu tiên nếu nó có vẻ như $ val là "a" là một trường hợp đặc biệt, và thường là hàm trả về false. Tôi sẽ sử dụng thứ hai nếu nó cảm thấy giống như nó là 50/50 theo cách nó sẽ đi.

22

Chúng giống nhau. Tuy nhiên, đối với trường hợp này, tôi thích:

function test($val = 'a') { 
    return ($val == 'a'); 
} 
0

Tôi muốn ghi mã đầu tiên, mã đơn giản hơn (và dễ đọc) càng tốt.

9

Trong số đó, tôi thích thứ hai để rõ ràng hơn. Tuy nhiên, tôi thực sự thích

return ($val == 'a'); 
0

Trong khi bạn đang đọc khối mã thứ hai. Bạn có thể dễ dàng nhấn mạnh rằng nó trả về false khi val không bằng 'a'.

Nhưng tại khối mã đầu tiên, có một chút khó hiểu khi nó sẽ trả về false. Nó không phải là khó khăn như vậy tại ví dụ đó nhưng tôi giả định rằng nếu điều khoản của bạn sẽ không được đơn giản như vậy.

3

Trong PHP, nếu không có gì được thực hiện trong một hàm và kết thúc được đạt đến, nó sẽ như thể nó trả về false. Bởi vì điều này không bao giờ cần thiết để trả về false nếu không có gì khác được thực thi bên trong hàm. Điều này làm chúng tôi với điều này:

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
} 

Nếu chỉ có một lệnh sau câu lệnh if, elseif nếu không, các dấu ngoặc ("{" "}") là không cần thiết, mà làm cho chúng ta kết thúc với điều này :

function test($val = 'a') { 
    if($val == 'a') return true; 
} 

Trong PHP bạn thực sự có thể trả về so sánh, sẽ được thực hiện ngay trước khi trả lại. Đây là những gì một số người khác đã trả lời bài đăng này được đề xuất. Việc làm này lại cho chúng tôi với mã này:

function test($val = 'a') { 
    return ($val == 'a'); 
} 

Đúng sẽ được trả lại nếu khối "($ val == 'a')" là đúng, nếu không sai sẽ được trả lại, vì nó không đúng sự thật. Logic.

Tôi thực sự có xu hướng sử dụng quy ước thứ hai mà tôi đã trình bày, chỉ vì thói quen. Nhìn thấy vẻ đẹp của sự đơn giản của thứ ba được trình bày bởi những người khác tôi có thể sẽ chuyển sang điều đó khi áp dụng.

EDIT:

Nếu bạn muốn viết mã đó là dễ dàng hơn cho các chuyên gia phi PHP để hiểu, thay thế khác có thể như sau:

function test($val = 'a') { 
    if($val == 'a') 
     return true; 
    else 
     return false; 
} 

Tôi muốn nói rằng không sử dụng niềng răng trong các trường hợp như được mô tả trong ví dụ thứ hai của tôi cung cấp cho bạn mã dễ đọc hơn, vì các dấu ngoặc có xu hướng làm cho mã của bạn trông lộn xộn nếu chúng không chứa nhiều hàng.

+3

Điều này có thể đúng và chính xác, nhưng hai ví dụ đầu tiên của bạn sẽ không dẫn đến mã rõ ràng và dễ hiểu đối với bất kỳ ai khác ngoài chuyên gia PHP. Chỉ thứ ba sẽ rõ ràng đối với hầu hết các lập trình viên. –

+0

Điều đó đang được nói, bài đăng này là về các lập trình viên PHP, vì vậy quan điểm của anh ta là hoàn toàn hợp lệ. Và tôi đã học được điều gì đó mới mẻ về PHP ngay hôm nay! – Blindy

+0

Tôi đồng ý rằng ví dụ thứ ba là một ví dụ logic nhất vì nó ngụ ý sự tồn tại của "return false". Nhưng sau đó, biết và hiểu những điều này về một ngôn ngữ lập trình _may_ giúp một người viết mã dễ hiểu hơn và hiệu quả hơn, vì vậy tôi đã viết điều đó. – Emanuel

2

Tôi thực sự tin rằng đó là mục đích của bạn khi cố truyền đạt mã. Nếu bạn nhìn vào điều này:

function test($val = 'a') { 
    if($val !== 'a') { 
     return false; 
    } 
    return true; 
} 

Bạn có thể thấy nó giống như ví dụ của bạn, nhưng nó có ý định khác. Ví dụ này nó thực sự sẽ không thực hiện bất kỳ ý nghĩa để có:

function test($val = 'a') { 
    if($val !== 'a') { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

Tôi nghĩ rằng @Ned đã có nó, bởi vì anh ta đang cố gắng truyền đạt một ý định cho sự vận hành if.

+2

Biến thể (đầu tiên) của bạn là một ví dụ hay về con đường hạnh phúc. http://en.wikipedia.org/wiki/Happy_path –

+0

'Viên thuốc màu xanh hoặc viên thuốc màu đỏ ...' LOL! Con đường hạnh phúc luôn là con đường tốt hơn! – Gutzofter

0

Thay vì:

Phương pháp dưới đây là tốt hơn, không có chi phí hơn else và mã cũng ngắn:

function test($val = 'a') { 
    if($val == 'a') { 
     return true; 
    } 
    return false; 
} 

Nó có thể được thực hiện thậm chí ngắn hơn:

function test($val = 'a') 
{ 
    return ($val == 'a'); 
} 
1

Nếu bạn không trả lại boolean Tôi sẽ chọn biểu mẫu đầu tiên. Trong trường hợp này, tôi chỉ đơn giản là làm:

return ($val == 'a'); 

như những người khác đã đề xuất.

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