婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 編寫高質量代碼的30條黃金守則(首選隱式類型轉換)

編寫高質量代碼的30條黃金守則(首選隱式類型轉換)

熱門標簽:地圖標注項目幾個月 外呼系統怎么群發短信 400電話辦理費用低 鶴壁高頻外呼系統多少錢一個月 蘇州呼叫中心外呼系統哪家強 聯通外呼系統電腦app軟件 400電話申請到底哪家好 宿遷怎么辦理400電話 谷歌地圖標注日期

編寫高質量代碼的30條黃金守則-Day 01(首選隱式類型轉換),本文由比特飛原創發布,轉載務必在文章開頭附帶鏈接:https://www.byteflying.com/archives/6455

該系列文章由比特飛原創發布,計劃用三個月時間寫完全30篇文章,為大家提供編寫高質量代碼的一般準則。

1、概述

隱式類型轉換是微軟為了 C# 支持匿名類型而加入的,使用 var 通常可以使代碼的可讀性更強,甚至是幫我們解決一些嚴重的性能問題。為了清楚的明白 var 的作用機制,我們首先來看看編譯器為 var 做了哪些工作?

2、編譯器為var關鍵字做了什么?

首先 var 為語法糖,編譯器在編譯時根據右值推斷出表達式類型,再由編譯器將推斷出的表達式類型寫入到 IL 中,所以如下2段代碼在 IL 中完全一致。

編譯期間,編譯器根據右值“SomeString”,可以推斷出這個表達式(右值)的類型為 string 類型,于是將var替換為string,再將它寫到IL中,于是以上兩段初始化foo的代碼結果完全一致。

string foo = "SomeString";
var foo = "SomeString";

我們再來看一下兩段代碼的IL:

本文示例的源代碼

DnSpy 的反編譯結果

Microsoft 技術支持文檔中 ldstr 的解釋

注意:string也是語法糖,編譯時,string被替換為System.String寫進IL。

于是我們得到了一個重要的結論:

var為語法糖,在編譯期間就已經被編譯器所決定,開發人員無法為編譯器決定類型。

隱式類型轉換為上述代碼帶來了良好的可讀性,任何一名開發人員都會知道第2行代碼的var的類型,它讓我們更加的關注代碼片段中我們所需要關注的部分,而不是把重點放在它的類型上。因為大多數時候,這都是沒有意義的。

3、隱式類型轉換所帶來的良好可讀性

為了明白良好可讀性的問題,我們先來看一個代碼片段:

var foo = new SomeType();

以上代碼清晰明了,對于維護代碼的人來說,它沒有增加任何的理解成本,foo的類型就是SomeType類型。很多優秀開源項目中的大量被使用的工廠模式,也提供了類似的方法,如下代碼片段:

var huaWei = PhoneFactory.CreatePhone();

一個簡單的靜態工廠類 PhoneFactory ,公開了 CreatePhone 方法,閱讀這段代碼的開發人員,在幾乎沒有增加理解成本的情況下,很清楚的知道huaWei代表手機工廠類所生產的一個手機對象。但是下面的代碼,情況可能就稍有不同了:

var result = someObject.DoSomething(someParameter);

你無法輕松的知道result的類型和它所表達的意義,事實上,它的不良好的可讀性,表現在以下幾個方面:

1、在此處,result這個變量名并不是最好的選擇;

2、someObject的含義不明;

3、DoSomething含糊不清;

4、無法明確的知道someParameter代碼什么。

如果換成以下代碼,情況會好很多:

var mostPopularPhone = someObject.DoSomething(someParameter);

情況有所好轉,意思也更清楚。結合語義上下文,var的類型不言自明。但是在這種情況下,我依然建議大家將代碼改為以下形式:

Phone mostPopularPhone = someObject.DoSomething(someParameter);

這被我寫在之前所在公司的開發手冊上,我相信我的經驗一定是正確的。

讓我們再來看一個新的示例:

var score = GetSomeNumber();
 
var rate = score / 100;

rate的類型由變量score決定,然后開發者無法一眼看出score的類型,所以這是一個不良好的可讀性的代碼片段,我們應該改為:

var score = GetSomeNumber();
 
double rate = score / 100;

怎么樣,是不是看到這樣的代碼,心里舒服多了?因為你的理解成本更低了,心情舒暢了,一下子搬磚都能搬到5樓了。

于是,我們有了兩點總結:

1、當含義明確,在代碼上下文較為清楚時(簡單的變量定義或工廠方法),建議優先使用var;

2、在其它復雜情況下,盡量直接寫出var的類型。

隱式類型轉換所帶來的絕非僅僅是良好的可讀性,它有時可能會幫我們消除一些難以發現的Bug,這又是怎么回事呢?

4、隱式類型轉換幫我們解決嚴重的性能問題

人自以為自己是世界上最聰明的生物,事實上并非如此,有時候,編譯器比我們聰明得多,也可靠得多。

我們看看以下兩個代碼片段:

