挑战 5 分钟优化代码片段

1,151 阅读3分钟

小代码 大细节 - 来测试下你的代码习惯还 OK 吗

可以遗憾,但不要后悔。 

我们留在这里,从来不是身不由己。 

——— 而是选择在这里经历生活

目录

本文旨在分享一篇关于代码优化的文章,通过对示例代码的分析和优化,希望读者能够学到一些实用的编程技巧和注意事项,以提高代码质量和开发效率。

  1. 案例分享
  2. 修改示例
  3. 总结

案例分享

论程序猿的基本素养,小代码看大细节,来测试下你的代码习惯还 OK 吗?

函数介绍

本代码实现了过程式函数 IsValidIPPort,用于判断给定的字符串是否表示合法的 IP 地址和端口号。

该函数将输入字符串按照冒号分隔成两部分,分别尝试将第一部分解析为 IP 地址和第二部分解析为 Port 端口号。如果解析成功,则返回 true,否则返回 false。如果仅是 IP 地址,则只要解析成功就返回 true

优化提示

下面这段代码在功能上没有任何问题,但对于读者和后续维护者来说不够友好,Coding Review 肯定无法通过。

对于该示例而言,代码存在部分冗余和嵌套层级很深的 if...else 条件语句等问题。

我们分别使用 PythonGo 语言进行了实现,测试样例如下:

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 语义性更好

在选择编程实现方式时,有时候不能一味追求性能。对于同一问题,不同的实现方式可能存在性能和语义性方面的差异。通常来说,这种差异主要来自于“业务代码”层面的差距,而不是语言层面的差距。

一种实现方式可能在语义性方面更好,能够更直观地表达程序的意图,这有助于提高代码的可维护性。虽然这种实现方式在性能方面稍逊于另一种实现方式,但通常这种性能差距可以忽略不计。

因此,在实际开发中,我们应该根据代码的具体情况选择更加直观易懂的实现方式,这往往更为重要!