顯示廣告
隱藏 ✕
※ 本文為 MindOcean 轉寄自 ptt.cc 更新時間: 2022-06-16 22:12:28
看板 Gossiping
作者 cosmite (焼き団子)
標題 [問卦] 程式能寫if 就不要用for loop?
時間 Thu Jun 16 16:12:30 2022



以前寫程式覺得要看起來厲害

明明能用if的

我會先建一個table 然後再用for loop尋找

好處是數量增加時增加的程式碼少

壞處是寫的時候和以後回來看的時候比較麻煩
(有時候還會寫到雙層或三層for loop)


在網路上看一些code 其實也就if寫一寫而已

方便快速 維護容易 不需要想這在幹嘛


即時是自己寫的code 記憶力再好還是會有忘記的一天

程式能寫if 就不要用for loop?



-----
Sent from JPTT on my iPhone

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.79.139.36 (臺灣)
※ 文章代碼(AID): #1YgkNoKE (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1655367154.A.50E.html
aynmeow5566: 啥1F 42.76.51.82 台灣 06/16 16:13
kent: else2F 111.249.127.103 台灣 06/16 16:13
link4517: 我都直接hello world 做結尾3F 42.73.93.30 台灣 06/16 16:14
printf
※ 編輯: cosmite (42.79.139.36 臺灣), 06/16/2022 16:14:23
wonder007: 工沙小你寫for裡面不用放if ????4F 203.66.246.4 台灣 06/16 16:14
我的意思是能寫if else的時候就別用for loop. 用for loop的話裡面看你想怎麼寫吧 if switch while
Doub1eK: 我都用ikea5F 1.200.162.120 台灣 06/16 16:14
pm2001: 甚麼叫先建一個table6F 140.137.198.18 台灣 06/16 16:14
建一個structure 用for loop掃描structure的index
skyofme: 迴圈跟條件判斷的作用不是不一樣嗎? 你7F 27.52.77.155 台灣 06/16 16:15
skyofme: 在講啥
konanno1: 程式能推給別人寫就不要自己寫9F 175.182.9.30 台灣 06/16 16:15
LoveMoon: 唉10F 116.241.102.58 台灣 06/16 16:15
lay10521: 用goto展現技術11F 42.73.9.37 台灣 06/16 16:15
本公司禁止用goto. makefile除外
LoveMoon: 推konanno112F 116.241.102.58 台灣 06/16 16:15
olozil: 程式用嘴巴寫最棒惹,那些細節不重要13F 42.72.75.219 台灣 06/16 16:15
Fancose: table裡面有一個資訊,當做標籤14F 118.161.105.136 台灣 06/16 16:15
沒錯
※ 編輯: cosmite (42.79.139.36 臺灣), 06/16/2022 16:16:03
konanno1: 程式自己寫和別人寫是不一樣的15F 175.182.9.30 台灣 06/16 16:16
legendd: 樓下jserv16F 123.241.95.19 台灣 06/16 16:16
vowpool: 看你有沒有擴充的需求阿17F 125.227.40.62 台灣 06/16 16:16
※ 編輯: cosmite (42.79.139.36 臺灣), 06/16/2022 16:16:51
cdmlin: 不知所云 先用組合語言寫if跟for-loop吧18F 1.34.229.213 台灣 06/16 16:17
SABA0: 建table又要尋找 那不是建個hashtable就好19F 150.117.152.4 台灣 06/16 16:17
tom77588: 蛤?桌子怎麼了嗎?20F 223.140.195.157 台灣 06/16 16:17
zero00072: 你是指 foreach 然後再 find 吧?21F 42.72.246.221 台灣 06/16 16:17
zero00072: loop 和 if 並不衝突。
Nonegrame: 哪間公司的 我要避開23F 118.163.84.203 台灣 06/16 16:17
skyofme: 啊你掃index取出來就不用比內容了嗎?24F 27.52.77.155 台灣 06/16 16:17
※ 編輯: cosmite (42.79.139.36 臺灣), 06/16/2022 16:17:45
leolarrel: 同意樓上25F 118.163.98.66 台灣 06/16 16:17
sephen: 是不會用GOTO和指標嗎!26F 61.220.121.213 台灣 06/16 16:18
goto禁用. 指標曾用到三個***
※ 編輯: cosmite (42.79.139.36 臺灣), 06/16/2022 16:18:36
sephen: 禁止用GOTO是壓抑員工威能 你還聽?27F 61.220.121.213 台灣 06/16 16:19
maplefff: if和for loop到底是有關係啊28F 1.170.224.62 台灣 06/16 16:19
maplefff: 這兩個根本沒辦法替換吧
可以喔 像是以下這段 一樣的功能

