大神級程序員透露的11個不傳秘籍(上篇)

作為編程初學者,提高代碼技能可能是你的首要任務之一。

但如何提升往往是初學者面臨的首要難題雀久,哪些技術(shù)最值得學習,哪些技術(shù)能幫你更快的寫出優(yōu)秀的代碼朱监?

技術(shù)方向的選擇岸啡、具體的學習路線可能無法通過一篇文章就能說清楚原叮,更多的需要根據(jù)愛好赫编、目的、市場需求等多方面去了解決策奋隶。

但是下文中擂送,將毫無保留的帶你掌握無數(shù)大神程序員多年工作總結(jié)的寶貴經(jīng)驗,有助于你少走彎路寫出更優(yōu)秀的代碼唯欣,提升編程效率嘹吨。

甚至很多在職多年的程序員也無法全部掌握,都是通過血與淚的踩坑才逐漸意識到境氢。

image.png

1. 寫代碼前先做好計劃


項目需求下來后蟀拷,第一要點就是溝通確認清楚需求,做好構(gòu)思萍聊,把可能出現(xiàn)的細節(jié)問題溝通清楚问芬,避免后期返工。

寫代碼前寿桨,先把思路理清此衅,整理好邏輯結(jié)構(gòu)。

基礎級的計劃:

  • 要輸入和輸出什么數(shù)據(jù)亭螟?

  • 預期結(jié)果是什么挡鞍?

  • 流程中涉及哪些步驟?

  • 需要哪些數(shù)據(jù)結(jié)構(gòu)预烙?

  • 是否有需要考慮的邊緣情況墨微?(例如某個值不能超出一定的范圍、字符串不能為空之類)

事先通過上面的方法過一遍邏輯可能花不了你多少時間扁掸,但可以幫你避免不少事后產(chǎn)生問題帶來的煩惱翘县。

進階級的計劃:

  • 詳細的了解分析待解決的需求與問題。(根據(jù)需求大致規(guī)劃細節(jié)后也糊,在進一步與產(chǎn)品經(jīng)理溝通細節(jié)問題)

  • 可以提前做個草稿模擬大致的代碼結(jié)構(gòu)炼蹦。

  • 仔細思考好每段代碼用來實現(xiàn)什么效果。

  • 繪制流程圖狸剃、泳道圖等圖標來幫助可視化的呈現(xiàn)整體邏輯掐隐。

  • 代碼編寫完根據(jù)擬定的流程重新審視一遍代碼。

  • 做好代碼注釋,便于其他人理解邏輯虑省。

如果流程復雜且時間充裕匿刮,也可以根據(jù)上面的方法試一試。

image.png

2. 使用有意義的變量與函數(shù)名稱


變量與函數(shù)的命名一直是程序員日常工作中的一大難題探颈。

但是一個易于閱讀與理解的名稱還是十分必要的熟丸。

應當根據(jù)當前變量與函數(shù)所代表的功能設置對應的英文名稱。

優(yōu)化前:

let x, y, z;
function f() { 
    // 省略具體函數(shù)功能
}

上方的例子往往很難理解x伪节,y光羞,z,f()具體代表什么怀大,甚至你自己過一段時間再來回顧都難以理解纱兑。

優(yōu)化后:

let firstName, lastName;
function printFullName(firstName, secondName) { 
    // 省略具體函數(shù)功能
}

優(yōu)化后,就能很容易的理解這段代碼是讓你輸入姓氏與名稱化借,然后通過函數(shù)最終輸出完成的姓名潜慎。

下面是幾種最常用的命名規(guī)則:

  • 駝峰法:將單詞拼接在一起,除第一個單詞外蓖康,每個單詞都以大寫字母開頭铐炫。(例如: firstName, lastName蒜焊, printFullName)

  • Pascal法:與駝峰法類似倒信,但第一個單詞也是大寫的。(例如:FirstName山涡, LastName堤结, PrintFullName)

  • 蛇型法:所有單詞都是小寫,但是通過下劃線分隔鸭丛。(例如:first_name竞穷、last_name、print_full_name)

  • Kebab法:類似蛇型法鳞溉,但是通過橫線作為分隔瘾带。(例如:first-name、last-name熟菲、print-full-name)

一個項目最好只選擇一種命名法看政,并保持下去。

