2017-02-24 21 views
2

這是我真正的代碼上的一切,但空字符串,空,假的:Dart null/false /空檢查:如何寫這個更短?

if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false) { 
    // do sth ... 
} 

這是我真正的代碼上的一切,但空字符串,空,假的或零:

if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false || routeinfo["no_route"] == 0) { 
    // do sth... 
} 

我怎樣才能在Dart中寫得更短?還是不可能?

+1

在你的問題中是否有錯字?通過'routeinfo [「no_route」]!= false'你的意思是'routeinfo [「no_route」] == false',對吧? –

+0

是的,編輯權。它已經厭倦了它的晚期;-) – Blackbam

+2

你可以設計你的應用程序,只有當它有一個真正的價值時,一個密鑰纔會在那裏,所以你可以檢查密鑰的存在並相信它。也許這是不可能的(取決於上下文),但值得嘗試。 – Gabriel

回答

6

你可以做

if (["", null, false, 0].contains(routeinfo["no_route"])) { 
    // do sth 
} 
5

我會寫一個輔助函數,而不是內聯所做的一切。

bool isNullEmptyOrFalse(Object o) => 
    o == null || false == o || "" == o; 

bool isNullEmptyFalseOrZero(Object o) => 
    o == null || false == o || 0 == o || "" == o; 

即避免了重複的查找(如contains操作),但它更具有可讀性。它也不會爲每次檢查創建一個新的List文字(使列表const可以解決這個問題)。

if (isNullEmptyOrFalse(routeinfo["no_route"])) { ... } 

當努力縮短可讀性,做出一個有名的幫助函數通常是最好的解決方案。