V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ligiggy
V2EX  ›  程序员

请教下大佬定义错误信息结构,应该采用哪种方式

  •  
  •   ligiggy · 2022-04-07 17:00:36 +08:00 · 1304 次点击
    这是一个创建于 757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于项目中的错误信息,最好采用哪种结构呢?目前我想到看到的大概是下面两种方案,想问下哪种方案好一点,有没有更好的方案,比如根本不用枚举。

    • 定义一个枚举:

      enum ERR
      {
      	ERR_Success = 0,
      	……
      	ERR_xxxxFailure = xxx,
      	ERR_xxxxFailure = xxxx,
      };
      

      定义一个 dictionary:

      dictionary<int, string>{};
      
      对应存入枚举对应的,报错详细信息。
      
    • 有些人会将很多函数返回值,定义为 int 或者枚举类型 ERR

      int run()
      {
      	……
      	return ERR_Success;
      }
      
      最后在使用的时候
      {
      	if(run() != ERR_Success)
      	{
      		……
      	}
      }
      
    • 有些人会采取 setError 的方式,在其他地方调用 getError

      bool run()
      {
      	……
      	return setError(ERR);
      }
      
      bool setError(int value)
      {
      	……
      	if(value != ERR_Success)
      	{
      		return false;
      	}
      	return true;
      }
      
      string getError()
      {
      	……
      	return error;
      }
      
      
      最后在使用的时候
      {
      	if(!run())
      	{
      		getError();
      		……
      	}
      }
      
    6 条回复    2022-04-08 14:34:42 +08:00
    3dwelcome
        1
    3dwelcome  
       2022-04-07 17:49:00 +08:00
    用枚举挺好的啊,一般 IDE 都支持跳过数字,直接查看对应的英文信息。

    有错误,尽量发现,能避免潜在 BUG ,少很多麻烦。

    setError 这种就是把 error 深度隐藏起来,如果 setWarning 还能理解,error 就算了吧。
    3dwelcome
        2
    3dwelcome  
       2022-04-07 17:49:21 +08:00
    有错误,尽早发现
    lmshl
        3
    lmshl  
       2022-04-07 17:56:35 +08:00
    Algebraic Data Types 了解一下,Rust / Scala / Kotlin 都原生支持 ADT ,其他语言也有模拟方案。
    macrorules
        5
    macrorules  
       2022-04-08 07:23:50 +08:00
    用栈比较好吧,fault-tolerant
    mingl0280
        6
    mingl0280  
       2022-04-08 14:34:42 +08:00 via Android
    setError 是极其脑瘫的落后设计……那玩意儿相当于保存状态,但是一旦你的状态被覆盖了,找错能找死你。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2179 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:15 · PVG 19:15 · LAX 04:15 · JFK 07:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.