程式突然最小化 硬核程式維護方法

2021-10-12 07:43:53 字數 2763 閱讀 9407

來自我的同事a:

先找到看上去沒什麼用的**,直接把它給注釋掉,不需要和任何人說,如果過了三個月也沒有人來問你內個什麼東西怎麼不見了或者沒有更新了,那麼,你就可以把那段**給刪掉了。。。

來自我的同事b:

請欣賞魔鬼暴風資料集無限覆蓋:

無論我的資料集已經經歷了多少次拼表排序篩選衍生,我的資料集仍然還是叫t49,像俄羅斯套娃一樣,新t49覆蓋t49,新新t49覆蓋新t49,臨時資料庫中的底表從頭到尾只有乙個,就是t49

嘛,臨時資料庫的儲存空間的確是節省了,但要是中間出了什麼紕漏。。。一子錯,滿盤皆落索,就只能像一二三木頭人一樣,回到起點從頭再來了,畢竟完全沒給自己留個退路啥的

好吧,正題來了

以sas程式為例,想分享一些在程式設計的過程中一些良好的習慣和反面的教材醬紫~

不僅初學者剛開始程式設計的時候崇尚「大力出奇蹟」的風格,即使是老手可能也會有些不太好的習慣導致一路挖坑一路掉坑一路填坑。。。

最小化原則

「用什麼拿什麼,用多少拿多少,放過你的電腦,也放過你自己」——魯迅(不是他

同樣是抽數,我們在寫**的時候,應根據實際需要盡量少取一些,常用的比方說一些時間的限制,一些型別的選擇,可減少取出來的資料集的長度,另外也列出你接下來要用到的字段,只取出這些字段,可減少資料集的寬度,不要貪心,不要偷懶

以上圖為例,簡單粗暴版將使用去倒杯水再上個廁所的時間取出乙個700*50萬的資料集,並在後續各個步驟中的運算都揹負著這些冗餘資料,在跑程式的過程中,你可以去吃個飯玩玩手機和同事閒聊一下直到徹底忘記你在跑程式這件事情

而你是不是有毒版中是關於sas data step的運算邏輯的坑,雖然跑出來的結果和正確開啟版一模一樣,但是整體耗時會長很多,在正確開啟版中,sas所做的事情是先從底表contract_dim中篩選符合的記錄,再將這些記錄複製去contract表,而在你是不是有毒版中,sas所做的事情是先將contract_dim所有記錄複製去contract表,再從contract表中篩選符合的記錄輸出

這兩種運算的差別大概就是,你將手從窗戶伸進鄰居家並拔下一根鄰居家的貓的鬍鬚,跟,你將鄰居家的貓從鄰居家偷出來,抱在懷裡並拔下它的一根鬍鬚(攤手

2. 適當新增注釋,認真取名字

「沒有注釋的**,就像滅霸在你記憶的長河中泡腳的時候,突然打了個響指」——鋼鐵俠(不是他

沒注釋

有注釋

其實給**加注釋也不只是為了方便別人看,主要是為了自己用得更方便快捷,我不信隔了3個月再回來,你還記得你的**都幹了些什麼,我也不信你有耐心一行一行地再去啃你亂七八糟的**並判斷這段是不是你要的那個

加注釋,可以快速地通過注釋的提示,初步判斷**的內容

就像看日文的說明書的時候,你也會先揀著中文本來判斷這段話的大致意思

給變數認真取名字這個也是差不多的道理,a1,a2,a3過三個月就相當於一坨馬賽克,只有找東華帝君要個妙華鏡看看它的前世今生歷史由來才能救你,變數名應當盡量言簡意賅地概括這個變數的內容,不要怕太長了,反正你用的時候也是複製貼上,又不會手打

由於變數名長度限制,用縮寫結合發散思維來猜也是乙個好的方法,例如把non-revolving loan remain overdue account count給縮寫成nr_l_rmodact_cnt,至少有個展開腦洞的線索不是?

3. 定期回顧,更新,修改

去年的衣服配不上今年的我,3個月前的**是過了best before的飲料,有點不舒心但也還可以喝,6個月前的**是過期的食物,再加工一下勉強還能吃,一年前的**是腐爛的水果,既不賞心悅目,還惡臭沖天,全身心嫌棄抗拒

除非這個**以後不需要用了,不然還是乖乖地定期回顧更新吧~修補和修剪是為了避免日後哪天突然平地摔大坑

4. 尋求更優的高階方法

即使是同樣地把年月日變成年月,10個人可能會寫出10種寫法_(:з」∠)_

例如-日期時間型的日期,如17mar2020或20200317,想得到202003,長什麼樣不重要,最重要的就是它知道自己是個日期,就比較方便,可以通過格式轉換實現

yyyymm=put(yyyymmdd,yymmn6.);

或者迷惑一點:

yyyymm=cat(year(yyyymmdd),month(yyyymmdd));

-如果它是個數值型的20200317,即它不知道自己是日期,以為自己是兩千零二十萬三百一十七,那麼可以通過計算實現

yyyymm=int(yyyymmdd/100); 或者 yyyymm=round(yyyymmdd/100,1);

-如果它是個字元型的「20200317」,不能被計算,也可以通過字串的擷取或者拼接實現

yyyymm=substr(yyyymmdd,1,6);

什麼?你非要數值不要字元?醬紫咯:yyyymm=input(substr(yyyymmdd,1,6),6.);

這裡畫個重點,這個方法不行:

format yyyymm yymmn6.;

yyyymm=yyyymmdd;

資料集輸出的展示看不出問題,你出統計的時候就知道我為什麼說不行了。。。

不同情況下有不同的方法,同樣的情況下有更優的方法,作為程式設計師需要不斷地探索和學習新方法哦~

之前看到過一篇文章叫「如何寫出讓同事無法維護的**」,知乎好像也有,角度新穎,內容更豐富,有興趣的同學也可以前往圍觀~(不是廣告,原po沒給我塞錢,非要塞的話也可以聯絡我

程式最小化後台執行

1.設定winform窗體屬性showintask false 2.加notifyicon控制項notifyicon1,為控制項notifyicon1的屬性icon新增乙個icon圖示。3.新增窗體最小化事件 首先需要新增事件引用 如下 this.sizechanged new system.eve...

最小化程式到托盤

引用 所謂的 托盤 在windows系統介面中,指的就是下面任務條右側,有系統時間等等的標誌的那一部分。在程式最小化或掛起時,但有不希望佔據工作列的時候,就可以把程式放到托盤區。一 托盤程式設計相關函式 把程式放到托盤上的本質就是先在托盤區繪製乙個圖示,然後把程式隱藏不見,再對托盤的圖示進行訊息處理...

VC最小化程式到托盤

一 notifyicondata結構 notifyicondata結構包含了系統用來處理托盤圖示的資訊,它包括選擇的圖示 訊息 提示訊息 圖示對應的視窗等內容。其定義為 typedef struct notifyicondata notifyicondata,pnotifyicondata 該結構中...