2011-11-29 57 views
4

我對Java相當陌生,所以請原諒我問什麼可能是一個愚蠢的問題。什麼時候應該使用方法來返回值?

我在寫一個簡單的'用​​戶登錄'程序。要檢查用戶名和密碼是否匹配,我可以使用簡單的布爾變量或使用布爾方法並將值返回爲true或false。

public boolean match() { 
    if(userField.getText().equals(testUser)&&passField.getText().equals(testPass)) 
     return true; 
    else 
     return false; 
} 

以上是使用布爾方法的一個非常簡單的例子。

我的問題是,作爲一個經驗法則,什麼是更有利的事情,使用布爾方法或變量?我明白,這可能更適合程序員的個人偏好,但我不明白爲什麼你會選擇一個。

+0

謝謝大家的快速和有益回覆! – Jake

回答

3
  1. 使用一種方法,以便子類可以覆蓋和定義他們自己的匹配。
  2. 您應該始終保持字段/成員變量不公開,並允許通過方法訪問它們。

理想情況下,你應該抽象出一個接口的匹配方法,並有實現覆蓋匹配()方法

+0

我不認爲你正在回答OP詢問的問題... –

+0

@MДΓΓБДLL我相信它不僅僅是回答問題,而是通過告訴他最佳實踐來幫助他達到一個級別。 –

+1

我想你正在回答這個問題。 (它的措辭很糟糕,所以有爭議的餘地。)我把它理解爲:「我應該從方法返回結果還是將其存儲在成員變量中?」 – erickson

2

在這種情況下,你絕對應該重寫它像這樣:

public boolean match() { 
    return userField.getText().equals(testUser) 
     && passField.getText().equals(testPass); 
} 
+5

我不知道這是如何回答這個問題的。 –

+0

這個問題還不清楚。我將它解釋爲詢問是否返回一個簡單的布爾變量與布爾值語句。 –

0

取決於您正在處理的業務,如果需要進行計算,請使用函數,否則使用變量。

0

我們通常會使用方法,因爲他們反覆做某事。在這種情況下,您將檢查密碼和用戶名是否匹配,並且您將在整個程序中重複執行此操作。所以我會使用一種方法,因爲訪問boolean變量可能很困難,可能會變得混亂。所以我建議在你反覆做某些事情(以及它是一個過程)並使用變量作爲程序的一部分而不是作爲產品的情況下使用一種方法。

1

這取決於您正在編寫的代碼的可讀性和可重用性。在你的情況下,我更喜歡使用一種方法。如果您正在使用鏈式方法和布爾邏輯,請使用可讀性方法。 JVM可能會內聯這個調用,所以不會有性能問題。我想改變的是if語句和命名的使用,以更好地反映方法的目的(以及使用JavaBean命名約定)。您的代碼然後可以很容易地簡化成這樣:

public boolean isCorrectUserAndPassword() { 
    return userField.getText().equals(testUser) && passField.getText().equals(testPass)); 
} 
0

理想情況下它實際上更好的代碼複用,如果您使用的布爾方法,

,因爲你可以使用相同的匹配方法很多次,甚至可能用於多種目的

0

變量向類中添加一個屬性(除非它是本地的),而方法則添加可重用的行爲。 儘管比較變量和方法沒有意義,但經驗法則是 - 使用變量來保存值和方法來執行一堆相關的語句。

在你的情況,你每次調用match方法,它不只是返回boolean值,但它返回要麼truefalse之前也進行一些檢查。但是,如果它是一個boolean變量,它將只能保留boolean的值truefalse,但不能執行任何語句。

2

ALT 1:返回布爾值

PRO:這是很好的跳過代碼進一步部分是沒有必要的運行。

CON:這增加了多個返回點,只能用於只有幾行的方法。

public boolean match() { 
    if(!userField.getText().equals(testUser) 
     && !passField.getText().equals(testPass)){ 
    return false; 
    } 
    //do additional stuff here if user matches 
    return true; 
} 

ALT 2:返回一個變量

PRO:這是在較長的方法,其中返回變量是可以改變的幾個地方好。

CON:你通常在做的事情是當你有不止一件事情的方法,而你的代碼缺乏關注點分離時。

public boolean match() { 
    boolean result; 
    if(...){ 
     if(userField.getText().equals(testUser)&&passField.getText().equals(testPass)) 
      result = true; 
     else if (...) 
      result = false; 
     else if (...) 
      result = true; 
    } 

    //do something 
    if (...) 
     result = true; 
    else 
     result = false; 
    } 
    return result; 
} 

ALT 3:返回一個函數的輸出或一組功能

PRO:這是很好的節省代碼行

CON:爲了提高可讀性,你應該將方法重命名爲告訴這個方法實際上在做什麼。

public boolean authenticate(user) { 
    return userField.getText().equals(testUser)&&passField.getText().equals(testPass)); 
} 
相關問題