小代码 大细节 - 来测试下你的代码习惯还 OK 吗
❝
可以遗憾,但不要后悔。
我们留在这里,从来不是身不由己。
——— 而是选择在这里经历生活
❞
目录
本文旨在分享一篇关于代码优化的文章,通过对示例代码的分析和优化,希望读者能够学到一些实用的编程技巧和注意事项,以提高代码质量和开发效率。
案例分享
论程序猿的基本素养,小代码看大细节,来测试下你的代码习惯还
OK吗?
函数介绍
本代码实现了过程式函数 IsValidIPPort,用于判断给定的字符串是否表示合法的 IP 地址和端口号。
该函数将输入字符串按照冒号分隔成两部分,分别尝试将第一部分解析为 IP 地址和第二部分解析为 Port 端口号。如果解析成功,则返回 true,否则返回 false。如果仅是 IP 地址,则只要解析成功就返回 true。
优化提示
下面这段代码在功能上没有任何问题,但对于读者和后续维护者来说不够友好,Coding Review 肯定无法通过。
对于该示例而言,代码存在部分冗余和嵌套层级很深的 if...else 条件语句等问题。
我们分别使用 Python 和 Go 语言进行了实现,测试样例如下:
Python 版本
import re
def parse_ip(ip: str) -> str:
""" 为了稍微增加编程复杂度,故意这样写,不要修改这个 """
ip_regex = r'^(\d{1,3}.){3}\d{1,3}$'
match = re.match(ip_regex, ip)
if match:
return "yes"
else:
return "no"
# 👇👇👇请优化这段代码👇👇👇
def is_valid_ip_port(ip_port: str) -> bool:
parts = ip_port.split(":")
if len(parts) == 1:
res = parse_ip(parts[0])
if res == "yes":
return True
else:
return False
elif len(parts) == 2:
res = parse_ip(parts[0])
if res == "no":
return False
port = int(parts[1])
if port < 0 or port > 65535:
return False
else:
return True
else:
return False
if __name__ == '__main__':
flag1 = is_valid_ip_port("192.168.0.100:8080") # True
flag2 = is_valid_ip_port("192.168.0.1001:8080") # False
flag3 = is_valid_ip_port("192.168.0.100:80801") # False
flag4 = is_valid_ip_port("192.168.0.100") # True
flag5 = is_valid_ip_port("192.168.0.1001") # False
print(flag1)
print(flag2)
print(flag3)
print(flag4)
print(flag5)
Go 版本
package main
import (
"fmt"
"net"
"strconv"
"strings"
)
// 👇👇👇请优化这段代码👇👇👇
func IsValidIPPort(ipAddrPort string) bool {
parts := strings.Split(ipAddrPort, ":")
if len(parts) == 1 {
ip := net.ParseIP(parts[0])
if ip == nil {
return false
} else {
return true
}
} else if len(parts) == 2 {
ip := net.ParseIP(parts[0])
if ip == nil {
return false
} else {
port, err := strconv.Atoi(parts[1])
if err != nil {
return false
} else {
if port < 0 || port > 65535 {
return false
} else {
return true
}
}
}
} else {
return false
}
}
func main() {
flag1 := IsValidIPPort("192.168.0.100:8080") // true
flag2 := IsValidIPPort("192.168.0.1001:8080") // false
flag3 := IsValidIPPort("192.168.0.100:80801") // false
flag4 := IsValidIPPort("192.168.0.100") // true
flag5 := IsValidIPPort("192.168.0.1001") // false
fmt.Println(flag1)
fmt.Println(flag2)
fmt.Println(flag3)
fmt.Println(flag4)
fmt.Println(flag5)
}
修改示例
5 分钟到了,大家都自己改完了嘛?(不要直接参考 下面的实现代码示例,自己思考,动手写出来,让代码变得更简洁,说不定比我实现的优雅呢)
Python 优化
Go 优化
还有,记得把更优的实现方式码上掘金地址发到评论区,共同进步吧!
总结
实现方式有很多,不同的人有不同的编码习惯和偏好,重要的是能够写出可读性好、正确性高的代码。
比如,两种编码方式:A 性能更优,B 语义性更好
在选择编程实现方式时,有时候不能一味追求性能。对于同一问题,不同的实现方式可能存在性能和语义性方面的差异。通常来说,这种差异主要来自于“业务代码”层面的差距,而不是语言层面的差距。
一种实现方式可能在语义性方面更好,能够更直观地表达程序的意图,这有助于提高代码的可维护性。虽然这种实现方式在性能方面稍逊于另一种实现方式,但通常这种性能差距可以忽略不计。
因此,在实际开发中,我们应该根据代码的具体情况选择更加直观易懂的实现方式,这往往更为重要!