public IEnumerablestring> GetPhoneStartsWith1(string prefix) {
  IEnumerablestring> phones =
          from r in db.Phones
          select r.PhoneName;
 
  var result = phones.Where(r => r.StartsWith(prefix));
  return result;
}
public IEnumerablestring> GetPhoneStartsWith2(string prefix) {
  var phones =
    from r in db.Phones
    select r.PhoneName;
 
  var result = phones.Where(r => r.StartsWith(prefix));
  return result;
}

以上兩段代碼有何不同?GetPhoneStartsWith1 方法中的 phones 原先的返回類型應當為 IQueryablestring>,但在這里被顯式聲明的 phones 的 IEnumerablestring> 強制轉換了,熟悉 EF 的朋友們一定知道,IQueryableT> 為延遲加載,本身并不會立刻查詢數據庫,事實上它只生成了一個表達式樹,在最終需要使用數據的時候才會真正執行查詢動作。

于是 GetPhoneStartsWith1 方法將數據庫中的可能的所有數據全部取回本地,再由 var result = phones.Where(r => r.StartsWith(prefix)); 執行本地過濾,消耗了太多網絡資源,并且使用了 .Net 的數據過濾機制。

GetPhoneStartsWith2 方法則不然,phones 的類型被編譯器推斷為 IQueryablestring> ,并不會因此執行查詢操作,真正的查詢動作由 var result = phones.Where(r => r.StartsWith(prefix)); 執行,也就是說,它的數據過濾動作由數據庫引擎負責運算,最終只將符合條件的數據發送回本地,既節省了網絡傳遞成本,又節省了運算成本,豈不是一舉兩得?

5、總結

  • 當含義明確,在代碼上下文較為清楚時(簡單的變量定義或工廠方法),建議優先使用 var;
  • 在其它復雜情況下,盡量直接寫出 var 的類型;
  • 盡可能地相信編譯器,大多數時候,它比我們優秀得多。

開發人員應牢記以上開發守則,否則,人民群眾會仇恨你,你的朋友和家人也會嘲笑你,唾棄你。

該系列文章由比特飛原創發布,計劃用三個月時間寫完全30篇文章,為大家提供編寫高質量代碼的一般準則。

總結

到此這篇關于編寫高質量代碼的30條黃金守則(首選隱式類型轉換)的文章就介紹到這了,更多相關編寫高質量代碼的30條黃金守則內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 12條寫出高質量JS代碼的方法
  • 高質量Python代碼編寫的5個優化技巧
  • 高質量PHP代碼的50個實用技巧必備(上)
  • 如何編寫高質量JS代碼
  • 如何書寫高質量jQuery代碼(使用jquery性能問題)
  • 詳解JAVA高質量代碼之數組與集合

標簽:襄陽 雙鴨山 哈爾濱 錫林郭勒盟 莆田 丹東 鄂爾多斯 遵義

