顯示廣告
隱藏 ✕
看板 terievv
作者 terievv (terievv)
標題  標題  [閒聊] 一個函式2000行, 一個if 300行
時間 2015-06-14 Sun. 02:29:18


看板 Soft_Job
作者 guest0970 (guest)
標題 [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 11:07:59 2015


本人看過各類型的程式,但最近看一個程式讓我
嘆為觀止... 一個cpp檔就將近5萬行,這也就算了,
一個函式高達2000行,光是一個if()裡面就有300行,
一個for()裡面有1500行,這是我看過最大的for迴圈,
而且還有很多goto... 你們遇過類似的程式嗎?

--
Sent from my Android

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.15.50.91
※ 文章代碼(AID): #1LTweIjx (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433905682.A.B7B.html
bjj: 好想見識一下......1F 06/10 11:10
sweet00914: 絕世高手!!!2F 06/10 11:12
※ 編輯: guest0970 (101.15.50.91), 06/10/2015 11:14:45
tyc5116: 沒有最爛,只有更爛XD3F 06/10 11:15
chchwy: 看到"還有很多goto"我就跪了4F 06/10 11:16
chucheng: http://goo.gl/2xIytb5F 06/10 11:18
LaPass: 我討厭金字塔......6F 06/10 11:21
yfr: 我們公司則是有另外一個天才致力於把code的行數縮得很短7F 06/10 11:22
yfr: 變數命名寫的過度詳盡,大量使用三元運算子和物件存取
yfr: 每行的字大概都是三四百起跳,沒人看得懂沒人能維護
yfr: 還沒用變數混淆器就比混淆器效果還好,整個養code自重
CaptainH: 養code自重 XDDD11F 06/10 11:35
TeaEEE: 5萬行還好,超過65535行會編譯錯誤12F 06/10 11:41
kattte: 再加把勁就能逼進65535了!!13F 06/10 11:49
sing10407: 為什麼超過65535會編譯錯誤阿?14F 06/10 12:00
csfgsj: 不是腦渣,就是人渣15F 06/10 12:04
csfgsj: 程式很大,但一堆沙拉油桶跟保麗龍在裡面
csfgsj: 怕別人發現,就把它弄得很亂
csfgsj: 這是人品的問題,要是我一定把它開除
ikai99: 我們公司之前也是有code寫到超龐大的看不懂的 後來被fire19F 06/10 12:10
viceversa56: 很明顯是公司問題..20F 06/10 12:13
hidog: 看過 但是沒你那麼慘 會變這樣跟主管有很大的關係21F 06/10 12:41
ChungLi5566: 通常這樣寫還能上線...大概是主管或後台硬的人寫的22F 06/10 12:45
GoalBased: 不要換行就很短了阿@@23F 06/10 12:52
v7q4: 之前接離職同事的code,程式碼就一個.cpp,一個.h ....24F 06/10 12:53
v7q4: 裡面包山包海,cpp有四萬多行,header也有一萬多行.....
v7q4: 再看main function....  嗯...不愧是main!  2萬多行!
GoalBased: 最近寫API 主要class 1000行就有點受不了了27F 06/10 12:58
dreamnook: 有遇過(茶)28F 06/10 13:02
shortoneal: 糟了,是世界奇觀29F 06/10 13:08
KanoLoa: 說不定故意彙整起來要整公司 XD30F 06/10 13:09
iWRZ: 離職工程師的逆襲?31F 06/10 13:27
BlazarArc: 糟了,是世界奇觀32F 06/10 13:31
Eleganse: 2年前寫了一個網頁html碼和cs個別7千多行 至今羞愧不已33F 06/10 13:41
Eleganse: 3個同事自告憤勇要改寫 至今3週 一個功能都改不出來
Eleganse: 只能說解鈴還需繫鈴人 這種修改神作的事
Eleganse: 還是必須讓神作創造者出來解決
f1234518456: 神作不是一個人可以寫出來的37F 06/10 13:50
KMTATM: 太屌惹~這樣在公司就不容易被取代了.因為根本無法交接XDD38F 06/10 13:52
x000032001: 一個func兩百行我就受不了了..一定很沒競爭力39F 06/10 14:19
BlazarArc: 一定有看過 How To Write Unmaintainable Code40F 06/10 14:33
testPtt: 不要出現{{{{{{{{{{'_'}}}}}}}}}}就都還好41F 06/10 14:50
clarkman: 以前公司有整份code只有一個function,,,42F 06/10 14:54
warewolf: 我也在改一個整份7000多行 裡面大概有 1000個goto的程式43F 06/10 16:02
lonysancho: 比爛比不完啊,這就是年久月深+眾志成城的結果啊44F 06/10 16:46
qweqweqweqwe: 主管問題比較大吧…45F 06/10 17:41
kurakidream: 這種code主管還讓你merge 真冏46F 06/10 18:26
wuliou: 太強XD47F 06/10 18:49
chadcoco1222: 想問為何超過65535會compile error?48F 06/10 19:26
pc2990: 應該是超過65536個methods才會編譯失敗,但這是可解的49F 06/10 20:09
Ekmund: 只能說 我看過直的怪物 也看過橫的怪物.......(淚50F 06/10 20:14
discoby: 但反過來也有一堆神經病 把那堆大師的書當聖經讀 但寫出51F 06/10 21:01
discoby: 來卻完全不是那麼一回事 clean code clean到走火入魔 脫
discoby: 褲子放屁生了一堆多餘的函數 只為了包幾行程式碼 函數數
discoby: 量大爆炸
kaibaseto: 貴公司沒有教育訓練或者規定coding風格嗎?????????????55F 06/10 21:16
AlanPeace: 因為大多文化把R&D工作態度都當成捧LP的態度56F 06/10 22:19
AlanPeace: 而不是實際工作上執行的結果
ctrlbreak: 很多外包的、不用團隊合作的, 寫出來的code都這樣...58F 06/10 22:39
ctrlbreak: 反正能幫老闆解決問題的就是好code!
tomo1026: 很強啊XD60F 06/10 23:10
alphadog: 公司付的錢只買得起會動的code啊 高品質的code不用錢逆61F 06/10 23:17
alphadog: 不要去怪為什麼會有這種code的存在 它是合理的產品
alphadog: 要怪就怪你沒眼光沒本事拿少少錢為這公司處理技術債
alphadog: 找好的公司待 有入流的員工和管理就不用再看到這種code
bobju: 那種code很可能是一代接一代,逐代漸近成為巨大恐龍,愈是後65F 06/11 00:53
bobju: 面的人愈難去動,就算把原著們找回來,只怕也改不動了
bobju: 另外這種維護code的事很容易遭遇到[人亡政息]的情境,只要當
bobju: 時維護夠力的人離職了,又沒交接清楚,後面不會有人想去碰,就
bobju: 一直擱到現在你所見的情形了
eva19452002: 只為了包幾行code生出一堆func有什麼問題嗎?70F 06/11 07:39
y3k: 我覺得只要符合需求都是合理的阿 不只維護性是需求 時間也是71F 06/11 09:36
y3k: 需求 當你沒那麼多錢卻要時間那麼短的時候 做出爛貨剛好而已
liddle: 高品質的程式碼很花錢,很多老闆只想出會動的錢。73F 06/11 12:16
bobju: 老闆只對金錢遊戲財務操作有興趣 這種硬底子活還要他掏錢想74F 06/11 21:23
bobju: 得美
drinker: 5萬行還好啦,看過VC++ source tree 300MB 的 (笑)76F 06/12 02:23
amozartea: 我主要class大概600行吧  不能超過100077F 06/12 04:08
zelkova: 我維護的code雖然沒你這麼慘 但也快吐了 整個義大利麵..78F 06/13 00:08
看板 Soft_Job
作者 bota (llll)
標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 19:31:16 2015


※ 引述《guest0970 (guest)》之銘言:
: 而且還有很多goto... 你們遇過類似的程式嗎?

    俗語說:存在的就是有他的道理

    如果上面這句話成立


    那為甚麼大家討厭的 goto 這個功能會繼續保留呢?

    明明就會把程式結構搞亂(每本書都這樣講,...也建議不要用goto)

    , 那為甚麼不從源頭把 goto 取消?

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.190.1
bomakoto: 為了相容1F 06/10 19:31
※ 編輯: bota (1.167.190.1), 06/10/2015 19:35:44
ChungLi5566: goto沒這麼萬惡2F 06/10 19:39
x000032001: goto不是不能用而是要謹慎使用3F 06/10 19:42
YahooTaiwan: 萬惡 goto,用者死4F 06/10 19:44
wtmo5566: C之後的程式語言,很多都把goto語法拿掉了5F 06/10 19:56
hidog: goto可以用 但是不要濫用6F 06/10 19:59
wuliou: 相容7F 06/10 20:02
askacis: Linux kernel 滿天的goto,不要把goto妖魔化了~8F 06/10 20:36
byte: 嵌入式常用 goto9F 06/10 20:37
gpctv: 其實像Java就沒有goto,但是還是把他放保留字10F 06/10 20:57
zelda123: C的goto很常見11F 06/10 21:02
uranusjr: C 做 error handling 有時候沒有 goto 反而更難懂12F 06/10 21:03
discoby: 破壞最佳化的副作用 有時候是好處13F 06/10 21:04
cha122977: Linux kernel的goto也幾乎只拿來做init/destroy就是了14F 06/10 21:07
hpo14: 對樓上那句看的不是很懂15F 06/10 21:07
hpo14: 樓樓上
jknm0510a: 我學的時候就叫我不要用了,有人可實際範例示範好處嗎17F 06/10 21:19
holydc: c 遺毒18F 06/10 21:24
kindamark: 某些很深的func call,用goto能減少return的效能浪費19F 06/10 21:33
chadcoco1222: 推cha大20F 06/10 21:54
clarkman: 底層有時候goto很好用,像是driver的error handle21F 06/10 22:16
legendmtg: c沒goto的話會很麻煩....22F 06/10 22:27
ctrlbreak: 組合一堆jmp jxx 就是goto呀 XD23F 06/10 22:36
ctrlbreak: goto 不是罪
kyushu: 寫底層firmware就有可能會使用到goto25F 06/10 22:39
james732: 很常看到 if (error) goto exit_handle; 之類的寫法啊?26F 06/10 22:42
james732: 可以做到有點像 try { } finally { } 的感覺
cha122977: goto在進入/離開順序相反時很好用28F 06/10 22:46
jackylu63: goto是好東西, 問題在於會不會用29F 06/10 23:41
jackylu63: C因為沒有try-throw-catch的語法, 所以一定要有goto
LaPass: 我寫java的時候就常常在想.... 把goto還給我 QAQ31F 06/11 02:21
eva19452002: 有沒有可能是compiler為了相容之前有goto的code,所32F 06/11 07:42
eva19452002: 以含淚繼續保留goto?
doranako: goto沒那麼邪惡,但是要確保寫的人邏輯要很好,不會出34F 06/11 09:43
doranako: 錯
realmeat: goto就搞不清楚程式流程怎跑會寫出未爆彈..36F 06/11 09:46
hcwang1126: 嵌入式的確常用goto switch case也都沒被取消37F 06/11 11:22
iWRZ: 曾經讀過 Linux coding style38F 06/11 11:26
iWRZ: 其中有一條就說:如果知道這程式在幹嘛 不反對用goto
iWRZ: 打從全世界第一個高階語言就有 goto 只是我幾乎沒在用
y3k: 對第一個寫的人來說goto是神器41F 06/11 11:56
BlazarArc: 通常也只用在 error handle 向下 goto 吧42F 06/11 12:52
BlazarArc: 跟時間機器一樣向上goto有人的頭就要爆炸了XD
MephistoH: 其實 try catch 也是一種goto啊... = =44F 06/11 16:18
DeepEarth: goto太好用,以致怕不會用的人亂用,乾脆叫你不要用45F 06/12 01:05
drinker: goto不邪惡,邪惡的是coder的觀念....46F 06/12 02:26
drinker: 好goto的兩大前提:1.同函式內要保持同向性
drinker: 2.不要交錯goto的path
看板 Soft_Job
作者 cha122977 (CHA)
標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 22:42:39 2015


jknm0510a: 我學的時候就叫我不要用了,有人可實際範例示範好處嗎49F 06/10 21:19

例子像這樣 https://gist.github.com/anonymous/5ea6b0d75808e00cf35f

雖然用if/else也可以,但真用下去會巢狀if好幾層

這例子還只有3個成員,如果struct內有10+個成員

你不會想寫10+層if/else吧


甚至某些成員還要用自己的init function

而這些init function又都有可能fail

我想沒人會想看那一大坨code吧...

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.35.150
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433947363.A.E31.html
ccccboom: 這種pattern的code最近看好多喔1F 06/10 22:52
lovdkkkk: 用 switch case + loop 應該也可?2F 06/10 22:52
ccccboom: 拿來當作try...catch的用法滿方便的3F 06/10 22:54
cha122977: 這樣寫有一部份是可讀性考量~簡單明瞭4F 06/10 22:56
cha122977: switch case + loop就沒那麼直覺
carlcarl: error handling 好用6F 06/10 23:13
Kenneth1225: c function單一出口 該free或該close的resource都可7F 06/11 00:06
Kenneth1225: 以在出口處處理 避免leak....
annie: 是的 思考切勿僵化9F 06/11 00:40
shvanta: 這例子簡單明瞭10F 06/11 00:50
buckyeh: 寫C很可憐,又要避免resource leak,又要榨出最後一點效率11F 06/11 08:52
buckyeh: ,不用goto反而傷害可讀性
clarkman: 應該說學習的時候還是別用goto..等熟練後再用比較好13F 06/11 09:10
xatier: C/C++ 本來就不是給新手的語言14F 06/11 09:39
dreamnook: 這是頭一次覺得適合用goto XD15F 06/11 13:07
leolarrel: 我就是從linux kernel code 學會這個好用的寫法的16F 06/11 13:15
dreamnook: 我會覺得應該要說 當你對寫程式該注意的事情很熟後17F 06/11 13:43
dreamnook: 用goto是沒有關係的 可以讓程式簡潔便於維護
HolyBugTw: 請問用function或是function pointer取代不會比較好嗎?19F 06/11 13:45
dreamnook: function會增加stack memory吧 function pointer我不懂20F 06/11 13:52
cha122977: 事實上kernel driver的init/exit就是function pointer21F 06/11 14:21
cha122977: 就算用function還是要處理malloc失敗的case呀~
Eleganse: 看到goto就頭暈 因為程式老師說1張考卷只要寫1個goto23F 06/11 15:15
Eleganse: 就是整張零分
Eleganse: 程式老師也變成我的碩士指導教授 有一次幫他改寫程式
Eleganse: 發現他有寫 goto
dreamnook: A man chooses, a slave obeys                    (歪27F 06/11 16:25
cha122977: 所以只在像kernel driver這種特別合用的地方才被用呀28F 06/11 16:54
qsort: 不用goto的寫法,比較看看 https://ideone.com/rj1Nph29F 06/12 13:37
cha122977: 如果裡面不只是做malloc的話while不太合用噢30F 06/12 21:10
看板 Soft_Job
作者 ICBM ()
標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Fri Jun 12 16:20:50 2015


這種code最容易出現在理工科的實驗室裡面。

因為一般理工科的學生並沒有接受過coding的訓練,

通常也不會自己深度接觸coding方面的知識,

只是會寫一些C/C++就開始寫了,

然後全部塞在一個main function裡面,

code完全不能reuse。

我看過最誇張的是一個3維有限差分法模擬程式6k行幾乎全部在main()。

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.219.142.149
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1434097253.A.77E.html
jacobzhung: 說實在data跑的出來 漂不漂亮能不能reuse誰在乎1F 06/12 16:25
Adonisy: 只要能解決當下問題,能不能 reuse不重要...2F 06/12 16:28
alphadog: 拋棄式程式 用完就丟 不用reuse3F 06/12 16:42
testPtt: 如果不goto用main()完成也蠻強的4F 06/12 16:46
c0758: 我常寫這種CODE 後天要結果 明天做表  通通"暫時性寫法"先5F 06/12 16:46
c0758: 然後就常常暫時性下去了 只有以孩還要用到的才認真寫
ggBird: 老實說這種code除錯很難,對趕著出數據跟本沒幫助7F 06/12 19:44
viper9709: 推~有經驗的XD8F 06/12 23:44
wcmein: 做差分,爲了效能必須犧牲可讀性9F 06/13 07:53
orange7986: 主要後續維護 跟修改很累10F 06/13 10:11
y3k: 我覺得光"寫出這種code"沒辦法判斷好不好 你又不知道當時會這11F 06/13 10:13
y3k: 樣寫是因為時間短還是設備差還是人爛
ICBM: 說"人爛"比較嚴重一點,我主要觀點是說這通常是理工科實驗室13F 06/13 18:16
ICBM: 在為了快速產出計算結果之下的產物。仔細去讀軟體工程的書
ICBM: 是要花很多時間的。多半不專唸資工的不會想做這麼多。
ICBM: 除非自己打算以後專做模擬計算,那就會對軟工涉獵比較多了。
y3k: 硈t產出結果就不是人的問題了 是時間XD17F 06/13 23:31
y3k: 要快速


--
※ 作者: terievv 時間: 2015-06-14 02:29:18
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 1316 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