PTT評價

Re: [問卦] 代問:如何寫出讓人看不懂的Python程式碼?

看板Gossiping標題Re: [問卦] 代問:如何寫出讓人看不懂的Python程式碼?作者
tnfsh5566
(廢文局局花)
時間推噓 7 推:7 噓:0 →:0

你/你朋友需要的是「Ninja Code」

這裡有參考

https://javascript.info/ninja-code

雖然是JavaScript

但有句話說得好

語言只是工具,重點是怎麼解決問題(或是製造問題)

有簡中可以選,英文不好可以加減看

裏面引用了道德經

融合道家思想

讓你寫的程式碼沒人可以追隨

「Many try to follow ninja path, few succeed.」

不過我看下來可以整理出幾個重點

——————

1. 越簡短越好

盡可能使用大量的one-line comprehension

return "win" if dealer.score < player.score else "lose"

其中判別式的部分也可以自由地加入各種不同邏輯

同時將變數名稱拉長,可以讓該句可讀性變差,讚的

——————

2. 使用縮寫

dealer -> dr
player -> pr
score -> s

不過這方法用在one-line comprehension未必可以造成最佳效果

因為會讓語句變短

更好理解

return "win" if dr.s < pr.s else "lose"

這狀況應該是用在重複出現時盡可能使用

trace code時會因為要轉換這些變數名稱而迷失方向

——————

3. 抽象化

這裏不是指把類別抽象化

是把變數名稱抽象畫

[print(team, score) for team, score in score_board.items()]

何不把他變成

[print(obj, val) for obj, val in map_.items()]

——————

4. 注意力測試!

data 和 date 是不是很像呢

用吧!

——————

5. 同義詞

display_message 跟 show_message

是不是字面上一樣意思呢?

給他們不同功能吧!

——————

6. 重複使用變數名稱

並不是指 global / local variable 混用

但如果跑得過也沒關係

是指

def f(elem):
# 20 lines working with elem

elem = do_something(elem)

# 20 more lines working with elem

一樣容易迷失

——————

7. 為了好玩加底線

後綴底線主要為了避免跟保留字衝突

list_, dict_, ...

前綴則是社群共識

用來做為private

但你可以

_player

__dealer

讓人誤會有什麼特殊作用,其實沒有

——————

8. 展現你的愛

加一些詞彙讓你的物件看起來更厲害

mega_func

super_instance

magic_number

——————

裡面還有一些我沒提到你可以再研究看看

之前被臉書炒的 The Techlead

也有教你怎麼增加自己在公司的重要性

就是寫難以trace 的code

一時找不到可以請版友協助貼連結

下台一鞠躬,祝順心
-----
Sent from JPTT on my iPhone

--
廢文局 Bureau of Nonsense
服務項目:金曲點播戰南北戰學校戰男女不知所云耳包耍基歌曲導唱帶風向反串名著導讀做白日夢生日討拍誇大不實卡通懷舊消夜文犀利嘴砲吊書櫥故意錯字討論串續命買曝光度 局長:chshh1515 副局長:a234john168 人資主任:dweabybnye 高級幹員:tnfsh5566 特聘僱問:balahaha 打掃阿姨:heygoyours 希望之星總召:lovechen239
            *~~~誠摯為您服務~~~*

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.13.132.203 (臺灣)
PTT 網址

pxycho 08/12 17:53變數都用il11llil1l111iii這種的

whenisawu 08/12 17:55優喔,不過原來我code已經夠ninja了

Neisseria 08/12 17:57離職前寫的 code 差不多就這樣了

qweeqwee 08/12 19:44乾XDDDD 這真的很妨礙閱讀

orze04 08/12 23:15讚 報復社會

Kaids 08/12 23:47你是不是常常這麼幹