作者 arrenwu (最是清楚哇她咩)
標題 Re: [閒聊] 結論是C#比Java厲害嗎
時間 Wed Dec 20 10:21:49 2023


※ 引述《arrenwu (最是清楚哇她咩)》之銘言:
: 而如果追求更方便、同時短短幾行就能引出很大效果的程式語言,
: 那從Python入門也行。這個對程式麻瓜最友善
: 缺點就是使用者對於電腦處理整數、小數點、字串的方式,
: 以及記憶體管理會很沒有概念。
: 有人可能覺得這些計概會教,我個人覺得是...
: 這些東西只有摸了才會知道在幹嘛,讀過計概就只有「反正底下就是01010101」
:
: 推 phoenix286: 就算不清楚電腦處理資料型態及記憶體管理的方式        12/20 08:33
: → phoenix286: 這對使用者會有什麼影響嗎?                          12/20 08:33
整數簡單,會出現問題通常是浮點數

------ Pytthon 3.9.7 ------

        >> x = 0.1 + 0.2
        >> x - 0.3 == 0.0
        False

表面上看起來是 "0.1 + 0.2 - 0.3 不等於 0.0"的怪事,
但實際上是你打進一個浮點數,實際上程式存進去的數值跟人想的不一樣。
這必須要知道電腦怎麼處理資料


另外關於記憶體管理的部分,我講記憶體管理可能容易造成誤解,
我想描述的是在 C 裡面 malloc 或 new 算子在記憶體裡面創造物件的機制

最終是要了解 pass by reference 和 pass by value 的差異。
C/C++ 會強迫使用者要理解這差異

但是Java以上隱藏了pointer的存在後,這部分就比較模糊

這差異的重要性在於...

x = 3;
y = x;   # 複製x到y
y = 9;   # 現在設定y的數值為9

x -> 3
y -> 9

非常直覺的結果

但換成 numpy 的矩陣:

import numpy as np
A = np.array([[1,2],[3,4]])
B = A    # 複製A到B

B[0,0] = 9  # 改動B的第一個entry為9

B -> [9,2]
     [3,4]

A -> [9,2]    <---- 你只有改B,但A也被改動了
     [3,4]

要理解這個情況,使用者無論如何都要理解pointer的概念


啊對了,矩陣那個例子,在MATLAB不成立
MATLAB 矩陣的等號算子是 deepcopy 嘻嘻

不過記憶體管理也確實該要了解啦
因為有時候你一個不小心還是會在Python造成memory leak。
如果沒有記憶體管理概念的話,你連你的程式可能造成memory leak都不知道

--
角卷綿芽Line貼圖上市囉~
24種可愛貼圖,只要30元!
https://pbs.twimg.com/media/FTwzC2AUYAAF5AY.jpg
購買連結:https://t.co/lNGU5jN7b2

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.45.195.96 (美國)
※ 作者: arrenwu 2023-12-20 10:21:49
※ 文章代碼(AID): #1bWa-_UX (C_Chat)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1703038911.A.7A1.html
※ 同主題文章:
Re: [閒聊] 結論是C#比Java厲害嗎
12-20 10:21 arrenwu
SangoGO: 只好出動邏輯大師javascript了1F 12/20 10:22
smart0eddie: js不好嗎2F 12/20 10:28
說來慚愧 javascript雖然夯到爆 但我沒用過
Ericz7000: 大大都用什麼3F 12/20 10:29
個人娛樂用Anaconda Python
JustBecauseU: js 1=='1' 嘻嘻4F 12/20 10:30
msbdhdfceb: C#有decimal可以用,不會出現0.3那個例子的問題,如可你很在意十進位精度時可使用(金融計算時尤其重要5F 12/20 10:31
madrac: 我覺得浮點數是另個單獨的問題啦7F 12/20 10:32
ccpz: js 0=="0", 0==[] 都是 true, 但是 "0"==[] 會是 false8F 12/20 10:32
==
madrac: 我通常都是教人: 沒必要的話就全部用整數記資料9F 12/20 10:33
s7503228: js爛死了幹10F 12/20 10:33
但是js超爆幹夯耶
ccpz: NaN==NaN 也是 false11F 12/20 10:33
madrac: 真的要寫需要大量數值方法的程式就是開 Matlab 了12F 12/20 10:33
用Python也可以啦
devilkool: 我還看過全部用字串記的= =13F 12/20 10:33
SangoGO: 因為js是用在前台的,戰場不同14F 12/20 10:36
usoko: js真的是邏輯大師 py算什麼
不過這年頭IDE都會跳warning告訴你memory leak15F 12/20 10:38
s7503228: 我也常用所以知道問題 不過還好現在我只搞後端 前端不用弄了 基本上可以跳過 JS只適合搞一些簡單的東西 再多都要套件去弄17F 12/20 10:40
msbdhdfceb: 動態型別語言都會有很多魔法 JS只是裡面巫力特別高的20F 12/20 10:40
Python 的函數,變數可以不用宣告型別。
這點有時候會搞得debug滿痛苦的
rabbithouse: 傳址跟傳值搞得懂的話 C++用起來會有人機一體的感覺很舒服21F 12/20 10:40
我...嗯...只覺得C++的macro能搞得error log很難懂而已
倒是從來沒有人機一體的感覺
※ 編輯: arrenwu (98.45.195.96 美國), 12/20/2023 10:41:48
s7503228: 現在寧願值都在後端處理完在丟到前端做簡單處理就好 JS本身能不用就不用==23F 12/20 10:41
SangoGO: 越方便就越不清楚...,畢竟是js,一個var包山包海25F 12/20 10:41
usoko: 以算力來說 複雜的事情本來就該在後端做完26F 12/20 10:41

--
作者 arrenwu 的最新發文:
點此顯示更多發文記錄