[請益] 不少人不喜歡在class裡加static function

看板Soft_Job作者 (停不下來)時間9年前 (2016/06/16 08:32), 9年前編輯推噓26(26051)
留言77則, 40人參與, 最新討論串1/1
最近一直被主管酸不停的recode ,最近被酸說class裡加static function,問他又不肯講,請問大家這樣寫的好處跟壞處… 本人覺得好處是這樣寫可以防止class改爛了,function還有用處 壞處當然省不了記憶體,但class改爛了會省記憶體? 主管真難溝通,不喜歡事前規劃,喜歡事後改code… ############################### 我的想法是這份code不知道要經手多少人 寫成static function 至少後面的人不會亂call member, 造成相依一堆member, code一亂就....(除非他改成非static) 看太多維護到最後重寫的命運,沒留下多少可用的code ----- Sent from JPTT on my InFocus M530. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.66.115.238 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1466037129.A.B15.html

06/16 08:43, , 1F
哪個語言?
06/16 08:43, 1F

06/16 08:45, , 2F
先不說 static 的問題,但要防止改爛了應該有更好
06/16 08:45, 2F

06/16 08:45, , 3F
的方法…例如unit test…
06/16 08:45, 3F

06/16 08:52, , 4F
不想create instance才能用method就開static啊
06/16 08:52, 4F

06/16 08:56, , 5F
為什麼你會覺得設成靜態,就不會有改爛的問題
06/16 08:56, 5F

06/16 08:57, , 6F
你就把當一般c的api來看待就好了!class改爛也沒多大關係!
06/16 08:57, 6F

06/16 09:31, , 7F
怕改爛應該是靠測試啊,static function 分類要做好,不
06/16 09:31, 7F

06/16 09:31, , 8F
然就會像我第一個工作看到的,Tool.java一萬多行...
06/16 09:31, 8F

06/16 10:23, , 9F
比如說常用的,多處共用1個屬性的,開static沒關係吧
06/16 10:23, 9F

06/16 10:27, , 10F
能開個電腦多打點字,把你的問題說清楚嗎!?
06/16 10:27, 10F

06/16 10:30, , 11F
個人也不是很喜歡static 這應該是design的問題
06/16 10:30, 11F

06/16 10:39, , 12F
static不是問題所在吧
06/16 10:39, 12F
※ 編輯: DDxMM (210.66.115.238), 06/16/2016 11:04:46

06/16 11:31, , 13F
看起來是你們code review/coding style/架構設計有問題
06/16 11:31, 13F

06/16 11:32, , 14F
把重點放在coding品質的管理上吧
06/16 11:32, 14F

06/16 11:36, , 15F
不少人不喜歡? 你要不要直接改很多人不喜歡 難閱讀
06/16 11:36, 15F

06/16 11:47, , 16F
新手才會這樣寫
06/16 11:47, 16F

