Re: [问卦] 代问:如何写出让人看不懂的Python程式码?

楼主: tnfsh5566 (废文局局花)   2021-08-12 17:49:44
你/你朋友需要的是“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
一时找不到可以请版友协助贴连结
下台一鞠躬,祝顺心

Links booklink

Contact Us: admin [ a t ] ucptt.com