當變量或函數(shù)所表示的意義較為復雜時抄罕,最好在聲明的時候在旁邊通過注釋解釋清楚具體細節(jié)允蚣。

let firstName; // firstName 名稱 (不允許超過4個字)
let lastName;  // lastName 姓氏 

// 根據(jù)輸入的姓氏與名稱拼接,并顯示在頁面中 
function printFullName(firstName, secondName) { 

}

命名的一些小技巧:

  • 符合描述呆贿,貼合對應的變量與函數(shù)嚷兔。

  • 盡量避免單個字母的名稱森渐,除非是大眾化認知的名稱,例如for循環(huán)中命名i作為索引冒晰。

  • 易于記憶與拼寫同衣,盡量簡潔。

  • 整個項目同類命名盡量一致壶运,但要避免同一作用域內(nèi)重復聲明導致覆蓋耐齐。

3. 編寫模塊化函數(shù)


作為程序員日常難以避免與函數(shù)打交道。函數(shù)有助于將一個復雜需求拆分成多個小部分蒋情,單獨管理埠况。

優(yōu)質(zhì)的函數(shù)有助于測試、調(diào)試和復用恕出。同時還能提升代碼可讀性询枚,每個函數(shù)的作用目的都是明確的。

優(yōu)化前:

function multiplySquaredNumbers(x, y) {
    let xSquared = x * x;
    let ySquared = y * y;
    return xSquared * ySquared;
}

console.log(multiplySquaredNumbers(5, 6)); //最終輸出 360

上方的函數(shù)針對兩個參數(shù)的平方值進行相乘浙巫,試想一下我們是不是可以將求平方值再次封裝成一個函數(shù)?

優(yōu)化后:

function multiplySquaredNumbers(num1, num2) {
    return Math.pow(num1, 2) * Math.pow(num2, 2);
}

console.log(multiplySquaredNumbers(2, 3));

這是使用了JavaScript提供的Math.pow()函數(shù)替代原本的平方值獲取刷后,我們可以再試試自己來實現(xiàn)這個求平方值的函數(shù)的畴。

動動手:

function square(num) {
    return num * num;
}

function multiplySquaredNumbers(num1, num2) {
    return square(num1) * square(num2);
}

console.log(multiplySquaredNumbers(5, 6)); 

此時我們通過生成square()函數(shù),將求平方值這個小需求封裝起來尝胆,方便調(diào)試與復用丧裁。

當然日常編程過程中,可根據(jù)需求自行拆分函數(shù)含衔,同時我們也應該盡量使用代碼底層已經(jīng)幫我們聲明好的函數(shù)煎娇。例如上例中的Math.pow()贪染,盡量避免重復造輪子缓呛。

編寫函數(shù)我們還要注意:

  • 使用規(guī)范的命名。

  • 避免函數(shù)產(chǎn)生副作用杭隙。(例如將數(shù)組作為參數(shù)傳入票髓,最后調(diào)整了數(shù)組順序蜗细,導致其他地方使用時產(chǎn)生循序錯誤問題。在命名函數(shù)時要定義好適用范圍,如果本身就是為了調(diào)整順序的函數(shù)那是正確的善玫,如果是作為過濾數(shù)據(jù)的函數(shù)結(jié)果變更了順序或渤,那就回產(chǎn)生問題)

  • 考慮好參數(shù),避免過多不必要的參數(shù)

上面的例子只是基礎的演示,如何寫出更優(yōu)質(zhì)的函數(shù)還可以多了解一些《設計模式》相關(guān)知識池磁,結(jié)合使用能讓你的函數(shù)更具性能與通用性华临。

如果覺得教程文字太過于枯燥雅潭,也可以試試《JavaScript 函數(shù)式編程》這種游戲化函數(shù)式編程教學體驗核偿。

image.png

4. 適當使用數(shù)據(jù)結(jié)構(gòu)


數(shù)據(jù)結(jié)構(gòu)是將數(shù)據(jù)分組的最有效的辦法。

數(shù)據(jù)結(jié)構(gòu)有許多不同的類型,但最常見的是數(shù)組對象振亮。

數(shù)組是數(shù)據(jù)列表。它們可用于存儲任何類型的數(shù)據(jù)褒搔,但數(shù)組中的每個項目必須具有相同的類型惧辈。

