新足迹

 找回密码
 注册

精华好帖回顾

· 大头家常菜 -- 虎皮酱凤爪 (2008-5-11) datou2z · 来聊聊金庸的小说(197楼找到金庸小说朗读版) (2008-6-23) applenet
· 永远的Austen (2008-10-14) 雨睿 · 另一种休闲--休闲潜水(原创) (2011-9-8) 唐韵秦风
Advertisement
Advertisement
查看: 6654|回复: 64

[IT] 代码复杂度随意讨论 [复制链接]

发表于 2022-11-18 07:14 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我发觉水平低的很容易写的代码都是代码复杂度高的函数,水平如果高的,会致力于写代码复杂度很低的函数

我想代码复杂度很低的函数是要花许多心思去写的,不是随手就可以写出来的
Advertisement
Advertisement

发表于 2022-11-18 07:41 来自手机 |显示全部楼层
此文章由 Lanlanmao124 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Lanlanmao124 所有!转贴必须注明作者、出处和本声明,并保持内容完整
小白来请教这个函数复杂度是看大O吗?

发表于 2022-11-18 07:59 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-11-18 14:34 编辑
Lanlanmao124 发表于 2022-11-18 07:41
小白来请教这个函数复杂度是看大O吗?


https://juejin.cn/post/6844903495779237895

根据这文章,我感觉函数最好是顺序结构,一根线,最容易读啦

像下面的flow graph就太复杂了


https://crates.io/crates/complexity
头像被屏蔽

禁止发言

发表于 2022-11-18 09:06 来自手机 |显示全部楼层
此文章由 cpen5cpen5 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cpen5cpen5 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Complexity 要低当然不容易,不然那么多人研究algorithms.

发表于 2022-11-18 09:14 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
cpen5cpen5 发表于 2022-11-18 09:06
Complexity 要低当然不容易,不然那么多人研究algorithms.

你说的算法是更高一个层次的啦,和我说的日常写的代码不是在一个层面上的啦。
头像被屏蔽

禁止发言

发表于 2022-11-18 09:17 来自手机 |显示全部楼层
此文章由 cpen5cpen5 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cpen5cpen5 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-18 09:14
你说的算法是更高一个层次的啦,和我说的日常写的代码不是在一个层面上的啦。 ...

你是指solid原则?
Advertisement
Advertisement

发表于 2022-11-18 09:37 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整

我说的是函数层面啦,没有上升到OO啦
头像被屏蔽

禁止发言

发表于 2022-11-18 09:46 来自手机 |显示全部楼层
此文章由 cpen5cpen5 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cpen5cpen5 所有!转贴必须注明作者、出处和本声明,并保持内容完整
明白,分枝太多,switch 多,那可能本身设计的问题,抽象不够。

发表于 2022-11-18 09:47 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
同意,逻辑和代码越简单越好,连comment都不用写,读起来方便,更容易维护。

有时需要trade off,比如经常用到的函数可以优化,损失些readability,写成macro或inline (C/C++)

发表于 2022-11-18 09:51 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 09:47
同意,逻辑和代码越简单越好,连comment都不用写,读起来方便,更容易维护。

有时需要trade off,比如经常 ...

注释有时是需要的,不是描述做的过程,而是用来写为何要做的理由,因为这理由不能在代码里表达啦

发表于 2022-11-18 09:53 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 DDD888 于 2022-11-18 09:55 编辑
cpen5cpen5 发表于 2022-11-18 09:46
明白,分枝太多,switch 多,那可能本身设计的问题,抽象不够。


是的啦,现在想写面条代码也不太容易,大多数代码是循环里包含了多次嵌套条件语句,或者条件语句包含不同的循环,一个函数代码扩展到三屏以上,嘻嘻

我看到复杂的代码头就一下子疼起来了,估价心跳会加速
Advertisement
Advertisement

发表于 2022-11-18 09:58 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-18 08:51
注释有时是需要的,不是描述做的过程,而是用来写为何要做的理由,因为这理由不能在代码里表达啦:lovelin ...

我觉得comment越少越好 看看Linux kernel 就知道了 需要解释的logic放在documentation里

以前当dev的时候经常看到comment和code不搭边 code改了但没有更新comment

发表于 2022-11-18 10:01 来自手机 |显示全部楼层
此文章由 footballKing202 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 footballKing202 所有!转贴必须注明作者、出处和本声明,并保持内容完整
只要不用recursive函数都还有救

发表于 2022-11-18 10:06 来自手机 |显示全部楼层
此文章由 lengmo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lengmo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 lengmo 于 2022-11-18 10:07 编辑

高级程序员看重复杂系统的可维护性,可读性以及最小的出错可能, breakdown复杂逻辑用最简单的结构组合来实现复杂问题, 新手也能读无障碍
初级程序员为了证明自己牛逼喜欢写复杂的东西,无需嵌套递归的一律创造条件上嵌套递归,简单结构能解决的一律要上复杂结构乱七八糟各种继承重载反射读起来就像看狗子表演拉屎。

发表于 2022-11-18 10:06 |显示全部楼层
此文章由 hggit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hggit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
The art of coding is using a simplest logic implements most complex scenario.