巨人網絡通訊聲明:本文標題《編寫高質量代碼的30條黃金守則(首選隱式類型轉換)》,本文關鍵詞  編寫,高質量,代碼,的,30條,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《編寫高質量代碼的30條黃金守則(首選隱式類型轉換)》相關的同類信息!
  • 本頁收集關于編寫高質量代碼的30條黃金守則(首選隱式類型轉換)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    中文字幕一区不卡| 宅男在线国产精品| 91一区二区三区在线观看| 成人性生交大片免费看中文网站| 欧美性xxxxx极品少妇| 久久久一区二区三区捆绑**| 日韩成人免费在线| 亚洲视频香蕉人妖| 亚洲一区二区三区四区五区黄| 日韩精品国产精品| 国产精品1区二区.| 国产精品网站导航| 欧美激情一区二区三区蜜桃视频 | 国产一区二区三区四区五区入口| 一区二区三区四区在线播放 | 日本中文在线一区| 成人动漫视频在线| 午夜av一区二区| 六月丁香婷婷色狠狠久久| 欧美日韩高清不卡| 成人的网站免费观看| 成人欧美一区二区三区小说| 中文字幕不卡一区| 国产欧美一区二区精品秋霞影院| 欧美午夜精品一区二区三区| 视频在线观看91| 久久精品男人的天堂| 日韩欧美第一区| 丰满亚洲少妇av| 免费人成网站在线观看欧美高清| 亚洲色图制服丝袜| 久久日一线二线三线suv| 亚洲免费av在线| 97久久人人超碰| 亚洲女人的天堂| av电影在线观看完整版一区二区| 亚洲一区二区中文在线| 国产成人综合自拍| 国产亚洲一本大道中文在线| 欧美一区二区久久| 成人18视频在线播放| 成人美女在线观看| 91久久精品国产91性色tv | 欧美精品乱码久久久久久按摩| 精品一区二区三区久久| 奇米在线7777在线精品| 免费日本视频一区| 一区二区三区波多野结衣在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品系列在线| 精品999在线播放| 亚洲精品久久久久久国产精华液| 欧美一区午夜视频在线观看| 精品国产99国产精品| 欧美美女网站色| 在线影视一区二区三区| 国产蜜臀av在线一区二区三区| 午夜精品视频一区| 中文字幕综合网| 久久综合九色综合久久久精品综合| 欧美一级二级三级蜜桃| 欧美国产日韩一二三区| 亚洲午夜精品一区二区三区他趣| 美女久久久精品| 国产女人aaa级久久久级| 亚洲成人午夜电影| 欧美少妇bbb| 麻豆精品国产传媒mv男同| 亚洲18女电影在线观看| 成人a免费在线看| 精品国产乱子伦一区| 麻豆国产精品一区二区三区| 日韩一区二区麻豆国产| 日本道免费精品一区二区三区| 久久中文字幕电影| 免费在线一区观看| 91免费视频网址| 免费看日韩a级影片| 欧美一级日韩不卡播放免费| 91色视频在线| 亚洲少妇屁股交4| 亚洲精品在线一区二区| 国产+成+人+亚洲欧洲自线| 精品视频在线看| 亚洲黄色在线视频| 精品在线一区二区| 国产成人免费av在线| 久久精品噜噜噜成人av农村| 亚洲欧美另类久久久精品2019| 亚洲国产综合在线| 欧美人伦禁忌dvd放荡欲情| 亚洲一区av在线| 99久久99精品久久久久久| 精品日韩一区二区三区免费视频| 国产一区在线视频| 欧美高清视频在线高清观看mv色露露十八| 亚洲国产成人va在线观看天堂| 久久免费精品国产久精品久久久久| 国产精品国产三级国产aⅴ中文| 91精品黄色片免费大全| 日本视频一区二区三区| 欧美视频在线一区二区三区| 国产传媒日韩欧美成人| 国产日韩精品一区二区浪潮av | 男人的天堂久久精品| 欧美二区在线观看| 一区二区三区在线高清| 成人免费av资源| 国产日韩欧美a| 久久欧美一区二区| 精品国产伦一区二区三区观看体验 | 亚洲综合色噜噜狠狠| 精品sm在线观看| 欧美亚洲愉拍一区二区| 久久久久久久久久久99999| 亚洲一区二区三区国产| 91精品国产高清一区二区三区蜜臀 | 一区二区三区四区激情| 亚洲天堂a在线| 18成人在线观看| 国产在线精品国自产拍免费| 26uuu亚洲婷婷狠狠天堂| 一区二区三区免费看视频| 亚洲欧美日韩中文播放| 91在线云播放| 中文字幕不卡三区| 亚洲成人免费视| 久久先锋影音av| 狠狠色丁香婷婷综合| 一区二区三区色| 蜜臂av日日欢夜夜爽一区| 99精品一区二区三区| 国产传媒久久文化传媒| 91久久国产最好的精华液| 亚洲天堂精品视频| 6080午夜不卡| 日本不卡视频一二三区| 337p日本欧洲亚洲大胆精品 | 精品噜噜噜噜久久久久久久久试看| 日本不卡中文字幕| 欧美电影免费观看高清完整版在| 亚洲成av人片观看| 成人免费视频在线观看| 欧美一级免费观看| 丝袜美腿成人在线| av电影在线观看不卡| 国产美女视频91| 久久色.com| 欧美日韩精品高清| 亚洲天堂av一区| 欧美午夜免费电影| 欧美日韩国产一区二区三区地区| 亚洲制服丝袜av| 怡红院av一区二区三区| 国产精品三级视频| 中文字幕免费不卡在线| 在线不卡a资源高清| 国产福利一区二区| 视频一区二区三区入口| 又紧又大又爽精品一区二区| 久久精品国产亚洲aⅴ| 亚洲一区精品在线| 国产精品亚洲一区二区三区妖精| 亚洲综合一区二区精品导航| 欧美mv日韩mv国产| 日韩视频永久免费| 欧美这里有精品| 欧美人体做爰大胆视频| 欧洲激情一区二区| 久久精品999| 久久91精品国产91久久小草| 日本一区二区三级电影在线观看| 中文字幕日韩精品一区| 欧美性受xxxx黑人xyx| 日韩精品1区2区3区| 国产精品456| 国产激情91久久精品导航| 亚洲欧美自拍偷拍| 在线观看成人免费视频| 欧美日本韩国一区二区三区视频 | 国产精品水嫩水嫩| 久久久综合视频| 久久99日本精品| 国产精品综合一区二区| 日韩电影在线观看一区| 午夜电影网一区| 最新国产精品久久精品| 国产亚洲短视频| 国产激情一区二区三区四区| 久久久天堂av| 日韩精品久久久久久| 成人三级伦理片| 精品国产乱码久久久久久免费| 精品国产一区a| 亚洲国产欧美在线| 美女一区二区在线观看| 欧美精品 日韩| 国产精品婷婷午夜在线观看| 91视视频在线观看入口直接观看www | 美国毛片一区二区|