最近都在用AI写代码,不对,应该叫“口喷”代码。AI生成了大量的代码,前期还会装模作样的Review一下,后来就演都不演了,能跑就行,看都不看一眼。
今天看到两段抖机灵的代码,觉得挺有意思的,分享出来。
判断奇偶
|
|
这段代码的意图是判断一个整数是偶数(“even”)还是奇数(“odd”)。
其实现机制使用字符串切片技巧:字符串"eovdedn"被设计为当从索引0开始步长2切片时得到"even",从索引1开始步长2切片时得到"odd"。
这段代码非常的有想象力,但实际上并不好用,原因如下:
-
可读性差:字符串
"eovdedn"
看起来像乱码,对于其他开发者难以理解,维护困难。IDE上也会提示拼写错误(这个强迫症真是受不了) -
脆弱性:如果字符串被意外修改(如拼写错误),功能会完全破坏。
-
魔字符串(Magic String):依赖硬编码字符串,缺乏自解释性,容易引入错误。
-
非直观:相比直接使用条件判断(如
if num % 2 == 0
),这种技巧性代码不符合常规编程实践。 -
性能影响:虽然影响不大,但字符串操作通常比简单的算术运算更慢。
还有一种常用的位运算写法:
|
|
-
&
是按位与运算符 -
1
的二进制是0001
-
任何数与 1 进行按位与运算:
-
偶数:最后一位是 0,
n & 1 = 0
-
奇数:最后一位是 1,
n & 1 = 1
-
这种位运算符写法虽然比上面那种字符串切片写法好一些,但依然不够直观,尤其是对于不熟悉位运算的读者来说,理解起来有一定难度。
下面这种写法更直观易懂。
|
|
获取季度
|
|
这段代码的意图是根据月份(1-12)返回对应的季度(1-4)。
其实现机制是通过计算2
的month
次方,然后将结果转换为字符串并计算其长度。由于2
的幂次方在不同的月份范围内会产生不同长度的数字字符串,从而间接映射到季度。
- 一月:2 二月:4 三月:8 位数都是 1
- 四月:16 五月:32 六月:64 位数都是 2
- 七月:128 八月:256 九月:512 位数都是 3
- 十月:1024 十一月:2048 十二月:4096 位数都是 4
这段代码也是比较有趣,可读性差一点。
以下通过整除符号//
来实现季度的计算,是比较常见的写法:
|
|
-
//
是整数除法(向下取整) -
计算过程:将月份加2,然后除以3并取整
当然,最直观的写法是使用条件判断:
|
|