新聞資訊
記錄首創點滴進步 見(jiàn)證遠(yuǎn)行(xí•π≠ng)
我們一(yī)直緊跟時(shí)代前沿,聚焦行(≈™​ xíng)業(yè)實時(shí)動态,ε×§發布公司最新資訊,歡迎您的(de)關注

小(xiǎo)函數(shù)越小(xiǎo)越有(yǒ"♥≥‌u)優勢力

日(rì)期:2013-05-09發布:首創網絡浏覽:794次

    小(xiǎo)函數(shù)越小(xiǎo)越有(yǒu)優勢力。設計(jβ&•ì)良好(hǎo)的(de)函數(shù)往↕↔往比較小(xiǎo),而過大(dà)函數(shù≥≈•&)的(de)設計(jì)往往一(yī)塌糊塗•Ω×,或者存在很(hěn)大(dà)的(de)優化(huà)空(kō ×¶βng)間(jiān)。 也(yě)許你(nǐ)認為(wèi)討(tǎo)論函數 σ(shù)的(de)大(dà)小(xiǎo)沒有(‍"βyǒu)必要(yào),原因是(shì)函數(sh>σσù)設計(jì)的(de)本質是(shì)內(nèi)聚,它的(de↕≈‍±)大(dà)小(xiǎo)隻是(shì)φ‍它的(de)表現(xiàn)形式。而上(shàng)面的(d→☆φ♥e)原因有(yǒu)必要(yào)讓我們討(tǎΩ÷o)論一(yī)下(xià)函數(shù)的(≠Ωde)大(dà)小(xiǎo)問(wèn)題。

    本文(wén)關鍵字:小(xiǎo),函數(±×shù),越小(xiǎo),越有(yǒu),優,勢力,小(xiǎo),££<函數(shù),越小(xiǎo),

  小(xiǎo)函數(shù)越小(xiǎo)越有(yǒu)優勢β¶力。“設計(jì)良好(hǎo)的(de)函數(shù)φ$♠‍往往比較小(xiǎo),而過大(dà)函數(shù£ )的(de)設計(jì)往往一(yī)塌糊塗,或者存在很(hěn)大(‌ dà)的(de)優化(huà)空(kōng)間(jiā←₽φn)。”

  也(yě)許你(nǐ)認為(wèi)討(←↓tǎo)論函數(shù)的(de)大(dà¶↑∏ )小(xiǎo)沒有(yǒu)必要(yào≈©™λ),原因是(shì)函數(shù)設計(jì)的(d∞∑↓©e)本質是(shì)內(nèi)聚,它的(de)大(dà)小(xiǎo)隻αα是(shì)它的(de)表現(xiàn)形式。而上&₹(shàng)面的(de)原因有(yǒu)必₹¶<要(yào)讓我們討(tǎo)論一(yī)下(xià)函數(  shù)的(de)大(dà)小(xiǎo)問(w↓±èn)題。

  我對(duì)函數(shù)的(de)∞ "∑核心思路(lù):我提出代碼最小(xiǎo)處理(lΩ​☆>ǐ)單元的(de)概念:一(yī)個(gè)基本操♣₹₽作(zuò)(賦值,比較等),一(yī)個(gè)函數(shù)調用(yòng 'δ)(包括調用(yòng)後判斷返回值進行(xíng)判'∏α斷)都(dōu)看(kàn)成一(yī)個($×♦gè)最小(xiǎo)處理(lǐ)單元。那(nà)麽,一(yī)個©β¶©(gè)函數(shù),最小(xiǎo)處理"€≠(lǐ)單元合理(lǐ)的(de)個(gè)♥​數(shù)範圍在7以內(nèi)。如(rú)果超過了(le)7,Ωπ你(nǐ)就(jiù)要(yào)考慮把他( 'tā)們拆分(fēn)成多(duō)個(gè)函數(s ®÷hù)了(le)(為(wèi)什(shén)麽是(shì)7?人(rén) ≥同時(shí)能(néng)夠處理(lǐ)的(de)信息不(bù)超過7₹∞‌ 個(gè))。

  最小(xiǎo)數(shù)目沒有(yǒu)限 ¶δ‍制(zhì),即便是(shì)隻有(yǒu)1個(®€gè),也(yě)有(yǒu)存在的(dβ≤‌♥e)必要(yào)。

  在下(xià)面的(de)情況下(xià)我會(huì)将函™♣♥↔數(shù)拆分(fēn)為(wèi)更小(xiǎo)的(de™♠‍€)函數(shù):

  1、一(yī)眼不(bù)能(néng)夠看(kàn)到(dà&↓≠o)函數(shù)所有(yǒu)的(de)代碼。

  如(rú)果函數(shù)過長(cháng),無法一(yī)眼看(€'kàn)到(dào)一(yī)個(gè)函數(sh&§ù)所有(yǒu)的(de)代碼,我會(huì)毫不(bù)猶豫的(de)≠<拆分(fēn)。我不(bù)想讓讀(dú)者去(qù)翻屏,♠✘∑©也(yě)不(bù)想讓讀(dú)者前顧後盼,顧此 ↑‌失彼。漂亮(liàng)的(de)函數(shù)應該讓讀(dú)&ε≥者一(yī)眼就(jiù)知(zhī)道(dào)他(tā)在做✘'>(zuò)什(shén)麽以及怎麽做(z₹€uò)的(de)。

  2、局部變量過多(duō)。

  如(rú)果局部變量超過七個(gè),我會(huì)考慮拆分(fē≥α∏↓n)函數(shù)。變量過多(duō)意味著(zhe)我要(yào)記錄太多₹↑φφ(duō)的(de)狀态,這(zhè)會(huì)加重我大(dà)腦(nǎo™© )的(de)負擔,同時(shí)要(yào)考慮太多(duō)的(deγ‌¥÷)東(dōng)西(xī)。這(zhè)也(yě)同時(sh₩₩í)意味著(zhe)我可(kě)能(néng)沒有(yǒu)對(duì)函數(π∑∞shù)功能(néng)進行(xíng)深入的(de)思考。

  3、太多(duō)的(de)縮進。

  太多(duō)的(de)縮進意味著(zhe)太多(↓☆βduō)的(de)嵌套,要(yào)麽是(shì)循環,要(yào)麽是(sh ₹✘ì)判斷,都(dōu)會(huì)導緻複雜(zá)的(de)邏輯。

  4、如(rú)果你(nǐ)在使用(yòng)ctrl+c和(héα★☆♠)ctrl+v

  那(nà)你(nǐ)寫的(de)代碼不(bù)夠拽(DRY∞≠≈♦,Don’tRepeatYourself)。​★這(zhè)個(gè)時(shí)候,你(nǐ)要'‍☆(yào)把你(nǐ)複制(zhì)的(de)部分(fēn)拆分(δ±‍>fēn)為(wèi)新的(de)函數(shù)。

  5、不(bù)處于同一(yī)抽象層次。

  舉例,有(yǒu)一(yī)個(g∏ε≈₽è)初始化(huà)函數(shù),需要(yào)初始化(huà)∏Ω配置數(shù)據,套接字,數(shù)據庫連接,通(tōng)道(dào)&β♣✔狀态。

  voidinit()

  {

  Config_init();

  Socket_init();

  Db_init();

  inti=0;

  For(i=0;i

  G_user_chn[i].status=statu$γ¶≠s_init;

  ……

  }

  }

  上(shàng)個(gè)函數(shù)中對(duì☆ ♠)所有(yǒu)通(tōng)道(dào)的(de)初始化(huà)一φ↔β(yī)塊代碼就(jiù)和(hé)其他(t★♠ā)的(de)不(bù)處于一(yī)個ελ≤>(gè)抽象層次,我們應該将它封裝起來(lái):

  voidchn_init()

  {

  inti=0;

  for(i=0;i

  G_user_chn[i].status=status_in♣★it;

  ……

  }

  }

  函數(shù)最小(xiǎo)可(kě)以有(y±♠ǒu)多(duō)小(xiǎo),它存在的(de)意義

  我見(jiàn)過的(de)最優秀的(de)函數(shù§α$©):

  intmax(inta,intb)

  {

  returna>b?a:b;

  }

  這(zhè)個(gè)函數(shù)很(hě✘"σ✔n)小(xiǎo),隻有(yǒu)一(yī)行(xíng•♣​),但(dàn)是(shì)他(tā)存在的(de)意義在于:在☆∏≤函數(shù)的(de)調用(yòng)點,我們一(yī)眼就(jiù≤γ)知(zhī)道(dào)是(shì)獲取a和(hé)b中的(€ γ★de)最大(dà)值,而不(bù)是(sh"'®γì)分(fēn)析a>b?a:b的(de)邏輯。這(zhè)樣可(k↑₹ě)以節省程序員(yuán)的(de)腦(nǎo)力​≤成本,從(cóng)而達到(dào)一(yī)個(gè)目的(de):ε≠漂亮(liàng)的(de)函數(shù)應該讓讀≥λ(dú)者一(yī)眼就(jiù)知(zhī)道(dào)他(tā)★★₽在做(zuò)什(shén)麽以及怎麽做(zuò)的(de)。

  小(xiǎo)函數(shù)的(de)最₹↓€大(dà)障礙:性能(néng)

  對(duì)于程序員(yuán)新手,小(xiǎo)函數(shù)$©φ≥的(de)最大(dà)障礙在于沒有(yǒu)經驗體(tǐ)會(huì)不(b‌  ù)到(dào)小(xiǎo)函數(shù)的(de)優勢♦♣≈•,沒有(yǒu)經驗拆分(fēn)大(dà)函數(shù)為(wèi)更小←₹‍♦(xiǎo)的(de)函數(shù)。

  對(duì)于有(yǒu)一(yī)定經€®驗的(de)程序員(yuán),小(xi&↓ǎo)函數(shù)的(de)最大(dà)障礙也(yě)許是(shì)對(duα"δì)性能(néng)的(de)憂慮。

  對(duì)于性能(néng),切記,不(bù)要(yào ™≈∞)過早優化(huà)。我們一(yī)般認為(wèi)的☆₽↔(de)程序的(de)瓶頸,一(yī)般并不(bù)是(shì)程≥α序的(de)瓶頸:我們需要(yào)工(gōng)具來(lái)确定∞αφ真正的(de)瓶頸所在,20%的(de)代碼耗費(fèi)了(le)80%的 λ₹(de)性能(néng),優化(huà)之前首先要(yào)找到(dào)那(∞≤nà)20%的(de)代碼。函數(shù)調用(yòng)會(h★δuì)産生(shēng)資源和(hé)性能(néng)的(d ₹e)損耗,但(dàn)是(shì)這(zhè)是(×®δ‍shì)不(bù)是(shì)程序的(de)性能(néng)瓶頸?消耗的(d£§≠e)性能(néng)占總體(tǐ)的(de)性能(néng)百分(fēn)比為π¶(wèi)多(duō)少(shǎo)?這(zhè)一(ε♦∑±yī)切在代碼編寫時(shí)并不(bù)清楚,所以,我的(de)觀£π☆點是(shì)甯可(kě)選擇簡短(duǎn)的(δ☆de)函數(shù)來(lái)獲得(de)清晰簡單的(de)設≈¥計(jì),以便在項目後期能(néng)夠更快(k​β¶£uài),更好(hǎo)的(de)進行(xíng)&φβ性能(néng)優化(huà)。

  很(hěn)多(duō)人(rén)都(dō§∞φγu)在質疑我上(shàng)面列舉的(de)ma♣≈‍x函數(shù)的(de)實例,如(rú)φ♦果說(shuō)他(tā)在運行(xíng)期間(jiān)調用(yòn±≈¶÷g)次數(shù)不(bù)大(dà),則對(duì)性能(néng)的(₹© de)影(yǐng)響基本可(kě)以忽略,而獲得(de)的(d‌©γe)可(kě)讀(dú)性,清晰性這(zhè)極具價值;反過來(l ↑÷ái),如(rú)果他(tā)的(de)調用(yòng)次數(shù)是(sh©★ì)否龐大(dà),以緻成為(wèi)了(₩ε≠¶le)性能(néng)的(de)瓶頸,則完全可(kě)以£÷在程序編寫完成後,很(hěn)快(kuài)的(de)用(yòng¥∞™)其他(tā)的(de)方法優化(huà)。程序的(dδ×e)瓶頸不(bù)會(huì)很(hěn)多(duō)。

  關于函數(shù)調用(yòng)産生¥Ωε(shēng)的(de)性能(néng)消耗,我會(huì)抽時' ≤(shí)間(jiān)測試一(yī)下(xià),看(kàn)到(dà¥∏"o)底占用(yòng)多(duō)少(shǎo)。

  最後的(de)建議(yì):

  在對(duì)新員(yuán)工(gōng)培訓的(de)過程♠ε‍​中,發現(xiàn)程序員(yuán)新手一(yī)般對(duì)函數(¶$©shù)的(de)大(dà)小(xiǎo)¶ 不(bù)夠敏感。所以,我建議(yì)你(nǐ)可(kě)以多(duōλ≤≤)嘗試編寫10行(xíng)左右(甚至更小(xiǎo))的(Ωαde)函數(shù),慢(màn)慢(màn)你(nΩ←ǐ)會(huì)發現(xiàn)小(xiǎo)δ≠函數(shù)原來(lái)具有(yǒu)大(dà)威力。

    歡迎大(dà)家(jiā)閱讀(dú)浏覽,部分(fēn)內(nèi)容來Ω≤Ω(lái)源于網絡,如(rú)有(yǒu)侵權,請(qǐng)聯系我們删除≤₽!

+ 查看(kàn)更多(duō)我們的(de)客戶 / Our client

    24小(xiǎo)時(shí)技(jì)術(shù)支持
    18931045623
    在線客服

首創簡介

    首創網絡成立于2012年(nián),是(‍±shì)一(yī)家(jiā)專業(yè)的(de)品牌網站(zhà&₩n)設計(jì)和(hé)網絡營銷推廣公司,服務領域涵蓋網站(zhàn)設計÷₽£"(jì)、市(shì)場(chǎng)策劃、企業(yè)¶✘↑←畫(huà)冊及VI視(shì)覺設計(jì®&)、網站(zhàn)域名空(kōng)間(jiān)等領域,公司±<₩擁有(yǒu)一(yī)批高(gāo)素質人(  ☆±rén)才,著(zhe)力打造品牌網站(zh♠★✔àn)設計(jì)制(zhì)作(zuò)和(hé)網上£↑(shàng)營銷策略執行(xíng)兩大(×δ•∞dà)優勢。

    十年(nián)來(lái),憑借對(duì)市✘↕(shì)場(chǎng)趨勢敏銳的(de)洞察,和(hé)對(duì‍π)消費(fèi)者、企業(yè)形态深刻的(de)理♥♦β&(lǐ)解,我們服務的(de)已遍及京津冀、長(±↑cháng)三角、珠三角等領域,行(xíng)業( ♦yè)覆蓋政府機(jī)構、企事(shì)業(yè)單位、無線通(tō✘♠ng)訊、環保、電(diàn)子(zǐ)、醫(yī)藥、交↔♣↕φ通(tōng)、園林(lín)、地(dì)産等行(xíng)業(yè),諸→&多(duō)知(zhī)名企業(yè),如(rú)廣州↑>京信集團、廣東(dōng)聯通(tōng)廣州∏®分(fēn)公司、搜狐家(jiā)居廣州站(zhàn)、↓→搜狐家(jiā)居邯鄲站(zhàn)等,都(dōu)鑒證了(le)首創設計&®☆‍(jì)公司的(de)品牌設計(jì)思想與能(néng)力,首創÷β設計(jì)公司也(yě)與諸多(duō)企業(yè)勃的(de)市(s→£™£hì)場(chǎng)經濟中互促共生(sh§±ēng)。

在線客服


  • 掃描加微(wēi)信

  • 掃描加QQ

  • 掃描浏覽手機(jī)版
首創網絡邯鄲公司
邯鄲公司
服務熱(rè)線:0310-4559740 / 1893γ↓‍Ω1045623  公司地(dì)址:邯鄲♣∑☆∑市(shì)叢台區(qū)頤高(gāo)廣場(chǎng)B座1∞↓±3層1304室  客戶接待:邯鄲市(shì)陵園路(lù)669号康橋λ& 國(guó)際B06