目录
回复内容:
首页 后端开发 Python教程 过度追求代码短小优雅有什么害处?

过度追求代码短小优雅有什么害处?

Jun 06, 2016 pm 04:24 PM
angularjs bootstrap golang jquery python

本人目前是尚是一枚acmer,方向web开发, 同时python,php,golang,js等语言都有所涉猎.

由于接触python较早.深受python拿来主义的影响.平时写过很多小项目,但几乎每个项目都引用了很多开源项目,而且代码长度都极其的短.

如最近的一个某某管理系统.整个前台只有一个静态页面,数据全部使用json格式传输,用angularJs渲染界面.主体angularJS+Bootstrap+jQuery然后还有几个Bootstrap和jQuery小插件.服务端是php+mysql+Memcache,同时设计服务端时甚至想过升级nosql数据库和使用golang替换php.这样的阵容估计比某些大型企业的管理系统还大.自己都觉得有点小题大做.
然后完成整个前台增删查改,统计了一下自己的代码发现代码量还不到1000行(除去引用的库代码).估计全部完成撑死1500行.

别人一个页面模板代码就1000行..经常听到某某学长一个星期开发出某某网站,然后上万行代码.那个惭愧

然后自己写的一些数据抓取的脚本什么的.代码量也小得可怕,撑死200行.但是却引用了一大堆不知名的开源项目.而且像下面这样的代码到处都是

userList = [ i.split(":") for i in open("user.txt").read().split("\n") if len(i) >0]
登录后复制

回复内容:

其实嘛,在微软,如果有一个人用了牛逼的算法,或者什么奇技淫巧,反正很高大上的把一个东西搞了出来,但是别人看不懂,这个时候我们会被要求开讲座和写教程,来教会同事们,不然方案很可能就会被否决。

所以说只要这个代码的作者也可以时刻做到这样的话,害处大概不大吧。

凡事都讲个“度”,你自己都说“过度”了。
最大的坏处就是可读性差了吧。

ps:最后那个例子我倒觉得还好,不算很过分,还不至于影响别人理解。

问题中多处提到"过度", 提问者恐怕心中大概都有自己的答案了.

追求代码短小, 可以通过不同的方法, 只要是选择能提高可读性的方法, 其实未尝不可. 例如题目中的代码, 其实还没做到短小优雅, 这样做可以更短小易读(这行还不到80个字符), 通常是更推荐的做法.
<span class="n">userList</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">":"</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">open</span><span class="p">(</span><span class="s">"user.txt"</span><span class="p">)</span> <span class="k">if</span> <span class="n">line</span><span class="p">]</span>
登录后复制
浪费时间在别人制定的规则系统里“优化”自己的行为
while (i >= x || j >= x) { x = (i % x == 0 && j % x == 0) ? (y = x) + 1 : x + 1; } 曾经写着玩儿的一个求最大公约数的方法,现在连我自个儿都看不明白了,可见代码的易读性是多么的重要!
——成心文的微博|新浪微博
过度追求代码短小优雅有什么害处? 如果产品开发要求快速迭代,在满足时间和性能需求的情况下使用开源库,又能保证代码精简,我认为这本身无可厚非。

从我的经验来看,可能有以下几点需要注意的:

1、公司的法务部门是否允许使用这些开源库

开源协议那么多,也许某个库的协议会造成公司产品的法律纠纷,这种事情应该尽量避免

2、快乐的使用各种第三方库的时候,也请注意优化问题

除了性能优化之后,还有一些奇怪的问题需要优化。

前两天看豌豆荚的一个视频 “豌豆荚:成长的烦恼”,里面提到随着代码的膨胀,遇到了一个dex的函数上限65536的瓶颈,不得不反复合并函数。
其中提到对第三方库的选择时,要注意不要为了使用一个功能,却引入不必要的包袱。

Python我不熟,不确定会不会也有类似的坑,仅供参考吧。

3、最后一点,却是最重要的一点,越精简的代码,越要有充分的注释


一行糅杂了多个库函数的NB代码,当时写出来可能爽的一笔,心中暗骂自己真TMD的是天才。
过两天再看发现完全搞不懂当初为啥这么干了。

这种事儿我干过,不止一次。

比方说长长的正则表达式,注释里面写上匹配目标的范例,绝对没错。
在你需要更换平台时,很可能需要改写正则表达式的写法,参考范例放在那儿,写单元测试也好搞。
但是有一次我忘了……

所以,充分的注释是必要的,不仅为别人,更为自己。 对于Python
建议看看PEP 8 -- Style Guide for Python Code

我初学的时候也喜欢用各种「trick」来让代码看起来「碉堡了」
但是其实易读性太差了, 其他人看的时候都会一边看一边骂... 某牛人说过:“代码先是给人看的,再是给机器执行的”。
某古人说过:“物无美恶,物极必反”。

