計算機編程是一個實踐性很強的「遊戲」,對於新入門者,好多人都在想,哪一門編程語言最好,我該從哪開始呢?個人回答是:語言不重要,理解編程思想纔是最關鍵的!全部編程語言都支持的那一部分語言特性(核心子集)纔是最核心的部分。因此從實際狀況出發,選一門你看着順眼,目前比較貼近你要作的工做或學習計劃的計算機語言,開始你的編程之旅吧。javascript
業界有一個二八規律,其實編程也同樣,你們回頭看看,咱們寫了那麼多代碼,是否是大部分都屬於這門語言的核心子集部分?也就是說,咱們只要掌握了一門語言的核心子集,就能夠開始工做了。java
咱們要儘可能多的瞭解不一樣的編程範式,這樣能拓展咱們的思路。學習語言的時候,有時能夠同時學時兩門編程語言,對比學習兩門語言的同一律念,讓咱們可以更容易且深刻的理解它。我學習javascript的閉包時,開始怎麼也理解不了;我就找了本python書,對比着學,才慢慢的理解了。node
編譯型語言 VS 解釋型語言python
動態結構語言 VS 靜態結構語言git
強類型語言 VS 弱類型語言github
各類類型的語言,咱們都要有所瞭解,這樣纔可以全面的理解編程語言中的各類特性,在面對特定的問題時,才能作出正確的選擇。typescript
項目需求:統一處理不一樣圖形(圓形、長方形、矩形等)的面積計算。編程
1.Circle類講解數據封裝概念,將半徑與名稱封裝在類內部,並提供訪問方法swift
export default class Circle { private r: number private name: string constructor(r: number) { this.r = r this.name = 'Circle' } getName(): string { return this.name } area(): number { return Math.pow(this.r, 2) * PI } }
2.長方形與矩形講解繼承概念segmentfault
//rectangle.ts export default class Rectangle { private a: number private b: number private name: string constructor(a: number, b: number, name?: string) { this.a = a this.b = b if (name === undefined) this.name = 'Rectangle' else this.name = name } getName(): string { return this.name } area(): number { return this.a * this.b } } //square.ts export default class Square extends Rectangle { constructor(a: number) { super(a, a, 'Square') } }
3.實例統一處理不一樣的形狀一塊兒計算面積,講解多態概念
let shapes = Array<any>() shapes.push(new Circle(2)) shapes.push(new Rectangle(5, 4)) shapes.push(new Square(3)) shapes.forEach((element) => { console.log(`shape name: ${element.getName()}; shape area: ${element.area()}`) })
加入接口,規範形狀對外部分操做要求,讓錯誤提前到編譯階段被發現
export default interface IShape { getName(): string; area(): number }
用實例來講明怎樣理解函數是一等公民,去掉咱們習覺得常的函數外層包裹
let printData = function(err: any, data: string): void { if (err) console.log(err) else console.log(data) } let doAjax = function (data: string, callback: Function): void { callback(null, data) } //咱們習覺得常的使用方式 doAjax('hello', function(err, result){ printData(null, result) }) //真正理解了函數是一等公民後,你會這樣用 doAjax('hello', printData)
在實踐過程,處理異步調用容易誤解的一個重要概念,異步函數執行的具體流程是什麼樣的?
let pf = function(data: string, n: number, callback: Function) { console.log(`begin run ${data}`) setTimeout(() => { console.log(`end run ${data}`) callback(null, data) }, n) } let p = Promise.promisify(pf); (async () => { let ps = Array<any>() ps.push(p('1111', 2000)) ps.push(p('2222', 1000)) ps.push(p('3333', 3000)) await Promise.all(ps) })()
以上是《運用typescript進行node.js後端開發精要》視頻課程的概要,有興趣的童鞋能夠去觀看視頻。
傳送門: 快來學習Typescript,加入會編程、能編程、樂編程的行列吧!