最近剛從C++轉到JS
覺得C++為何要有這麼多限制?
靜態語言的特性就先不說
像是不須string x = 'hello'
可以直接let x = 'hello'
,便知道它是字串
另外陣列的變大
JS:let x = [1, 2, 3]
x[3] = 4
x就變成[1, 2, 3, 4]了
用在物件更是方便
這點C++就完全無法
再來是函式
function hello(name){
console.log('hello ' + name)
}
如果有人的name是純數字或是字串的話,使用上都可通用
這點C++也是無法
因為C++大部分自學的,尚無法理解它的精神何在
也沒學過更精深的計算機底層課程
請問C++為何要這麼多限制呢?
???你說的都可以阿,幹嘛去嘴10年以前的C++
像是不須string x = 'hello'
可以直接let x = 'hello',便知道它是字串
你可以用 auto
關鍵字阿
另外陣列的變大
你可以用vector阿
如果有人的name是純數字或是字串的話,使用上都可通用
你可以用 函數模版 阿
其實原 PO 提出的幾點跟前端後端沒有太大的關聯度,會有這些差異是因為 C++/C 的開發者需要自己管理/回收記憶體,C/C++ 的開發者可以操作變數的記憶體位址(&
operator),而 JS 全都幫你管理好了(所以也需注意資料的深淺複製問題)。
如果對系統程式有興趣但又覺得 C++/C 很不方便,也可以考慮學習帶有 GC(Garbage Collection)的程式語言,像是 Rust 和 Golang。
題外話:其實 C++ 相較於 C 已經方便很多了,原 PO 提出的問題基本上都可以用 STL(Standard Template Library)解決。JS 在初學階段確實很爽,但到了系統開發階段就會發現 JS 的型別設計其實跟 ? 一樣(這也是 TypeScript 被廣泛使用的原因)。
基本上任何程式語言被發明都有創立者自己想要解決的問題,不同的設計就會有不同的取捨,我常常看到很多初學者問第一個語言該學什麼,但其實應該要問問自己想要摸索的是什麼才對。
請問想學習系統程式有什麼入門方式嗎?
liuc772
推薦這個:https://github.com/angrave/SystemProgramming
中文翻譯:https://github.com/ENSREG/SystemProgramming-zh
您想了解的,其實只是區分為強型態及弱型態語言。
但這並不代表強型態語言就不好。
弱型態語言就感覺很好。
就如其它大大們說的。當您被弱型態語言,給婊過一次後。
你就會覺得強型態語言的好。
依目前的PHP來說,它是屬於後端語言的一種。其也算是屬於弱型態語言的代表。
但就目前新的版本來說,也開始再追求強型態語言的配置處理了。
原因為何?
因強型態語言有其它的好處存在。
就目前來說,無論是JS或是PHP等弱型態語言。我個人都已經養成習慣,會去宣告變數類型。
免得 1+1 變成了 「11」 而不是 「2」
我現在用js也盡量不使用
let i = 1 ;
alert(i+'1') ;
到底是2還是11的混淆自己還有接手程式的人的眼睛的事
自從有新的string imterpolation字串插補特性出現,現在再也不用那麼累了
以下保証輸出11,而不是2(我以為的是2)
let i = 1 ;
alert(`${i}1`) ;
上例一定會有人看了會說,幹嘛弄那個字串插補多打${}不累嗎?當你的JS裡出現一堆單雙引號跟+時,你就懂了
以下的寫法,不明確嗎?
let csstable2 =
`<div class='boxshadow roundbox smallertext myworklist' style='vertical-align:top;'>
<div class='csstable'>
<div class='csstr'>
<div class='csstdx WRM'>即將到來</div><div class='csstd'>${comingWorks}</div>
</div>
</div>
</div>`;
不管是文字變數,還是時間數值,統統比照辦理(還可以FORMAT),這樣不更可讀?但假設你不是想搞神秘的話
強型別有強型別的好處,執行效能,記憶體管理,開發者閱讀難易度,都會比弱型別的來的好很多,很多,至少不用猜,猜這個變數到底是幹嘛用的,影響範圍有多大
首先澄清一下,C++或C不叫做後端語言喔~~
並非所有語言都能粗暴的用前、後端區分的。
C++與C都是現今作業系統的發展基礎語言,其功能的強大是JS、Python、Swift、Dart、PHP、ASP.NET這些語言望塵莫及的,效能更不用說。
光看宣告的方式就能理解,運用C++或C操作硬體非常注重對指標的認識,指標的操作就是他們能提高效能的手段,也就是說,你知道要存什麼型態的資料,要用多少記憶體,能夠清楚掌握,你就能設計出很有效能的資料結構或物件。而要想達到這個目的,當然要嚴格的規範各種型態所占用的記憶體大小啊~~~
就您的例子來說:
String x = 'hello';
這句話,你知道hello這個字串在你的電腦上硬體中占用多少記憶體嗎?JS一定無法給你答案,但C或C++就可以。
因為JS的運作環境是在瀏覽器上,並不是在實機上,早期必須仰賴瀏覽器的既有的函式庫來支援其運作,但現在有node.js來輔助,才變得比較像在寫需編譯的程式。
C++與C語言的套件較少,甚至很多的設計是case by case的,許多函式或演算法需要自己設計,因此學習C++或C需要對程式、資料結構與計算機組織有相當程度的認識,才能運用自如,也才能體會它的強大。
程式語言的水很深的~~~
我覺得這問題可能不太需要認真討論
因為
樓主
2022-11-07/2022-11-15 還在問 HTML/CSS
2022-11-17 就開始初學 C++
2022-12-26 就初學 JS
照這速度看來
過年前應該會再換另一個語言
我個人非本科的想法
我覺得動態語言應該要感謝摩爾定律跟Google的v8等直譯器的優化,在十幾年前很難想像我們可以這樣浪費記憶體跟效能,不先確認變數型別還能做直譯
我也認同動態語言是趨勢,不僅寫起來直觀方便,讓很多非本科不需要很高的學習成本就能應用,但也不是所有的領域都不必追求速度跟效能,例如微晶片或韌體bios這些,所以C/C++依然不會消失
但我猜以後可能會出現AI編譯語言來一統江山,開發時你可以像python直譯測試你的code,但要部署時AI會幫你決定變數間最佳的型別跟記憶體用量,並編譯成高效能(給電腦看的)的機器語言,來兼具兩者的優點,我覺得這會是未來的趨勢
要有更深入的控制,並須付出更嚴謹的代價,很多系統底層的運作,不嚴謹不行,很多作業系統及驅動程式都是透過嚴謹的程式語言開發的,這樣的結果就見怪不怪了
之前有一篇問題python想控制鍵盤滑鼠 寫遊戲外掛
https://ithelp.ithome.com.tw/questions/10211943
我說...因為遊戲開發商可能有特別的保護措施,防止外部程式控制鍵盤和滑鼠。
你用高階語言就當然會被一起擋掉
如果你用的程式語言越低階,越有機會不被偵測到
舉個例子
假設你買一隻巨集鍵盤滑鼠
他控制鍵盤滑鼠連點 走的是驅動程式,就可以用。
驅動程式通常是C或C++寫的
所以你會發現遊戲外掛都是C++寫的,甚至搭配一些組合語言來破解
如果一定要由python開發
您可以尋找看看pytho有沒有底層一些的第三方鍵鼠函式庫(C/C++)
但也不能保證在所有情況下都能正常工作。
C++有很多限制是因為它是一種靜態類型語言,它在編譯時對類型進行嚴格檢查,以保證程式碼的正確性。例如,它需要嚴格的定義類型,以及明確的定義數組的大小。這些限制幫助開發人員在編碼過程中儘早發現錯誤,並有助於保證程式碼的可靠性。
然而,這些限制也帶來了一些編碼的麻煩,因此,動態語言如JavaScript就誕生了。它更加靈活,不需要靜態的類型聲明,允許在運行時進行類型檢查。這使得JavaScript在快速原型開發中非常有用,但是它的程式碼不如C++等靜態語言的程式碼可靠。
JavaScript的靈活性是為了提高開發效率。
當你沾沾自喜的時候....就只能寫寫上層簡單一點的東西...