王國維歪解宋詞,用它表達事業的三重境界。老譚要談談c#中編寫迴圈的三種方式,也來個東施效颦,不過是用唐詩來表達。王國維選擇宋詞,非常貼切,也給宋詞增色不少。老譚沒這水平,只是亂選一氣。
我們的例子是報表查詢:根據給定的關鍵字,查詢符合條件的報表,即報表名字是否和關鍵字相匹配。關鍵字的結構類似於google查詢:關鍵字中包含多個單詞,單詞由空格或加號隔開,空格表示或者,加號表示而且。
例如,如果關鍵字是二廠 三廠,那麼名字中含有二廠或三廠的報表都能匹配上,如果關鍵字是化工+**,那麼名字中既含有化工,又含有**的報表,才能匹配上。
我們要實現的函式是 bool ismatched(string reportname, string keyword)。
我們可以採用最為傳統的for迴圈實現這個函式:
private bool ismatched(string reportname, string keyword)
}if (allmatched)
}return false;
}
在這種方式下,為了實現迴圈,需要做相當多的額外工作:
定義迴圈控制變數,如i、j;
初始化迴圈控制變數,如設定為0;
定義迴圈控制變數的結束條件,如不超過專案個數;
每乙個迴圈步驟中調整迴圈控制變數的值,如加1;
根據迴圈控制變數獲取到要操作的物件等。
這些「額外」工作,遮蔽了要實現的邏輯,非常容易導致錯誤,如迴圈控制變數用混。
為了解決方式1中的諸多問題,c#新增了foreach關鍵字,支援新的迴圈實現方式。
private bool ismatched(string reportname, string keyword)
}if (allmatched)
}return false;
}
這種方式克服了方式1的缺點,迴圈控制不再凌亂,程式邏輯集中於處理迴圈變數上。這些變數,從集合中乙個個湧出,像滴著清響的竹露般利索。
c#採納了函式式程式設計的思路,和我們熟悉的命令式程式設計方式混合在一起,變成了一種混合式程式語言。
private bool ismatched(string reportname, string keyword)
這時,迴圈杳無蹤影。
利用c#操作集合時,要做好思路的轉換:從命令式(imperative)到函式式(functional)的轉換。這是乙個大題目,這裡只提本例子中用到的兩點:
明確做什麼,而不是怎麼做。如檢查集合中全部元素符合某個條件,用all(),檢查集合中是否有乙個元素符合某個條件,用any()。具體怎麼做,或者利用開發平台提供的支援,或者自己實現;
將函式作為引數。如any、all都是函式,同時也是引數。顯然,c#中是用λ-表示式做到這一點的。
人生三重境界
人生有三重境界,這三重境界可以用一段充滿禪機的語言來說明,這段語言便是 看山是山,看水是水 看山不是山,看水不是水 看山還是山。看水還是水。這就是說乙個人的人生之初純潔無瑕,初識世界,一切都是新鮮的,眼睛看見什 麼就是什麼,人家告訴他這是山,他就認識了山 告訴他這是水,他就認識了水。隨著年齡漸長,經...
人生三重境界
古今之成大事業 大學問者,必經過三種之境界 昨夜西風凋碧樹,獨上高樓,望盡天涯路 此第一境界也 衣帶漸寬終不悔,為伊消得人憔悴 此第二境界也 這三重境界可以用一段充滿禪機的語言 來說明。這段語言便是 看山是山,看水是水 看山不是山,看水不是水 看山還是山,看水還是水。第一階段 看山是山,看水是水。童...
BaseAdaPter的三重境界
逗比式 文藝式 普通式 1 逗比式 view view minflayer.inflate r.layout.item,null 存在缺點 重複創造view findviewbyid依然會浪費大量時間 逗比式 view view minflayer.inflate r.layout.item,nul...