天天看點

mysql if else語句的使用_别再過度使用 Else 語句寫代碼了!

if…else 語句是許多程式員在寫代碼時最常用的方式之一。你甚至可以看到許多程式員的代碼中嵌套着無數 else 語句。可這樣,真的好嗎? 一篇關于衛語句的實用介紹。

在剛開始接觸程式設計時,我多希望能有人在我摸索着開發第一個網站的過程中,給我分享一點中肯的人生經驗……

那會兒我犯下的第一個大錯誤,就是在編寫條件時過度使用 else 關鍵字。不隻是我,後來我發現很多開發者朋友都有這個問題,是以我打算在今天的文章裡好好聊聊這件事。

免責聲明:本文純粹是我自己的主觀感受。

在某些情況下,我們可能沒辦法在代碼裡使用這類方法。有時候,使用 else 關鍵字确實是最好的解決方案。這些我都承認,本文隻是想給大家提供一點關于建構邏輯的新思路。

mysql if else語句的使用_别再過度使用 Else 語句寫代碼了!

衛語句

根據維基百科,衛語句是對完整性前提條件檢查。用于避免在執行期間發生錯誤。

望之不似人言,下面我就用國語翻譯翻譯。我們首先得先對前提條件(在代碼開頭)進行完整性檢查,這樣才能避免主邏輯流程當中出現錯誤。

在理想的流程中(當驗證正确時),我們希望程式的主邏輯在驗證之後才開始運作。

現在讓我們假設自己在營運一個網站,其中包含一個進階購買區域,僅限付費客戶在每天夜裡 12 點之後通路。

<?php




if ($user != null) {
    if (time() >= strtotime('12 pm')) {
        if ($user->hasAccess(UserType.PREMIUM)) {
            if ($store->hasItemsInStock()) {
                // the content a premium user user should be able to see when the store is in stock 
                // after 12pm.
            } else {
                return 'We are completely sold out.';
            }
        } else {
            return 'You do not have premium access to our website.';
        }
    } else {
        return 'This section is not opened before 12PM';
    }
} else {
    return 'You are not signed in.';
}
           

在實際應用中,我們可能會傳回某種形式的異常。

雖然這是一種條件流方案,但即使其中隻包含少量 else 關鍵字,我們也很難跟上這樣的條件思路。

這還隻是條件邏輯的一個簡單示例。在實際場景當中,大家肯定遇到過對邏輯極為複雜的類進行導航的狀況。在我看來,這樣的編碼方式缺乏可持續性,我們應該采取更好的辦法。

使用衛語句,我們可以遵循以下架構:

<?php




if (condition1()) {
    return ...;
}




if (condition2()) {
    return ...;
}




// Input is valid.
doSomethi
           

利用這套架構,我們可以重構以前的代碼,具體如下所示:

<?php


if ($user == null) {
    return 'You are not signed in.';
}


if (time() < strtotime('12 pm')) { 
    return 'This section is not opened before 12PM';
}


if (!$user->hasAccess(UserType.PREMIUM)) {
    return 'You do not have premium access to our website';
}


if (!$store->hasItemsInStock()) {
    return 'We are completely sold out.';
}


// the content a premium user user should be able to see when the store is in stock 
// after 1
           

在衛語句中,我們通常将布爾表達式反轉為我們想要 assert 的内容。如果我們希望使用者在登入之後才能檢視此頁面,那麼首先就得檢查他們是否已經登入。

這種方法實作了相同的精确邏輯流程,但在我看來,這展現出了更為清晰的條件邏輯處理方法。

總結

在程式設計時,我們應該始終牢記這樣一個問題:“這些代碼能夠穩定執行至少 6 個月嗎?”

就當下來講,這些代碼也許能夠很好地解決問題。但是未來呢?在編寫代碼時不考慮後續需求,顯然是種愚蠢的行為。

考慮到這一點,我果斷放棄了那些已經修複過無數次的代碼,從零開始編寫功能。是的,這樣才能徹底解決掉技術債務。

适當運用衛語句,大家将能夠為自己乃至團隊的開發成果奠定堅實的基礎,進而在未來需要時随時滿足種種新增需求。

作者|Joey Colon

翻譯|核子可樂

來源網站|InfoQ