回傳值

方法可以將資料回傳給呼叫端程式,回傳值會直接取代呼叫運算式所在位置。

如果方法需要回傳資料,必須在方法名稱前方宣告回傳型別;沒有回傳值則標記為void

沒有回傳值的方法一樣可以使用 return,但不需要寫成 return 值;,只需要單獨撰寫 return; 即可。作用是結束程式執行,後續程式碼不會繼續執行,流程會回到呼叫該方法的地方。

    int Add(int a, int b)  // 回傳 int 型別
    {
        return a + b;
    }Code language: JavaScript (javascript)
    void SayHi() // 沒有回傳值
    {
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: JavaScript (javascript)

1、具有回傳值的方法一定要使用 return 運算式;,運算式執行結果的型別必須和宣告的回傳型別相符;

    int Add(int a, int b)
    {
        return 1.2;  // 發生錯誤,1.2 屬於 double 型別,無法隱式轉換成 int,型別不一致導致編譯錯誤
    }Code language: JavaScript (javascript)

上面這段程式嘗試回傳 double 數值,1.2 預設為 double,也就是浮點數,你可以理解成小數。編譯器無法自動把小數轉成整數,因此報錯。

如果反過來寫

    double Add2()
    {
        return 10;  // 10 是 int 型別,可以隱式轉換成 double,型別相容不會報錯
    }Code language: JavaScript (javascript)

這樣撰寫就不會出現錯誤。雖然 10 是整數,但允許隱式轉換為 double,因此型別是相容的。不能只單純比較型別名稱,還要判斷是否支援隱式轉換。

所謂隱式轉換,就是不需要開發者手動撰寫轉換程式碼,由編譯器自動完成轉換。相對地,由程式設計師手動指定的轉換就稱為顯式轉換。

關於型別轉換的內容,後續章節會再說明。

2、方法內所有程式執行路徑,最後都一定要執行return回傳資料,不能存在任何沒有回傳的分支。

上方方法宣告要回傳 int,也就是方法名 Add 前面的 int。但是方法主體完全沒有任何 return,這種情況同樣會報錯。

像下面這樣撰寫也會報錯,因為 return 只有在 if 條件成立時才會執行。當 a >= b 的時候,程式不會執行 return,代表存在沒有回傳的執行路徑,因此觸發錯誤。

就算補上 else 區塊,如果裡面沒有撰寫 return 依然不行。問題相同,仍存在沒有回傳的分支。這項規則同樣適用其他流程控制敘述,務必確保所有執行分支都妥善處理。

有一個處理方式可以解決。在方法最後加上 return 作為備案,舉例如下

    int Add(int a, int b)
    {
        if (a < b)
        {
            return a + b;
        }
        else
        {

        }
        return -1; // 無論前面執行哪個分支,只要程式走到這裡就會回傳
        // 等同使用 -1 當作備案回傳值。
    }Code language: C# (cs)

回傳值支援基礎型別(int、string 等等)、自訂類別、集合等所有資料型別;

return 執行後會立刻中斷目前方法,後續程式碼不會執行;

帶有回傳值的方法呼叫,可以直接嵌入運算式、輸出列印、變數指派等各種場景。

回傳值

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *