簡體   English   中英

什么時候應該使用方法返回值?

[英]When should you use a method to return a value?

我對Java很新,所以請原諒我提出一個看似愚蠢的問題。

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

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

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

我的問題是,根據經驗,使用什么是更有利的東西,布爾方法還是變量? 我知道這對程序員來說可能更像是個人偏好,但我不明白為什么你會選擇一個而不是另一個。

  1. 使用方法,以便子類可以覆蓋和定義自己的匹配。
  2. 您應始終將字段/成員變量保密,並通過方法授予對它們的訪問權限。

理想情況下,您應該將匹配方法抽象到接口中,並讓實現覆蓋match()方法

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

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

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));
}

這取決於您正在編寫的代碼的可讀性和可重用性。 在你的情況下,我更喜歡使用一種方法。 如果您正在使用鏈接方法和布爾邏輯,請使用方法以提高可讀性。 無論如何,JVM可能會內聯調用,因此不會出現性能損失。我要改變的是使用if語句和命名來更好地反映方法的目的(並使用JavaBean命名約定)。 您的代碼可以很容易地簡化為:

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

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

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

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

因為你可以多次使用相同的匹配方法,甚至可以用於許多目的

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

在您的情況下,每次調用match方法時,它不僅返回boolean值,而且在返回truefalse之前還執行一些檢查。 但是,如果它是一個boolean變量,它只能保持booleantruefalse ,但不能執行任何語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM