編程語言那么多,該怎么選呢?作為編程小白,起初都會有這樣的困擾。了解清楚編程語言的種類,無論是對找工作、還是規劃將來的職業發展,都有很大的好處。今天先和小華來了解下編程的種類吧~
1.C語言
C語言是面向過程的靜態編譯型語言,也是一切高級語言的鼻祖,可以說如今幾乎所有流行的語言都有C語言的影子。C語言在底層開發,包括操作系統、驅動、中間件、圖形庫、數據庫、網絡庫等開發等有著無可替代的作用。
C語言的生命力也是最長的,流行了近50年,至今還是開發排行榜前3的位置。C語言足夠簡潔清晰,沒有那么多概念,也沒有那么多API,性能極好,它是所有編程人員都應該掌握的語言,可以作為計算機基礎來學。
C語言代碼實現如下,該可以返回一個分解后的數組。從代碼里可以看出,首先需要申請一個動態數組,長度為len的內存空間。該數組用來保存分解數,每分解出一個數字時則追加到數組中去,數組下標也隨之增加。當分解完成后,最后返回分解數的數組。
代碼邏輯:
建立雙循環,自最小的質數2開始不斷遞增遍歷。
外層循環為是否繼續分解的條件,當i的乘方小于等于要分解的數字時,說明還可以分解。i不斷遞增,直到i的平方大于num為止。
內循環則不斷用num來除以約數,看能否除盡,能除盡則以得數作為新的num來繼續分解,并將剛才的除數i追加到分解結果中。當i無法整除num時,說明當前i分解完成,則跳出內循環。
當循環終止后,最后分解的得數如果小于i的平方就沒法繼續分解,如果i大于1那剩下的num就是最后一個分解數。
2.C++語言
由于C語言相對簡單,且是過程式,開發大型復雜系統或者大型軟件界面時會力不從心,于是C++應運而生。其實我并不覺得C++比C好或強大,大型系統完全可以通過自己組織代碼來得到良好架構,也有很多單獨C語言UI庫。
C++的生命力也很強大,幾乎是很多中大型系統、游戲、桌面軟件、服務端、網絡通信等的首選語言,至今也在開發排行榜前5的位置。
這里C++代碼實現與C語言一致,因為沒有用到面向對象,所以沒有任何區別。其他差異可以從倉庫里查看。
3.Java語言
Java語言發明于上世紀90年代,由Sun公司推出,后被收購。Java是一門面向對象編程語言,吸收了C++的各種優點,但放棄了C++里難以理解的多繼承、指針等概念。同時提供了垃圾自動回收的能力,程序員再也不用手動釋放內存了。
Java的語法與C基本一致,除了增加了類以及集合相關的概念。Java主要面向的領域是后臺開發、中間件開發、開發、大數據開發等,目前Java是編程排行榜排名第一的語言,非常流行,作為入門學習語言非常不錯。不過由于設計的過于嚴謹刻板導致有些臃腫,目前已有下滑的跡象。后起之秀Go、、、Dart無不在蠶食Java的地盤。
相信不久的將來,Java開發排行榜老大的地位將面臨很大的挑戰。跟Java非常像的是它的老對手C#,這個語言在環境下那是絕對的老大,但可惜在Linux以及Mac、iOS、等系統下,C#幾乎無人問津。Java地位岌岌可危,但C#進化得不錯,前景很好,這里不再贅述。
這里Java版使用了,是長度可變的列表,相比C語言使用數組來講要方便些。代碼上基本一樣,如果也使用int數組,那代碼就幾乎一樣了。Java里一切都是以Class為基礎,所有內容都必須放在Class內,方法(函數)、屬性(變量)不能獨立于外。
4.語言
是網景公司在90年代不經意間發明的一種語言,起初是為了解決瀏覽器內交互的問題。最初的名字是,但當時Java剛剛推出,因為從語法上也參考了Java,因此就借鑒了Java的名字,改為。但實際上它的語言本質更接近Self及,是一門基于對象的函數式動態編程語言。它非常靈活,語法越來越完善,看起來非常簡單,但是要想真的搞明白原理,卻并不容易。
中國有句話叫“無心插柳柳成蔭”,這句話用在身上再合適不過了。博采眾長,吸收了Self、、Java、C等語言的優勢,目前已經發展成為全球使用人數最多的編程語言,在開發排行榜上也在不斷攀升。
是弱類型語言,其數組不限類型,也無需指定長度,使用起來非常簡單易懂。整個代碼寫法與Java也非常像,只不過簡潔了許多。
除了獨占瀏覽器編程之外,在后臺開發、移動開發、桌面開發、嵌入式開發等領域均有所發揮,可以說未來不可限量。甚至有人說凡是可以用實現的應用,最終都會用實現。
5.
是微軟在2012年推出的基于的一個變種或者稱之為超集語言,完全兼容,最后會編譯成JS來執行。它主要增加了強類型和增強了面向對象,集成了接口和Type等概念,寫法上與JS幾無差異,有點類似于C++之于C的感覺。
的發展態勢也很好,在使用大型工程時,強類型和面向對象的確有些好處。隨著前端工程越來越龐大,也越來越受到歡迎。只是由微軟開發,而JS來自ECMA這個國際化標準組織。
且正在不斷發展變化,也在不斷增加TS的那些語法糖。存在一個可能是將來有一天JS跟TS非常接近,甚至完全一致,那時候TS可能面臨退出編程舞臺。但JS或許并不一定會那么發展,因為那跟靈活多變的動態思路有悖。
因此并不適合作為入門學習語言,而是在已經比較熟悉的基礎上再來學習會比較好。
6.語言
是支持面向對象和面向過程,也支持函數式編程的解釋型編程語言,它在語法風格上也屬于C語言系。但它與其他語言所不同的是采用縮進來表示包含關系,而不是花括號。喜歡這種風格的人對此愛得要命,不喜歡的人則反感至極。
從語言特性上來講,可以說與JS最為接近,既可以采用面向對象,也可以采用函數式。它與Java不同,沒有變量類型聲明關鍵詞,方法也可以脫離于類存在。總體上是一個強類型語言(但因為無需明確變量類型,以及存在自動類型轉換用什么語言開發桌面軟件好,所以也不是嚴格意義的強類型)。
看代碼,可以說是最簡單明了,最易懂。與一樣,也是動態腳本語言,列表(數組)也是動態可變的,其列表操作非常好用。很適合新手學習,因為簡單,同時含括了編程的幾乎所有概念。
自90年代推出,早期為增強Shell腳本,后來發展為Web后臺語言,一直不溫不火,后來隨著大數據和人工智能的流行,在這兩個領域里大放光彩,未來前景非常好,是最值得推薦學習的入門語言。
看下的代碼量是否最少(跟JS差不多),也最好懂?
7.Go語言
Go語言是靜態編譯強類型語言,由于2009年推出,其初衷是替代C語言做系統開發,但目前來看更多是替代Java做服務端開發。其語法風格與C十分接近,在C語言基礎上增加了內存安全和垃圾自動回收功能。
Go語言不以類為依賴,語言非常簡練,語法風格上是C和JS的混合體,變量聲明是var,數組空間需要提前申請,無需括號和分號。從這段代碼來看與C語言差異不大,本質上是C的變體。
Go語言目前在微服務和云原生領域頗受歡迎,在高并發、高可用Web應用中發揮著良好的作用,這部分有取代Java的趨勢。Go語言在分布式系統、網絡編程領域表現良好,目前最流行的容器編排系統就是Go語言編寫,未來更多云原生應用會逐漸采用Go語言。
Go作為新貴,這幾年開始在服務端大放異彩,看下Go的代碼風格,有沒有感覺很舒服?
8.語言
是公司于2011年推出的編程語言,這是一個面向JVM的新語言。就是開發IDEA編輯器的公司。
代碼最終編譯成Java字節碼class執行,也可以編譯成,以方便在沒有JVM的設備上運行。除此之外還可以編譯成二進制代碼直接在操作系統上運行。
也可以看成是一種Java語法糖,是完全兼容Java語法的。相當于是簡化版的Java,的確Java太臃腫了,提供了變量類型、高階函數、函數獨立等用什么語言開發桌面軟件好,使得編程風格更接近于JS和。
在 中沒有原始類型,一切都是對象。參數一旦將值分配給val,就無法更改。如果想重新分配它,則必須將其聲明為var,而在的方法中,參數隱式聲明為final val,也無法更改參數。因此,這里將賦值給變量num。
語言設計的確很優秀,目前已正式成為官方支持的開發語言。
9.Dart語言
Dart是支持即時編譯和提前編譯的強類型語言,于2011年由推出。主要針對,對一些不適合的特性進行改進,如弱類型,非完全面向對象等。Dart的理念是借鑒Java 語言的數據類型和內存管理機制和面向對象的特征,同時借鑒 語言,將函數提升到“第一等公民”(first class),再就是參考 Self 語言,使用基于原型()的繼承機制。這么看來幾乎就是的翻版或者說是增強實現,跟不同的時,它并不兼容。
Dart語法與JS幾乎一致,只不過需要提前編譯并且是嚴格數據類型。但在實際使用上與JS可謂非常接近,熟悉JS或TS的開發者上手幾乎零成本。
Dart目前主要用在框架下,用于系統開發App,目前來看未來存在較大不確定性。因此Dart不太適合作為入門語言,而是在你充分掌握或Java的前提下去學習它。
注意這里取整除法與其他語言略有不同,如果不加~則得到小數了。
10.Swift語言
Swift是蘋果于2014年推出的旨在替代-C的語言,主要用于iOS開發。Swift是靜態編譯強類型語言,但從語法風格上跟JS有點相似,用var聲明,第一型,結尾不要分號,縮寫為func。似乎也跟Go語言有點像。可以說Swift具有腳本語言的表現力和趣味性,同時具備系統編程語言的嚴肅性和高性能,取代-C指日可待。但是Swift似乎領域有限,僅限于Mac和iOS客戶端開發。
從語言趨勢上看,C+Java+JS的結合體會是大勢所趨。尤其是類JS和語法,幾乎所有最新的高級語言都在吸收JS或的簡潔優雅特性,當然都摒棄了JS弱類型的特點。從Swift看數組聲明也非常方便,無需申請空間和指定長度,可以任意與移除。看看以下代碼,是否與JS幾乎一致了?
Swift是所有做蘋果和iOS開發所必須學習的語言,但不適合作為編程新手入門學習。因此編程入門還是學更大眾和流行的語言為好。
11.-C語言
-C(簡稱OC)是蘋果原生的開發語言,衍生于C語言,在Mac下就像里面的VC++一樣。但說實話OC的語法看起來并不是很友好,從變量聲明到對象調用,看起來與其他語言不是很一致,使用起來覺得和別扭。雖然語法風格上有點別扭,但總體上來也是類C的,所以本質上區別不大。
OC的類聲明是,然后通過來實現類。OC的方法如果寫在類里,則是方法,如果寫在外面就是函數。其數組要申請分配空間,但長度無需指定。其數組操作和對象引用的寫法上與其他語言差異較大,但從本質上來講也是一致的,只是語言風格有所差異,所以習慣了也還好。
看一下OC的這個類和方法,相比其他語言來講總體結構一致,但是語言風格上要顯得啰嗦。所以,OC不適合作為入門學習語言,甚至可以不去專門研究,直接學習Swift即可。
12.Rust語言
Rust最初由研究院提出,后經多方改良,于2015年正式發布。Rust的語法和C、C++非常類似,它的目標就是替代C和C++。
Rust的目標是高安全、高性能、高并發,它拋棄了影響性能的垃圾回收器,通過變量所有權的方式來自動釋放內存,同時提供多線程支持,Rust是內存安全的。
Rust 雖然沒有沒有專門的Class來聲明對象,但它支持面向對象。Rust可通過結構體來定義類,再通過impl來實現。在 Rust 中雖沒有,但可以通過特性(trait)實現多態。
Rust從語法上足夠精煉,風格比較像簡練的高級語言,提供的元組(Tuple)和動態數組()、切片(Slice)模式非常方便,沒有C/C++操作數據那么繁瑣,但同時其又保持了底層語言的優越性能,能看得出來Rust是牛人精心打造的。所以未來,很可能Rust會取代C、C++以及Go和Java。
因此Rust是個非常值得學習的語言,但是不太適合新手入門。當你掌握了、Java或的任意一種,這時候非常有必要學習Rust。
上面這些語言在未來長時間內都會有著不錯的發展,暫時來看都不會被其他語言所替代(已被替代或將會被替代的語言我都沒有提及),其中C/C++、Java、、/、Go、、Swift都有著不錯的就業前景,如果要找工作,這幾門語言值得選擇。