06/16 12:28, , 17F
原來static method 是給新手用的 (筆記
06/16 12:28, 17F

06/16 12:31, , 18F
新手應該連什麼叫static 都不知道吧
06/16 12:31, 18F

06/16 12:33, , 19F
你真的知道Static function是用來幹嘛的嗎...
06/16 12:33, 19F

06/16 12:35, , 20F
同樓上...
06/16 12:35, 20F

06/16 12:36, , 21F
你什麼時候開始有非 static function 比較省記憶體的錯覺
06/16 12:36, 21F

06/16 12:51, , 22F
雖然你想偷酸主管 但看來你連class存在意義都搞錯
06/16 12:51, 22F

06/16 12:51, , 23F
如果情境不一樣,最省事就是開delegate自己外部實作
06/16 12:51, 23F

06/16 12:52, , 24F
再丟進來
06/16 12:52, 24F

06/16 12:56, , 25F
所有的method一寫好都是跟class放在一起
06/16 12:56, 25F

06/16 12:58, , 27F
stackoverflow搜"where are methods stored in memory"
06/16 12:58, 27F

06/16 13:16, , 28F
看情境 不過大部分都是non-static居多, static比較少
06/16 13:16, 28F

06/16 14:13, , 29F
我喜歡data isolation 能static 就 static
06/16 14:13, 29F

06/16 14:14, , 30F
Function 都在text segment 有self modified code?
06/16 14:14, 30F

06/16 14:17, , 31F
先搞懂static的正確用法再來討論
06/16 14:17, 31F

06/16 16:17, , 32F
好多 static 神人
06/16 16:17, 32F

06/16 16:52, , 33F
static不用new好用多了
06/16 16:52, 33F

06/16 19:12, , 34F
公用而且不需要存變數才比較多會使用static, 大部分還
06/16 19:12, 34F

06/16 19:12, , 35F
是nonstatic
06/16 19:12, 35F

06/16 19:46, , 36F
這串推文到底是反串還認真啊…
06/16 19:46, 36F

06/16 21:33, , 37F
主要看是否跟instance的狀態相關
06/16 21:33, 37F

06/16 21:35, , 38F
static or instance method 應該考慮的是設計上的權責而
06/16 21:35, 38F

06/16 21:35, , 39F
不是performance
06/16 21:35, 39F

06/16 23:28, , 40F
老實說我覺得你主管還有時間酸你人還蠻好的...
06/16 23:28, 40F

06/16 23:30, , 41F
我覺得這沒標準的答案,看CLASS的用途
06/16 23:30, 41F

06/17 01:57, , 42F
我覺得把你文章裡的所有 static 通通換成 const 比較說得
06/17 01:57, 42F

06/17 01:57, , 43F
通 XD
06/17 01:57, 43F

06/17 02:24, , 44F
我是覺得跟你的code要放在什麼上面跑也有差...
06/17 02:24, 44F

06/17 02:24, , 45F
沒狀態差異的可以用
06/17 02:24, 45F

06/17 08:02, , 46F
良葛哥網站去看一下再來討論吧
06/17 08:02, 46F

06/17 11:46, , 47F
common tool之類的function都我用static的
06/17 11:46, 47F

06/17 19:34, , 48F
這文給我的感覺就是 為什麼要用螺絲起子不用釘書機
06/17 19:34, 48F

06/17 19:34, , 49F
因為螺絲起子不會有用完訂書針的問題
06/17 19:34, 49F

06/18 08:38, , 50F
static最多人垢病的地方是會有test issue, 像是mocking,
06/18 08:38, 50F

06/18 08:38, , 51F
你要怎麼mock? 基本上比較常使用的時候大概是singleton
06/18 08:38, 51F

06/18 08:38, , 52F
或很小的until function
06/18 08:38, 52F

06/18 08:41, , 53F
是util打錯 不好意思,建議多看看一些design的書 看看怎
06/18 08:41, 53F

06/18 08:41, , 54F
麼寫code比較好 然後可以用stackoverflow 去問問題,像st
06/18 08:41, 54F

06/18 08:41, , 55F
atic的好壞那邊都有人分析過了
06/18 08:41, 55F

06/18 08:43, , 56F
當然 我懷疑那些酸你的資深人員到底知不知道這些 或單純
06/18 08:43, 56F

06/18 08:43, , 57F
他們就是被人酸過 所以就酸你一下 但是從來沒想去搞懂原
06/18 08:43, 57F

06/18 08:43, , 58F
06/18 08:43, 58F

06/18 08:43, , 59F
加油!
06/18 08:43, 59F

06/18 13:14, , 60F
這篇推文好亂啊是反串很多嗎我都搞不懂啦
06/18 13:14, 60F

06/18 16:28, , 61F
static與否要看你的code怎麼運用這個class 如此而已
06/18 16:28, 61F

06/18 22:20, , 62F
都討論到這了,順便問一下單純要單一性時如何挑選stat
06/18 22:20, 62F

06/18 22:20, , 63F
ic或singleton
06/18 22:20, 63F

06/19 03:17, , 64F
很多主管都不是程式寫得好才當主管的 屁話一堆 你聽聽就好
06/19 03:17, 64F

06/19 12:21, , 65F
基本上單一性都會選singleton, 是design pattern習慣的
06/19 12:21, 65F

06/19 12:21, , 66F
使用,像可以寫一個singleton class with static initial
06/19 12:21, 66F

06/19 12:21, , 67F
ize() 去wrap你想要單一性的class, 這樣會非常清楚,像UU
06/19 12:21, 67F

06/19 12:21, , 68F
ID generator class基本上就蠻典型的是我說的這種應用,
06/19 12:21, 68F

06/19 12:21, , 69F
可以被singleton wrap
06/19 12:21, 69F

06/19 17:21, , 70F
用singleton方法來做才能較有效率減少記憶體使用
06/19 17:21, 70F

06/19 17:21, , 71F
所以好的framework一般都會有一個入口static 成員或方法
06/19 17:21, 71F

06/19 17:22, , 72F
去實現下面的函式庫
06/19 17:22, 72F

06/19 17:23, , 73F
再由這個singleton設計方法去包裝工廠成員
06/19 17:23, 73F

06/19 17:23, , 74F
基本上定義出規範和使用介面,你就"比較難"去自行new
06/19 17:23, 74F

06/19 17:23, , 75F
一個未經包裝的物件
06/19 17:23, 75F

06/19 17:24, , 76F
但是永遠不要低估菜鳥及疲勞過度員工所會犯的錯 XD
06/19 17:24, 76F

06/19 22:14, , 77F
這是在講 java 嗎?
06/19 22:14, 77F
文章代碼(AID): #1NOVE9iL (Soft_Job)