網路城邦
上一篇 回創作列表 下一篇  字體:
Invoke?聽都沒聽過!
2020/02/08 05:04:30瀏覽1747|回應1|推薦7

我的RD正在幫忙改版我之前寫的網路程式設計的書,除了既有內容,她想替原書增加兩個新的單元,就是自己寫新的程式專案範例。碰到有個程式技術的問題,她要在背景執行緒中接收遠端連線者的要求,在程式主表單中新增一個動態物件,如Label之類的東西。

但在程式規則上,這是「跨執行緒」的違規動作。她搜尋網路得到的專家意見是要使用物件導向中的Invokedelegate機制,中文應該是叫「委派」吧?就是將程式中寫好的Function當作副程式參數一樣傳遞,讓別的類別或執行緒使用。那種語法是可以達到目的,但她覺得有點抽象迂迴,問我有沒有作過類似的程式?是不是也用這種語法?還是有別的直白一點的解決方案!

她真的是本門第子!我們寫程式總是希望直接了當,使用最常見通用的指令語法去完成,碰到這種極少用,功能也有點迂迴的指令語法都不太習慣,即使是常寫程式的人,誰會習慣把抽象的Function當作具體的參數或物件來傳遞呢?或者說不太信任吧?我第一時間的回答是:我根本不懂Invokedelegate的意思!以前看書時是看到過,一時看不懂,也不覺得一定會用到,就跳過去了!

但是後來我真的碰到過很多次這種需要跨執行緒操作主程序物件的狀況,直接在背景執行緒無法作到,那就像廚師上餐廳一樣嘛!即使你很會做菜,你也不能自己到餐廳廚房去作餐點,人家不准嘛!怎麼辦?那就乖乖點好菜單交給廚房去作囉!背景執行緒可以改變一個公用變數,好像一個開關燈號,原來是False,當你想讓主程序幹嘛時就讓它變成True

主程序當然要有一個持續監看這些變數的機制,發現某燈號變了,就是被通知要幫背景執行緒做某些事情,譬如新增一個Label內容如何之類的!這不就像是一般餐廳廚房門口,由外場人員或客人拿過來貼上的菜單嗎?廚房根據這些菜單一一作菜出菜就不會亂了!我一直都是這樣解決這種問題的!因為機制很簡單明瞭,也不太會出錯,效率也很高,所以我想都沒想過去找別的語法!

我其實是在RD說有Invoke這種網路建議寫法之後才去認真看懂它的!事實上這個語法的背後機制也是找到原本的主執行緒來做到這些跨執行緒的需求,跟我寫的程式意義完全一樣!只是我的程式中完全不會看到這個一般程式師都很少看到或用到的語法指令!我不想嚇人,也不想炫耀我是程式高手,所以不會刻意用這種很少見的指令!

這好像一個我原本不知典故的成語,我之前都用白話文形容某件事,文章也很通順,但國文老師說應該在此時引用這個成語「才對」?我就會反問:「如果我用白話文有何不好?」如果不會因為這樣程式變得特別複雜囉嗦,也很好懂,我有必要使用大家都不熟悉的成語,只為了讓人家覺得我「有學問」嗎?

寫作文或許因此會讓人讚你文筆好,寫程式呢?只是讓讀者感到迷惑而已!RD還問我,這是在寫書欸?是不是用invoke看起來比較「正式 一點?我說如果這樣就失去我的風格了!我們這本書不是教人認識「程式語言」的書,而是教人如何寫出可以執行各種網路實際需求程式的書!

她立即了解了我的意思!能用鉛筆寫字的太空人,就不必使用太空專用的無重力版的特殊鋼筆了!放屁是不必脫褲子的!寫程式語法優美精簡是不重要的!盡量讓大家都看得懂,好理解、好操作、好修改才是最重要的!語文專家與好的作家是兩個不同的概念,辭能達意,文以載道比詞藻華麗姿勢優美更重要!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=131687744

 回應文章

陳正華 牧師
等級:8
留言加入好友
2020/02/08 07:09

寫作也是一樣。

簡潔明朗,讓人讀得明白,

乃是最起碼、也是最優質的「文筆好」。