发表于 2022-11-18 10:28 来自手机 |显示全部楼层
此文章由 cppbug 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cppbug 所有!转贴必须注明作者、出处和本声明,并保持内容完整
楼主这个复杂度很容易产生歧义,通常码农看到复杂度,首先想到的是时间或空间复杂度,是算法层面的。但这个帖子里要讨论的是代码的易读性以及可维护性。

推荐所有码农读一本书 - Clean Code,读完写代码的水平肯定能上一个台阶

评分

参与人数 1积分 +3 收起 理由
xiva + 3 感谢分享

查看全部评分

Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2022-11-18 10:34 来自手机 |显示全部楼层
此文章由 cpen5cpen5 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cpen5cpen5 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不做refactoring 很难解决这种复杂逻辑的问题

2019年度勋章

发表于 2022-11-18 10:42 |显示全部楼层
此文章由 superdigua 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 superdigua 所有!转贴必须注明作者、出处和本声明,并保持内容完整
时刻牢记,CONTAINER 形式的封装。

发表于 2022-11-18 10:56 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 09:58
我觉得comment越少越好 看看Linux kernel 就知道了 需要解释的logic放在documentation里

以前当dev的时 ...

不同意啦

看这段代码https://github.com/rust-analyzer/rowan/blob/master/src/arc.rs

从94行到125行,注释写的多好啊

发表于 2022-11-18 10:58 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
footballKing202 发表于 2022-11-18 10:01
只要不用recursive函数都还有救

写用recursive函数的地方其实一个项目里很有限啦,不是每段代码都可以随意用上啦
头像被屏蔽

禁止发言

发表于 2022-11-18 11:02 来自手机 |显示全部楼层
此文章由 cpen5cpen5 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cpen5cpen5 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原因出在很多公司code review不规范,这种代码不应通过。就没后来的大问题。
Advertisement
Advertisement

发表于 2022-11-18 12:39 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
cppbug 发表于 2022-11-18 10:28
楼主这个复杂度很容易产生歧义,通常码农看到复杂度,首先想到的是时间或空间复杂度,是算法层面的。但这个 ...

你提到算法,我是大量在代码里使用hash字典,使用太方便了,速度也是太快了,就是用点内存,反正1gb ram的单价也不贵,我拼命用,我用rust language写的程序也只用了1.6gb ram,而相应的golang开发的程序用了17gb ram

发表于 2022-11-18 12:44 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-18 09:56
不同意啦

看这段代码https://github.com/rust-analyzer/rowan/blob/master/src/arc.rs

呵呵 不需要同意 这个本来就是见仁见智 有争议的话题

我不是说完全不写comment 我是说尽量少写 因为code本身如果容易读懂就没必要

反正我写的程序很少comment 但是别人都说容易看懂

还有lines of code尽量少,我以前refactor 别人的code 完了少好多行代码 功能还增加了

发表于 2022-11-18 12:54 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
cppbug 发表于 2022-11-18 09:28
楼主这个复杂度很容易产生歧义,通常码农看到复杂度,首先想到的是时间或空间复杂度,是算法层面的。但这个 ...

Martin Fowler的Refactoring book也不错

https://amzn.asia/d/f3lpqVp

发表于 2022-11-18 12:57 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 11:44
呵呵 不需要同意 这个本来就是见仁见智 有争议的话题

我不是说完全不写comment 我是说尽量少写 因为cod ...

可是老板是不care这些的 代码写的漂亮只是为了自己心情舒畅

发表于 2022-11-18 12:59 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 12:44
呵呵 不需要同意 这个本来就是见仁见智 有争议的话题

我不是说完全不写comment 我是说尽量少写 因为cod ...

我发觉现在的编程语言例如rust language鼓励代码浓缩到一行啦,其实functional programming也是鼓励少写代码啦,希望我随着自己的经验增加,能一次就将短代码写出,而不是要来回几遍思考啦
Advertisement
Advertisement

发表于 2022-11-18 13:02 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 12:57
可是老板是不care这些的 代码写的漂亮只是为了自己心情舒畅

不是啦,一次代码写出,配合unit testing, 如果将来不符合商业逻辑,还是要再读一遍代码,不符合商业逻辑的次数增多,读该代码的次数也相应增多,所以减少自己理解的困难度啦,这就像发帖子,写只需要一次,但有许多人在读该帖子一样

发表于 2022-11-18 13:03 来自手机 |显示全部楼层
此文章由 Grange 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Grange 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DDD888 发表于 2022-11-18 11:59
我发觉现在的编程语言例如rust language鼓励代码浓缩到一行啦,其实functional programming也是鼓励少写 ...

我自己写的code要改好几次 直到满意为止 有时候还是不满意但是不知道怎么改了 感觉已经到了自己的limit了

发表于 2022-11-18 13:05 |显示全部楼层
此文章由 abergel 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 abergel 所有!转贴必须注明作者、出处和本声明,并保持内容完整
好帖

发表于 2022-11-18 13:06 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Grange 发表于 2022-11-18 13:03
我自己写的code要改好几次 直到满意为止 有时候还是不满意但是不知道怎么改了 感觉已经到了自己的limit了 ...

做项目时,往往很急的,没有你那种快乐啦

我是写好unit test,代码后就放那了,如果和需求不对,再回来改啦

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部