數(shù)組使用方括號聲明:

const arr = ['a', 'b', 'c'];

對象是使用鍵值來整理數(shù)據(jù)的集合念逞。鍵用于索引訪問值莱睁,這些值可以是任何類型的數(shù)據(jù)。

對象使用大括號聲明:

const obj = {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
};

適當?shù)氖褂脭?shù)據(jù)結(jié)構(gòu)琳彩,能提升代碼的可讀性與效率露乏。能幫助你更快速的獲取到所需要的對應的值驹止。

優(yōu)化前:

let dog1 = '小強';
let dog2 = '鹵蛋';
let dog3 = '臘腸';
let dog4 = '二蛋';
let dog5 = '狗勝';

優(yōu)化后:

const dogGroup = ['小強', '鹵蛋', '臘腸', '二蛋', '狗勝'];

優(yōu)化后臊恋,通過遍歷數(shù)組中的數(shù)據(jù)就能快速獲取小狗們的名稱抖仅,不需要在逐個調(diào)取變量厂画。

可以通過《JavaScript 基本數(shù)據(jù)結(jié)構(gòu)》欲虚,了解更多數(shù)據(jù)結(jié)構(gòu)相關(guān)知識欣喧。

5. 養(yǎng)成寫注釋的習慣


注釋是未執(zhí)行的代碼浅辙。

程序員可以通過寫注釋來幫助自己或者他人理解代碼的邏輯。

不同語言的注釋方式有所不同盛正,文中我們以JavaScript舉例严望。

// 表示單行注釋

/*
    表示多行注釋
    表示多行注釋
    表示多行注釋
 */ 

好的注釋習慣有助于:

  • 幫助自己或者他人更快的理解代碼邏輯與含義。

  • 幫助自己留下代碼實現(xiàn)與修復記錄骨饿,便于后期理解览爵。

使用注釋的小幫手:

  • 使用注釋來解釋您的代碼正在做什么以及為什么要這樣做蔚携。

  • 使用注釋來記錄自己關(guān)于需要完成或修復的事情的筆記堕澄。

  • 使用注釋來解釋復雜或不明顯的代碼枉证。

  • 使用注釋來增強可讀性代碼。

  • 在編寫代碼的時候就添加注釋肮砾,而不是過后吃环,因為往往沒有過后。

  • 不要過度注釋您的代碼洋幻,保持剛需郁轻。

  • 在評論中使用清晰簡潔的語言。

  • 注釋內(nèi)容盡量說人話文留。

  • 使用代碼使注釋保持最新好唯。如果您更改代碼,請更改注釋燥翅。

  • 刪除過時的注釋骑篙。

image.png

由于篇幅過長,本文將分為上/下兩篇森书。

上篇更多介紹了編程基礎技巧靶端;

下篇則更側(cè)重于實戰(zhàn)中的應用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凛膏,一起剝皮案震驚了整個濱河市杨名,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猖毫,老刑警劉巖台谍,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吁断,居然都是意外死亡典唇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門胯府,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恨胚,你說我怎么就攤上這事骂因。” “怎么了赃泡?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵寒波,是天一觀的道長乘盼。 經(jīng)常有香客問我,道長俄烁,這世上最難降的妖魔是什么绸栅? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮页屠,結(jié)果婚禮上粹胯,老公的妹妹穿的比我還像新娘。我一直安慰自己辰企,他們只是感情好风纠,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牢贸,像睡著了一般竹观。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潜索,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天臭增,我揣著相機與錄音,去河邊找鬼竹习。 笑死誊抛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的由驹。 我是一名探鬼主播芍锚,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔓榄!你這毒婦竟也來了并炮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甥郑,失蹤者是張志新(化名)和其女友劉穎逃魄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜搅,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伍俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勉躺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌瘾。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饵溅,靈堂內(nèi)的尸體忽然破棺而出妨退,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布咬荷,位于F島的核電站冠句,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏幸乒。R本人自食惡果不足惜懦底,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罕扎。 院中可真熱鬧聚唐,春花似錦、人聲如沸壳影。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴咧。三九已至根灯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掺栅,已是汗流浹背烙肺。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氧卧,地道東北人桃笙。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像沙绝,于是被迫代替她去往敵國和親搏明。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容