![]() |
1
sadfQED2 2023-01-18 16:13:03 +08:00 via Android ![]() 挺好的呀,清晰易懂,比那些套了一层又一层最后循环了 800 次才输出几个点的代码好多了
|
2
bubblegz 2023-01-18 16:16:14 +08:00 ![]() 清晰即可
|
![]() |
3
crab 2023-01-18 16:25:17 +08:00
🔵⚪ 这两个不复制的话怎么快捷打出来。
|
![]() |
4
murmur 2023-01-18 16:34:35 +08:00 ![]() 这代码维护性无敌,以后需求一改还可以 OOXXXOOXXX 这样换花样
|
5
zidian 2023-01-18 16:34:59 +08:00 ![]() 清晰明了。想起之前看过一个判断闰年的,直接把未来的十几个闰年写死在一个 list 里
|
![]() |
6
hhjswf 2023-01-18 16:36:28 +08:00 via Android
这也叫挺好吗。。
|
![]() |
7
luob 2023-01-18 16:38:25 +08:00 ![]() 这段代码不是“挺好”,“也可以”,而是标准的最佳实践
经常会遇到一些自作聪明的人把这样的逻辑继续抽象出一个函数来计算每 0.1 percentage 等于几个球,感觉自己能省好几行代码,实际上是蠢到家了。 |
![]() |
8
awalkingman 2023-01-18 16:41:23 +08:00
@crab 诶你这不是做到了嘛。帖子里是图片,复制都没得复制
|
![]() |
9
lakehylia 2023-01-18 16:46:10 +08:00
反正现在内存硬盘用不完,这段代码很好啊。
|
11
TWorldIsNButThis 2023-01-18 16:46:56 +08:00 via iPhone
如果用 pattern matching 的 switch 就更 declarative 了
|
![]() |
13
Jimmyisme 2023-01-18 17:02:14 +08:00 ![]() @crab Windiws 有个叫 IME 的功能。Win+v 是剪贴板历史; Win+; || win+.打开搜索面板. 直接搜 blue || white circle
|
14
MAGA2022 2023-01-18 17:05:38 +08:00 via Android
这都能吹
|
![]() |
15
gimp 2023-01-18 17:09:26 +08:00
清晰易懂,我觉得不错。
|
16
NoOneNoBody 2023-01-18 17:14:48 +08:00
有些看不懂……楼上的一些楼层
那 ppm 该怎么写呢? |
17
urnoob 2023-01-18 17:19:30 +08:00
最喜欢这样的代码了
唯一的缺点 最后一行默认返回全白比较好 |
18
mozhizhu 2023-01-18 17:23:47 +08:00 ![]() 完全不需要&&左边的判断
|
![]() |
21
churchill 2023-01-18 17:36:32 +08:00 ![]() “最佳实践”可还行,逻辑都不讲了
|
![]() |
23
DOLLOR 2023-01-18 18:11:00 +08:00
我也有过同样的实现,但我不用人力一个一个地写,会另写一段代码来生成代码。
|
![]() |
24
Yourshell 2023-01-18 18:15:51 +08:00 via Android
看来我还是太菜了,想不出来该怎么吹这段代码。
|
![]() |
25
luob 2023-01-18 18:19:31 +08:00 ![]() @NoOneNoBody
@dingjs 有一个从别人那里接手的陈年老项目,需求是把十个球改成一百万个球,你是希望原项目写的是上面那样的,还是这样一串? x = Int(Math.ceil(p*10)) String.repeat("🔵" * x) + String.repeat("⚪" * (10-x)) 任何一个智力正常的人最多 0.5 秒就能知道这十行球写的什么,但是推明白这两行各位需要多长时间? |
26
chenqh 2023-01-18 18:35:37 +08:00 ![]() 居然是 C#
|
27
iseki 2023-01-18 18:42:24 +08:00 via Android
10 个球有点多了,要是 3 个 5 个这么写我觉得还行
|
28
iseki 2023-01-18 18:48:29 +08:00 via Android
主要是 3 个以内不容易写错看错,10 个一手滑就不好了。至于代码生成的还是歇一会儿吧,还不如拿 Math 函数凑合下
@luob 这两行有个两三秒也看懂了,可按上例堆上个几十行我得仔细看有没有反直觉的条件,改时候也得小心翼翼 |
29
iseki 2023-01-18 18:49:19 +08:00 via Android
顺带一提…你那两行写的不太对吧
|
30
iseki 2023-01-18 18:54:39 +08:00 via Android
如果你们用 Math 函数写东西都是这种风格,我建议还是老老实实堆条件吧,起码不出错
|
31
n18255447846 2023-01-18 18:55:14 +08:00
跟标题有什么关系?
|
![]() |
32
elfive 2023-01-18 18:56:29 +08:00 via iPhone
|
![]() |
34
20015jjw 2023-01-18 21:08:43 +08:00 via iPhone
当年 obama care 的网页也就这水平
政 @府外包嘛不能要求什么 |
35
clrss 2023-01-18 21:12:34 +08:00 ![]() var get_rating_string = function(rating) {
return "★★★★★☆☆☆☆☆".substring(5 - rating, 10 - rating); }; |
36
NoOneNoBody 2023-01-19 01:00:11 +08:00 ![]() @luob #25
你想的点错了,这两行只适合一个项目,但不应只考虑眼前问题 我写的话,会以 dict, enum 等等类似的格式传入,这样调用的人在构建参数的时候自然也清楚目的是什么 因为问题的本质就是一一对应的选择,输入 a 输出 A ,使用的人理清出入的格式就够了,不需理会中间如何实现 此题的话,传入 0.1 ~ 0.9 九个 breakpoint ,("🔵" * x) 组成的十个结果,以及测试值 构建前面这两个参数的人自然清楚是做什么 至于中间实现的代码,难读也没所谓,快速和高效更重要 例如这个 python 小函数,我几乎全部项目都有用到,是个通用函数 def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'): ... i = bisect(breakpoints, score) ... return grades[i] 理解 breakpoints, grades 两个参数应该比四个 if 容易吧 |
![]() |
37
enchilada2020 2023-01-19 03:33:47 +08:00 via Android
@clrss 妙啊 滑动窗口了
|
39
pikashi 2023-01-19 08:26:46 +08:00 via Android
这代码不光简单易读,而且性能应该也是最高吧
|
40
jaggle 2023-01-19 09:02:43 +08:00 via iPhone
@enchilada2020 抱歉好像是你看懂了,能否解释一下,长度不够还能回到第一列取?
|
![]() |
41
manhere 2023-01-19 09:18:36 +08:00
人和代码有一个能跑就行
|
42
rocksolid 2023-01-19 09:20:08 +08:00 ![]() 大开眼界,这小学生代码也能吹一波
|
44
rocksolid 2023-01-19 09:34:32 +08:00 ![]() 还有吹性能的,就算是 20 年前这点性能区别狗都看不上
|
46
nevergotit 2023-01-19 09:55:47 +08:00
人家 10 秒钟写完代码回家陪孩子了,你还在这掰扯写的不够高级
|
![]() |
47
ncepuzs 2023-01-19 10:00:07 +08:00
这也能吹,还“性能应该也是最高吧”……
|
![]() |
48
wwbfred 2023-01-19 10:16:59 +08:00
@luob 我希望采用的是"标准的最佳实践",毕竟把十个明文字符改成一百万个明文字符,那可太容易了。
这个实践的优点还包括简单易读,一百万个字符,大家数一数就是知道是多少个了,完全不需要注释,也很好检查是否少了一个。 |
![]() |
49
enchilada2020 2023-01-19 10:22:59 +08:00 via Android
@jaggle 我没太看明白你的问题是什么。。他定义了一个长度为 10 的字符串 然后从中取固定长度为 5 的子串 根据 rating 的值来决定起点 终点即是起点+5
|
50
agdhole 2023-01-19 10:23:48 +08:00
意大利面条
|
51
wdwwtzy 2023-01-19 10:36:26 +08:00
竟然是用 C#的 xamarin 写的 ios 和安卓 app 。
其实 C#可以使用模式匹配,达到更好的效果。 ``` return percentage switch { > 0.1 and < 0.2 => "1", > 0.2 and < 0.3 => "2", > 0.3 and < 0.4 => "3", ...... }; ``` |
![]() |
52
watzds 2023-01-19 11:25:47 +08:00
很优雅的代码,扩展性很强,比如大于多少分,圆圈换个颜色之类的
|
53
assiadamo 2023-01-19 11:32:53 +08:00
我去荷兰是不是也能找到这样的工作
|
54
lchynn 2023-01-19 12:04:20 +08:00
@sadfQED2 的确这才是写给人来维护的代码。循环嵌套也就算了, 还用各种奇技淫巧,美其名为代码 geek ,压根是不想其他人正常读懂吧。
|
55
Jirajine 2023-01-19 12:51:52 +08:00 ![]() 难道重点不是标题里 gov 开源身份验证应用的源码吗
|
56
iceheart 2023-01-19 13:09:56 +08:00 via Android
简洁,高效,自注释,易维护,易排错。
取舍恰到好处,不知道有啥可喷的。觉得不好的贴个你认为更好的版本呀 |
![]() |
57
Genshin2020 2023-01-19 13:20:47 +08:00 ![]() 楼主,你应该说国内的同事写的代码,这样大家的想法就一致了,你用洋大人的源码,肯定有牧羊犬的
|
58
darknoll 2023-01-19 13:59:08 +08:00
简单明快,舒服
|
59
SimbaPeng 2023-01-19 14:47:38 +08:00
总有拿可读性来尬吹小学生代码的
|
![]() |
60
learningman 2023-01-19 15:08:33 +08:00
觉得可读性强的,盲猜是自己只会写这种代码
|
62
Lighfer 2023-01-19 15:28:17 +08:00 via iPhone
在能满足现有需求的前提下这代码没什么可挑剔的。
至于有些人说产品经理之后要改成显示更精确的进度,这段代码改起来也很轻松,无论是什么人来改都没问题。 在我看来,一个项目不必在每一个如此小的功能点都要设计得很复杂,所谓的可扩展应该是针对整个项目的局部,但不是局部到如此细节,更多的情况下是这段代码可能这辈子都不会动它了。 最后,每个人的品味都不一样,单单这段代码我个人认为并不存在可挑剔的地方,更上升不到人身攻击的程度。 叠个盾牌: 仅针对这段代码及这个帖子内容发言,不要拿我没看过项目中的其他代码说事,因为我真的没看。 |
![]() |
63
netabare 2023-01-19 16:07:47 +08:00 via Android
这哪里最佳实践了,扯性能,10 个 if 也不是没有代价的,说可读性,写代码的人一般情况下都懂小学数学,这种代码没有任何优势,而且一堆小于大于号粗心写错的可能性也不是没有。
而且,如果传入的是负数怎么办? |
64
ramondoo 2023-01-19 16:15:56 +08:00 ![]() 代码还是有些问题的
( 1 )参数小于 0 的情况处理不当 ( 2 ) double 类型的参数与零比较方式有问题 |
![]() |
65
revlis7 2023-01-19 16:39:22 +08:00
哪儿呢么多废话,就问一句,你就说这结果对不对吧!
|
![]() |
66
Genshin2020 2023-01-19 16:50:21 +08:00
说一个冷知识点,蓝色字符长度为 2 ,白色字符长度为 1
好了,继续讨论 |
![]() |
67
k9982874 2023-01-19 16:54:18 +08:00 via Android
发现楼上有个看不懂 10 取模的程序员
|
![]() |
68
Genshin2020 2023-01-19 16:56:16 +08:00 ![]() @netabare 我不知道多少人尝试自己优化一下,我尝试以后发现这样的办法也许真的是比较高效的方法。
但是那些说这个代码好的,我怀疑他们没有自己去实现,单纯因为是洋人写的 比如,蓝色字符长度为 2 ,白色字符长度为 1 ,这个关键点都没有人点出来 |
![]() |
69
Genshin2020 2023-01-19 17:01:21 +08:00
console.log('🔵 ===>','🔵'.length)
console.log('⚪ ===>', '⚪'.length) 可以自己在控制台打印一下 |
![]() |
70
westoy 2023-01-19 17:46:24 +08:00
@Genshin2020
也不一定, 🔵的 unicode 码是 128309 支持 UCS4 的语言实现里是 1 个字长, 比如 python 、ruby 、haskell 、rust 、go(utf8.RuneCountInString)等等 只支持 UCS2 的语言里是 2 个, 像 jvm 系、c#、node 等等 |
![]() |
71
moioooo 2023-01-19 17:54:45 +08:00 via iPhone
js 里我也这么写的。
一开始想着等逻辑理清楚,代码完成之后再吧打印改的简洁点 后来回头看,感觉挺适合 review ,就留着了 |
72
ccraohng 2023-01-19 17:57:36 +08:00
b.repeat(y ,b) + w.repeat(10 - y, 'w')
在我这是一坨大便 |
![]() |
73
Genshin2020 2023-01-19 20:31:21 +08:00
|
74
iikebug 2023-01-19 20:48:54 +08:00
这样的代码都有人吹易读性的吗?
|
![]() |
75
adoal 2023-01-19 21:22:38 +08:00
当代程序员价值观众生相😃
|
![]() |
76
hhjswf 2023-01-19 21:23:13 +08:00 via Android
有内味了,把贾浅浅的屎屁尿放进高考阅读理解,想必各位大佬也能品出一番风味。别问,问就是蠢人欢迎对号入座
|
![]() |
77
lengyuqu 2023-01-20 07:46:45 +08:00
国外的屎都是可以吹的😃
|
78
zhlxsh 2023-01-20 13:17:15 +08:00 via iPhone
看了下原文的推特机翻的标题:荷兰 gov 被迫发布其 DigiD 数字身份验证 iOS 应用程序的源代码。它是用 C# 编写的。
我记得高中 pascal 写的字母塔也是用 for 循环 |