所以追求是好事,但过分追求,不免带到极端。
人生苦短,追求什么得想清楚。:) 大型项目开发时可维护性和可扩展性很重要..短小有时候可能会和可扩展性有矛盾。过度引用, 尤其不知名的开源项目可能会和可维护性有矛盾...优雅嘛...如何定义优雅...?

P.s.: Go + AngularJs是很正常的搭配...没有特别觉得这是一个overkill.... 短小的代码主要看一个问题:对后续程序员的理解是否增加了难度。

如果理解容易的话,这没有问题。

如果不容易理解的话,那尽量还是写多一点代码,方便容易理解为主。

实际的开发工程中,代码往往是会经过多个程序员的手,容易理解很重要,过度追求代码短小是不提倡的。

这个度的把握要靠经验的,根据不同项目不同团队而不同。

上面的代码有一个小问题: 你用了变量i, 如果用line可能更好理解。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

怎么下载deepseek 小米 怎么下载deepseek 小米 Feb 19, 2025 pm 05:27 PM

如何下载 DeepSeek 小米?在小米应用商店搜索“DeepSeek”,如未找到,则继续步骤 2。确定您的需求(搜索文件、数据分析),并找到包含 DeepSeek 功能的相应工具(如文件管理器、数据分析软件)。

deepseek怎么问他 deepseek怎么问他 Feb 19, 2025 pm 04:42 PM

有效使用DeepSeek的关键在于清晰提问:直接、具体地表达问题。提供具体细节和背景信息。对于复杂的询问,包含多个角度和反驳观点。关注特定方面,例如代码的性能瓶颈。对得到的答案保持批判性思维,结合专业知识进行判断。

deepseek该怎么搜索 deepseek该怎么搜索 Feb 19, 2025 pm 05:18 PM

直接使用DeepSeek自带的搜索功能即可,它强大的语义分析算法能准确理解搜索意图,提供相关信息。但对于冷门领域、最新信息或需要思考问题的搜索,需要调整关键词或使用更具体的描述、结合其他实时信息来源,并明白DeepSeek只是一个工具,需要主动、清晰、精细的搜索策略。

deepseek怎么编程 deepseek怎么编程 Feb 19, 2025 pm 05:36 PM

DeepSeek并非编程语言,而是深度搜索概念。实现DeepSeek需基于现有语言选择。针对不同应用场景,需要选择合适的语言和算法,并结合机器学习技术。代码质量、可维护性、测试至关重要。根据需求选择合适的编程语言、算法和工具,并编写高质量代码,才能成功实现DeepSeek。

deepseek怎么用来算账 deepseek怎么用来算账 Feb 19, 2025 pm 04:36 PM

问题:DeepSeek是否可用于会计?回答:不是,它是一个数据挖掘和分析工具,可用于分析财务数据,但本身不具备会计软件的账目记录和报表生成功能。使用DeepSeek分析财务数据需要:编写代码来处理数据具备对数据结构、算法和DeepSeek API的了解考虑潜在的问题(例如,编程知识、学习曲线、数据质量)

使用 Python 解决问题:作为初学者,解锁强大的解决方案 使用 Python 解决问题:作为初学者,解锁强大的解决方案 Oct 11, 2024 pm 08:58 PM

Python 使初学者能够解决问题。其用户友好的语法、广泛的库以及变量、条件语句和循环等功能可实现高效的代码开发。从管理数据到控制程序流程和执行重复任务,Python 提供了

DeepSeekapi怎么接入-DeepSeekapi接入调用教程 DeepSeekapi怎么接入-DeepSeekapi接入调用教程 Mar 12, 2025 pm 12:24 PM

DeepSeekAPI接入与调用详解:快速上手指南本文将详细指导您如何接入和调用DeepSeekAPI,助您轻松使用强大的AI模型。第一步:获取API密钥访问DeepSeek官方网站,点击右上角的“开放平台”。您将获得一定数量的免费Tokens(用于计量API使用量)。在左侧菜单中,点击“APIKeys”,然后点击“创建APIkey”。为您的APIkey命名(例如,“test”),并立即复制生成的密钥。请务必妥善保存此密钥,因为它只会显示一次

Pi币重大更新:Pi Bank要来了! Pi币重大更新:Pi Bank要来了! Mar 03, 2025 pm 06:18 PM

PiNetwork即将推出革命性移动银行平台PiBank!PiNetwork今日发布重大更新Elmahrosa(Face)PIMISRBank,简称PiBank,它将传统银行服务与PiNetwork加密货币功能完美融合,实现法币与加密货币的原子交换(支持美元、欧元、印尼盾等法币与PiCoin、USDT、USDC等加密货币的互换)。究竟PiBank有何魅力?让我们一探究竟!PiBank主要功能:一站式管理银行账户和加密货币资产。支持实时交易,并采用生物特

See all articles