文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言Continuation 和高级流程控制
精品推荐
特别推荐
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·在VC6中创建wxWidgets项目[附图]
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·DENX U-Boot及Linux使用手册
·Visual C++ ADO数据库编程入门
·飞机躲避小游戏---是男人就撑100秒的制作
·[仿真实验]操作系统的内存管理
·三维粒子系统在AS2中的实现
·Continuation 和高级流程控制
·[分形]DLA团簇模型的摸拟
·用汇编编写DOS下的内存驻留程序(3)
·简单架设Jabber 局域网即时通讯服务器
·Palm OS应用程序设计指南之十一
·Palm OS应用程序设计指南之五
·samba和openldap结合实战
·AIX 5L 学习大纲/简易教程(1)(未经许可,请勿COPY)
·Internet Explorer 编程简述(十一)完美的Inplace Drag & Drop——“超级拖放”
·利用 wordXP 实现自动排班
·14.4 Function members
·数值计算程序大放送-线性代数方程组
·跟我一起写 Makefile

Continuation 和高级流程控制

日期:2008年3月16日 作者: 查看:[大字体 中字体 小字体]


    流程控制通常非常简单:包括序列化、选择和迭代等过程。很多一直在使用这些基本控制结构的程序员都曾经经历过一段困难的时间来确定哪种流程控制是必需的。本文将简要介绍有关 continuation 的内容,并向您展示如何用最新的方法来考虑流程控制的问题。

很多程序员在首次接触编程之后,并不会太多考虑有关流程控制的问题,因为大部分编程语言都只有几个简单的流程控制结构。然而,流程控制的内容实际上比大部分主流编程语言中提供的更为丰富。有很多并不被大多数人所知的专用语言都具有高级且有用的流程控制结构。

高级流程控制的例子

我们开始了解流程控制的最好方法是查看几个使用不同语言的高级流程控制结构的例子。然后可以将这些知识归纳为一个适用于高级流程控制情况的框架。

大规模退出

第一种高级流程控制技术您可能已经听说过:大规模退出(non-local exit)。大规模退出有几种类型,每种类型都可以划分成两类:结构化的和非结构化的。非结构化大规模退出(UnstrUCtured non-local exit) 就是计算机科学老师警告您不要这样做的一种情况,例如可怕的 goto 语句。实际上,如果得到广泛而正确地使用,非结构化的大规模退出可能会非常有用。例如,在流程控制非常复杂的程序中,它们可以提高程序的可读性。如果复杂的流程控制不能非常自然地嵌套,那么强行使用嵌套结构会使整个程序的可读性变差,而不是变好。有关使用 goto 语句的优缺点的更多信息,请参考本文后面 参考资料 部分给出的链接。

对于结构化的大规模退出(structured non-local exit),您可能熟悉最流行的一种类型:异常。如果您使用 C、Fortran 和 Cobol 的时间已经超过了 20 年,而且一直没有再使用过其他语言,那么请参阅下面对异常的一段简介。

异常 (exception) 是在代码中触发错误或对错误进行局部化的一种方法。通常当错误发生时,我们希望能够对这个错误进行处理。除非我们明确下达继续操作的指示,否则其余的工作不会继续进行。例如,我们可以看一下下面使用 Java™ 语言编写的这个简单的数据库代码:


清单 1. 简单的数据库代码的例子

//NOTE -- this code will not compile, but that's on purpose.
import java.sql.*;
  ...
  public static int testdbcode(Connection conn) {
    //Prepare the statement
    PreparedStatement s = conn.prepareStatement(
       "select id from test_table where name = ?");
    //Set the parameters
    s.setString(1, "fred");
    //Run the query
    ResultSet rs = s.executeQuery()
    //Move to the first result row
    rs.next();
    //Get the answer (first result parameter)
    int id = rs.getInt(1);
    return id;
  }
  ...
      

这段代码的问题是没有错误处理,在处理数据库或其他外部实体时,每个地方都可能产生错误。例如,如果在准备查询时产生了错误,那么设置参数、运行查询以及检索结果就都没什么用了。这个查询在碰到第一个错误之后就毫无意义了。因此在 Java 语言中,提供了一些异常,这让我们可以封装一段代码,这样在碰到第一个错误时就会跳到这段代码上来。要在 Java 语言中实现这种功能,我们可以按照下面的方式重新编写这段代码:


清单 2. 采用异常处理的简单数据库函数

import java.sql.*;
  ...
  public static int testdbcode(Connection conn) {
    try {
      //Prepare the statement
      PreparedStatement s = conn.prepareStatement(
         "select id from test_table where name = ?");
      //Set the parameters
      s.setString(1, "fred");
      //Run the query
      ResultSet rs = s.executeQuery()
      //Move to the first result row
      rs.next();
      //Get the answer (first result parameter)
      int id = rs.getInt(1);
      return id;
    } catch (Exception e) {
      //Put error handling code here
      return -1;
    }
  }
  ...
      

try 中的代码块会一直执行完,除非有一条语句出现了错误。如果触发 了某个错误,就会跳过 try 中的代码块,执行 catch 中的代码块,其中变量 e 中保存了异常的信息。在 Java 中,被触发的错误都是完整的类,因此任何信息都可以放入异常中。实际上,我们可以创建多个 catch 代码块,每个代码块分别用来处理一种特定的异常类。

在上面的代码例子中,我们处理的是系统生成的异常。不过我们也可以创建应用程序级的异常,并对其执行同样的处理。应用程序可以在任意时刻使用 throw 关键字触发异常。例如,我们可以说如果上面的代码中 ID 值为 1,那么就可以认为这是一个应用程序级的异常。我们可以使用下面的方式:



[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 




上一篇:ARM的嵌入式Linux移植体验之应用实例

下一篇:嵌入式linux启动信息注释之bootloader

Continuation 和高级流程控制 相关文章:
·“黑客”教你如何远程控制计算机
·CS起源-控制台命令大全
·Photoshop CS3教程:图层样式控制动画
·Continuation 和高级流程控制
·音量控制 随心所欲
·Tomcat中用web.xml控制Web应用详解
·Windows远程桌面实现远程控制
·Windows故障恢复控制台
·网页中的多媒体播放控制
·短消息电话中数据链路层的控制技术
Continuation 和高级流程控制 相关软件:
·地面控制 2中文版
·风险管理与内部控制(普华永道)
·声音控制应用
·广外男生远程控制V0.92A
·System Spec(系统全方位控制) v2.18 汉化版
·网络安全、审查与控制
·Windows XP控制台图解教程
·可控制的闪烁滚动条效果
·天狼星语音控制魔兽
·2005年造价工程师计价与控制试题及答案

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn