Exception 语句

上一篇的一元二次方程求根的例子,让我想起了一件事。一元二次方程求根的程序,如果遇到Delta<0,则无解,函数不能返回值。在这个例子中,print打印一条提示信息,然后在求平方根的过程中引发异常。这样处理,马马虎虎也算处理好了。例子详见,https://blog.csdn.net/aaasssdddd96/article/details/136867786

当然有些不满意的地方。因为在打印Delta<0的地方,已经知道计算要出问题了,但是不管,故意让程序执行下去,直到在内部真的引发一个异常。必然的。引发的时候又输出了一条信息。这信息微观上准确,宏观上可能让人迷惑。

所以,要不要引进明确的异常机制? 如果引进,怎么做?

明显的做法有2种。1是增加一个叫作exception()的内部函数。遇到Delta<0后,print打印一条提示信息,然后调用无参数的exception()触发异常,或者exception()接受一个提示信息做参数,这样就省下了print语句。

func Delta(a,b,c) 
{
		return b*b-4*a*c;
}

func root(a, b, c, neg) 
{
		d= Delta(a,b,c);
		if(d<0) { 
			print "Delta <0"; 
			exception();
		}
		return (-b +(neg? -d**0.5: d**0.5))/(2*a);
}

这样做还是有些不满意。因为内部函数都统一有一个参数,采用无参数的exception()多了一个需要特殊处理的例外。而如果传一个字符串参数给exception(),也产生了一个需要特殊处理的例外, 因为所有的函数都只接受‘数’做参数,这里需要接受字符串参数。

所以,考虑第2种方法。引入Exception 语句。Exception 语句跟print语句是不是很像?这种方法只需要新增一个关键字,Exception。然后用它来代替print。Exception直接看成print。这样基本上没什么工作需要做了。当然print完成以后会自动引发一个Exception功能。遇到Exception后,后面的return 语句就不执行了。这里,稍微有点不满的是,跟C语言有了一点差别,C语言没有Exception语句。

func Delta(a,b,c) 
{
	return b*b-4*a*c;
}

func root(a, b, c, neg) 
{
		d= Delta(a,b,c);
		if(d<0) { 
			exception "Delta <0"; 
		}
		return (-b +(neg? -d**0.5: d**0.5))/(2*a);
}

print语句可以容纳多个输出了。当然exception 也可以了。

...
	if (d<0) {
		exception a,"x**2 +",b,"x +", c,"= 0; Delta<0.";
	}

exception可以容纳多个输出。又如果exception的输出中调用的函数,表达式中又遇到异常会怎么样?exception的输出被打断,结果仍然是异常。

这样看,解释程序增加一个Exception功能并没有难度。简直太简单了。简单的简直不想动手去做。嗯!现在就偷个懒,以后真需要,就去做一下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值