IF寫法:

if (a == 10) return;
if (a == 20) return;

---------------------------------------
FOR LOOP寫法:

u8 index;
u8 array[] = {
10,
20
};

for (index = 0; index < sizeof (array) / sizeof (array[0]); index++) {
  if (a == array[index]) {
    return;
  }
}


wonder007: 我懂了你是說把資料直接判斷跟放容器再30F 203.66.246.4 台灣 06/16 16:20
zero00072: break if you == 'win'31F 42.72.246.221 台灣 06/16 16:20
EvilJustice: 看時空背景好嗎32F 36.225.208.160 台灣 06/16 16:20
Fancose: 說真的一定要註解就是了33F 118.161.105.136 台灣 06/16 16:20
zero00072: break if winners.include?(you)34F 42.72.246.221 台灣 06/16 16:20
skyofme: 推文裡看起來跟他同一個頻道的能不能幫35F 27.52.77.155 台灣 06/16 16:20
wonder007: loop判斷是嘛 = =36F 203.66.246.4 台灣 06/16 16:20
是的
skyofme: 忙解釋一下是什麼情境,我不太理解37F 27.52.77.155 台灣 06/16 16:20
herculus6502: 你這寫法很有彈性可以寫成FSM38F 223.137.216.24 台灣 06/16 16:20
maplefff: 一個是邏輯判斷,一個重複操作欸39F 1.170.224.62 台灣 06/16 16:21
zaqimon: if跟loop都一樣是compare jump40F 101.3.119.30 台灣 06/16 16:21
haw561676: 這樣code 難看死了,嘔嘔嘔嘔41F 42.76.124.122 台灣 06/16 16:21
FFMay: 我都dear開頭42F 223.136.25.112 台灣 06/16 16:22
haw561676: 怎麼想都if 判斷就可以處理就好,巢狀43F 42.76.124.122 台灣 06/16 16:22
skyofme: 所以這是老語言的問題?44F 27.52.77.155 台灣 06/16 16:22
Fancose: 好不好看不重要,重要的是要讓人看得懂45F 118.161.105.136 台灣 06/16 16:22
haw561676: 太多層很難看46F 42.76.124.122 台灣 06/16 16:22
qk3380888: 啊你進去找還不是o(n) = =47F 49.216.89.191 台灣 06/16 16:22
skyofme: 你說compare jump我大概有點懂了,但沒48F 27.52.77.155 台灣 06/16 16:23
skyofme: 實際寫過這種老語言
jimmykuo123: 反正有問題就用GOTO解決就好50F 125.229.105.144 台灣 06/16 16:25
s0805744: 看不懂想表示什麼51F 111.82.227.8 台灣 06/16 16:25
Justin890820: 你在公三小52F 223.136.173.242 台灣 06/16 16:25
knives: 寫成波動拳好了53F 211.21.37.96 台灣 06/16 16:26
tyantmf: 要看狀況阿 不然陣列if到死54F 210.63.221.149 台灣 06/16 16:27
jack7614614: 文組表示 嗯嗯嗯 對啊!55F 223.141.53.119 台灣 06/16 16:28
blurman: 沒天分看不懂,還是辭職去跑外送吧56F 218.166.122.15 台灣 06/16 16:29
phenom1: 你可以示範一下嗎57F 114.137.177.16 台灣 06/16 16:29
我上面回文了 你看看
vios10009: 我都用switch case58F 49.216.161.28 台灣 06/16 16:29
skyofme: 你這意思跟你原文講的有點落差 = =59F 27.52.77.155 台灣 06/16 16:31
henry4343: Life is short use python60F 110.26.131.210 台灣 06/16 16:31
skyofme: 你這個就寫法彈性的問題不是嗎?61F 27.52.77.155 台灣 06/16 16:32
是的 但時常碰到不太需要擴充的情境 所以覺得多此一舉了 ?
tw11509: 看情況啊,如果不會變當然直接if or swi62F 27.247.193.87 台灣 06/16 16:33
tw11509: tch,會新增就放array比對啊,但還要考
tw11509: 慮其他啦
lisyu: 用case不好嗎?65F 106.64.120.215 台灣 06/16 16:33
wei115: 我會避免 雙層、三層for 因為真的看不懂66F 220.134.21.189 台灣 06/16 16:33
xfaw4d35t: 通通外包 出事卸責 沒事攬功 誰還自己67F 60.244.116.139 台灣 06/16 16:33
兩層 三層for真的耗腦力的
xfaw4d35t: 寫68F 60.244.116.139 台灣 06/16 16:33
z897899878: 存取array都不用時間和空間?69F 223.136.205.18 台灣 06/16 16:34
zero00072: 樓下一百階聖誕樹 printf(); 一百次。70F 42.72.246.221 台灣 06/16 16:34
hirobumi: switch case71F 114.44.18.144 台灣 06/16 16:34
switch case讓整個function落落長 沒有很愛用
wonder007: 如果你的array[]是要接收別人傳入的72F 203.66.246.4 台灣 06/16 16:36
wonder007: 那一定不能用1寫啊 但是2可以通用
pierreqq: 當你都講不出共鳴...程式一定寫不好74F 123.51.223.187 台灣 06/16 16:36
pierreqq: 自以為利害而以
wonder007: 到最後就是hard code與否的問題76F 203.66.246.4 台灣 06/16 16:37
anakin2: 我文組想學程式但聽不懂啦77F 114.136.243.15 台灣 06/16 16:37
kuoyu: 多層迴圈要善用空格。78F 61.56.143.39 台灣 06/16 16:39
都會用空格 但還是比較花時間看
fastener: 我朋友都外包,大家都說他是天才 給你參79F 101.12.34.114 台灣 06/16 16:40
fastener: 考
matico: 不得不說建table有時候是蠻好用的81F 210.202.218.253 台灣 06/16 16:41
有時候真的好用沒錯
walter0914: 但這有什麼卦好問?82F 223.137.161.126 台灣 06/16 16:42
就懶的耗腦力了 覺得程式能動就好了 ?
noahblack: 我都用PERFORM 供參83F 101.136.181.9 台灣 06/16 16:43
dennisN: 兩層指標都很少見了三層是什麼鬼 直接算84F 42.79.158.233 台灣 06/16 16:44
kingfsg7326: 我寫verilog根本不用For loop的85F 1.200.14.102 台灣 06/16 16:44
dennisN: 位址還比較快…86F 42.79.158.233 台灣 06/16 16:44
z897899878: verilog不用for也太痛苦87F 223.136.205.18 台灣 06/16 16:45
Qpera: goto無敵88F 61.218.132.193 台灣 06/16 16:46
d0808: 可讀性差,多寫的那些代碼看不出有維護或89F 39.144.152.230 中國 06/16 16:47
d0808: 擴充上的好處
你是指for loop嗎
aasssdddd: if ll ll ll ll \ ll ll 精美謝謝91F 1.34.231.24 台灣 06/16 16:48
※ 編輯: cosmite (60.250.30.118 臺灣), 06/16/2022 16:49:39
TobyH4cker: 高階語言用iterator,但台灣普遍低端92F 116.86.131.33 新加坡 06/16 16:49
TobyH4cker: 人多
xdghost: switch case嫌太長    然後用if???94F 223.136.228.240 台灣 06/16 16:52
skyofme: 會套到三層迴圈我感覺應該是什麼遠古程95F 27.52.77.155 台灣 06/16 16:53
skyofme: 式的調整了
skyofme: 硬是要把幾個互相不能配合的資料尬在一
skyofme: 起
LYSLYS: 我都用do{ if(conditions) break; }while99F 1.171.17.150 台灣 06/16 16:54
LYSLYS: (0)
fullfool: 看情境啦 case 只有兩個當然if 就解決了101F 123.204.141.244 台灣 06/16 17:01
matico: 只有兩個條件當然是寫if就好,20個條件建t102F 27.240.240.203 台灣 06/16 17:05
matico: able就樂勝了
saiya: 除非太慢  不然可讀性要擺第一104F 59.125.218.4 台灣 06/16 17:05
jahfone: 樓下jserv告訴你linux裡也有goto105F 220.137.0.76 台灣 06/16 17:07
basslife: 我都用pandas106F 106.64.105.132 台灣 06/16 17:08
duya: C++的話能不用for loop!?107F 123.193.95.71 台灣 06/16 17:08
diolin: 用printf就夠了。108F 42.77.38.67 台灣 06/16 17:15
cowardlyman: 如果用if能解決,你用for loop的效109F 36.225.102.220 台灣 06/16 17:16
cowardlyman: 能有比較好嗎? 還是你單純擴充性問
cowardlyman: 題? 好奇問問
CIDgreen: loop 裡面還不是 if112F 60.251.182.68 台灣 06/16 17:18
bmiss: 禁goto,那表示你公司不是寫底層的113F 27.246.128.150 台灣 06/16 17:23
maplefff: 你用vector包,然後用find找, 找完if確114F 1.170.224.62 台灣 06/16 17:23
maplefff: 認結果,就不用變成一大團,又能有擴充
hw1: 厲害的是有效率的code 能O(n)就別用O(n^2)116F 114.136.101.3 台灣 06/16 17:29
hw1: 能O(log n)就別用O(n)
ILYY: 反串嗎?118F 39.9.71.22 台灣 06/16 17:36
beeG: 你是對的,建議開始看 FP119F 202.39.60.190 台灣 06/16 17:38
bobju: 能寫成還是呼叫,就不要超過兩層。120F 112.97.54.31 中國 06/16 17:44
bobju:     函式
bobju: Teamwork盡量不要炫個人技巧
rofellosx: ???123F 203.69.59.9 台灣 06/16 17:50
marc47: http://i.imgur.com/SfxWqWM.jpg124F 114.47.12.43 台灣 06/16 17:50
[圖]
vvrr: 你的例子比較適合用case switch吧..125F 60.250.31.103 台灣 06/16 18:17
dboy1980: 雖然腦包,但有創意126F 203.10.99.182 日本 06/16 18:17
LaplaceDemon: 你的程式都不寫註解嗎127F 42.77.170.231 台灣 06/16 18:21
darkMood: 不要用 go to ,笑死。128F 112.104.113.61 台灣 06/16 18:22
s4300026: 我都用策略模式129F 42.72.212.22 台灣 06/16 18:29
Tassatul: 那個for loop 多建了一個陣列占用記憶體130F 220.136.41.145 台灣 06/16 18:37
stupidwayne: 直接if 直到超過8個再來包131F 223.136.83.23 台灣 06/16 18:40
polay: 寫case好看懂 又整齊,table一大坨132F 223.141.212.155 台灣 06/16 18:57
k82817: 我都用hash table133F 114.137.210.16 台灣 06/16 19:00
bluu: loop的時間複雜度比if多hen多134F 42.72.184.255 台灣 06/16 19:18
jackshadow: 我也覺得用iterator就好= =135F 1.200.162.81 台灣 06/16 19:20
luoqr: compiler優化比你寫那些沒人看懂的鬼code快136F 1.161.76.40 台灣 06/16 19:30
erichen: 如果是一些懶惰的語言有contain語法可以137F 101.12.58.246 台灣 06/16 19:34
erichen: 省forloop
PetrVanis: 效率問題 for loop去查一下怎麼運作的139F 223.139.1.12 台灣 06/16 19:48
PetrVanis: 你就知道了
k798976869: 幹嘛不用hash 沒救惹141F 123.240.168.131 台灣 06/16 20:10
computer3314: 不用迴圈就可以解決問題是最好142F 1.200.11.14 台灣 06/16 20:19
computer3314: 有些可以用hashmap跟collect來代替
computer3314: 迴圈,但是就要寫註解不然很難維護
drinkmuffin: 一開始寫範例不就好了 還在想說你是145F 42.76.132.90 台灣 06/16 20:22
drinkmuffin: 在公三人 我是都用你說Array的方式
drinkmuffin:  現在用linq 可以寫的很好懂
drinkmuffin: 而且用linq 也沒有你說兩層三層問題
drinkmuffin:  可以很方便看的ㄧ行一行的
stja:150F 114.43.99.244 台灣 06/16 20:32
lpoijk: 小學生問題 自己判斷好嗎151F 114.253.35.172 中國 06/16 20:34
darkholy: 是在胡說些什麼152F 223.139.152.175 台灣 06/16 20:37
B9702115: 人才...153F 39.8.201.10 台灣 06/16 20:38
jason4571: 有看過6層for loop嗎 真的很棒154F 42.73.13.182 台灣 06/16 21:16
jason4571: 那個寫code 邏輯真的爛
orze04: 6層迴圈...好想看156F 122.116.39.42 台灣 06/16 21:19

--
※ 看板: Gossiping 文章推薦值: 0 目前人氣: 0 累積人氣: 114 
作者 cosmite 的最新發文:
點此顯示更多發文記錄
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