当前位置: 首页 > news >正文

IDL学习:语法基础-程序控制

        程序控制时任何编程语言比不可少的重要部分。本博客主要讲解IDL语言中的循环语句条件语句跳转语句

1. 条件语句

        IDL条件语句有三种:If、Case 和 Switch。本节针对这三种条件语句进行具体的讲解。

1.1 If语句

        If语句的功能是用来判断是某满足条件(为“真”),若满足则执行。语法为:

第一类语法(单行命令):

IF expression THEN statement [ ELSE statement ]

第二类语法(多行命令):

IF expression THEN BEGIN

   statements

ENDIF [ ELSE BEGIN

   statements

ENDELSE ]

第一类 if 语句实例: 

>>IF 4 Gt 2 THEN Print,'4大于2'
4大于2
>>IF 1 Gt 2 THEN Print,'真:运行' Else Print,'假:运行'
假:运行

第二类 If 语句实例:

        注:由于是多行语句,且彼此关联,因此无法使用IDL控制台运行,需要建立一个Pro文件来编译运行,下面丢一个为Pro文件,第二个为运行结果。

PRO Test02
  IF (4 GT 2) THEN BEGIN
    Print,'4大于2'
    Print,'条件为真'
  ENDIF

  IF ~(4 GT 2) THEN BEGIN
    Print,'4大于2'
    Print,'条件为真'
  ENDIF ELSE BEGIN
    Print,'4大于2'
    Print,'条件为假'
  ENDELSE
END
>>.compile -v 'D:\Code\IDL\My_Program\Test\test02.pro'
% Compiled module: TEST02.
>>test02
% Compiled module: TEST02.
4大于2
条件为真
4大于2
条件为假

1.2 Case语句

        Case 条件语句的功能是运行满足表达式的现有条件

CASE 表达式 OF

    情况1: statement(s)

    ...

    情况n: statement(s)

[ ELSE: statement(s) ]

ENDCASE

注:statement(s)可以是语句,也可语句块。当时语句块的是否,需要用Begin和End。

情况n: Begin

        语句块

End

例子1:

PRO Test02
  ;Print,'请输入一个省,例如江西省'
  A = '江西省'

  CASE (A) OF
    '江西省': Print,'输入的是江西省'
    '福建省': Print,'输入的是福建省'
    '台湾省': Print,'输入的是台湾省'
    ELSE: BEGIN
    END
  ENDCASE
END

        注:ELSE不能省略!很多人为了便捷,常常会省略ELSE,也因此造成运行错误(编译不出错),例如:

PRO Test02
  ;Print,'请输入一个省,例如江西省'
  A = 'Aa省'

  CASE (A) OF
    '江西省': Print,'输入的是江西省'
    '福建省': Print,'输入的是福建省'
    '台湾省': Print,'输入的是台湾省'
  ENDCASE
END

        错误原因是:案例声明未找到匹配项。Case代码中由于没有可以满足表达式的情况,同时也没有Else,因此会报错!

例子2:

PRO Test02
  ;Print,'请输入一个省,例如江西省'
  A = '某某省'
  CASE (A) OF
    '江西省': BEGIN
      Print,'江西省……'
      Print,'江西位于……'
    END

    '福建省': BEGIN
      Print,'福建省……'
      Print,'福建位于……'
    END

    '台湾省': BEGIN
      Print,'台湾省……'
      Print,'台湾位于……'
    END

    ELSE: BEGIN
      Print,'祖国'
      Print,'我爱我的祖国'
    END
  ENDCASE
END

1.3 Switch语句

         Switch语句类似于Case语句,不同的是,Switch是从满足表达式的那个条件开始运行,一直到最后。语法如下:

Switch 表达式 OF

    情况1: statement(s)

    ...

    情况n: statement(s)

[ ELSE: statement(s) ]

ENDSwitch

注:statement(s)可以是语句,也可语句块。当时语句块的是否,需要用Begin和End。

情况n: Begin

        语句块

End

PRO Test02
  ;Print,'请输入一个省,例如江西省'
  A = '福建省'
  Switch (A) OF
    '江西省': BEGIN
      Print,'江西省……'
      Print,'江西位于……'
    END

    '福建省': BEGIN
      Print,'福建省……'
      Print,'福建位于……'
    END

    '台湾省': BEGIN
      Print,'台湾省……'
      Print,'台湾位于……'
    END

    ELSE: BEGIN
      Print,'祖国'
      Print,'我爱我的祖国'
    END
  ENDSwitch
END

        运行结果为:

2. 循环语句

           IDL循环语句有四种:For循环、ForEach循环、While循环以及Repeat循环。

2.1 For 循环

        For循环是任何编程语言比不可少的程序控制,是最常见的循环方式。

FOR variable = init, limit [, Increment] DO statement

FOR variable = init, limit [, Increment] DO BEGIN

   statements

ENDFOR

注:Increment表示步长,可以不写,则默认为1

        例如:循环计算1+2+……+8。

PRO Test02
  StartNum = 0      ; 开始值
  EndNum = 8        ; 结束值
  Step = 1          ; 步长(可以不写,默认为1)
  Sum = 0
  FOR index = StartNum, EndNum,Step DO BEGIN
    Sum = Sum + index
  ENDFOR
  Print,Sum
END

        例如:循环计算1~8中奇数的和,只需改变步长即可。 

PRO Test02
  StartNum = 0      ; 开始值
  EndNum = 8        ; 结束值
  Step = 2          ; 步长(可以不写,默认为1)
  Sum = 0
  FOR index = StartNum, EndNum,Step DO BEGIN
    Sum = Sum + index
  ENDFOR
  Print,Sum
END

2.2 ForEach 循环

        IDL8.0版本之后才有的,也是十分便捷的。FOREACH 语句为输入集(可以是数组、列表或哈希表)的每个元素执行一个或多个语句。 在 FOREACH 循环中,元素的值和(可选)元素对应的索引或键是可用的。

FOREACH Element, Variable [, Index] DO Statement

FOREACH Element, Variable [, Index] DO BEGIN

statements

ENDFOREACH

注:如果 Variable 是数组或列表 ,则可选 Index 设置为与当前循环索引对应的整数。 如果 Variable 是哈希表 ,则 Index 设置为当前键值对对应的键。

下面三段代码都来自官方教程,Variable 分别是数组、列表、哈希表。

>>array = [1, 3, 5, 7, 9, 11, 13, 15]
>>
>>FOREACH element, array, index DO PRINT, 'Index ', index, ' Value = ', element
Index                      0 Value =        1
Index                      1 Value =        3
Index                      2 Value =        5
Index                      3 Value =        7
Index                      4 Value =        9
Index                      5 Value =       11
Index                      6 Value =       13
Index                      7 Value =       15
PRO Test02
  list = List(77.97, 'Galactic', [2, 7, 1, 8, 2])
  FOREACH element, List DO BEGIN
    Print, 'Value = ', element
  ENDFOREACH
END

运行结果为:

PRO Test02
  planets = Hash('Mercury', 0.3e24, 'Venus', 5e24, $
    'Earth', 6e24, 'Mars', 0.65e24, 'Jupiter', 1900e24, $
    'Saturn', 570e24, 'Uranus', 87e24, 'Neptune', 100e24, $
    'Pluto', 0.7e24)

  FOREACH mass, planets, key DO Print, key, mass
END

2.3 While循环

        While 循环是任何编程语言比不可少的程序控制,是最常见的循环方式。

WHILE expression DO statement

WHILE expression DO BEGIN

   statements

ENDWHILE

注:While循环时,容易陷入死循环(判别式一直为真),使用时,需注意!

PRO Test02
  A = 5
  WHILE A Gt 0 DO BEGIN
    A = A-1
    Print,A
  ENDWHILE
END

2.4 Repeat 循环

         Repeat循环需要一直运行,直到满足条件采退出循环,常用于计算时结果需要达到某一种精度才符合要求,结束循环。

REPEAT statement UNTIL expression

REPEAT BEGIN

   statements

ENDREP UNTIL expression

例如:从1一直往上加,直到结果大于100才停止。

PRO Test02
  Sum = 0
  i = 0
  REPEAT BEGIN
    i = i+1
    Sum = Sum+i
  ENDREP UNTIL (Sum GT 100)
  Print,'当加到',i,'时,结果为',Sum,'大于100'
END

3. 跳转语句

        跳转语句的功能是当执行时跳转至某一位置处。IDL语言中共有三种跳转语句:Break、Continue、GoTo。

3.1 Break 中断跳转

        Break 表示结束循环。即当运行至这里时,就会马上结束循环。

PRO Test02
  FOR i = 0L, 8 DO BEGIN
    IF (i EQ 4) THEN BEGIN
      BREAK
    ENDIF
    Print,i
  ENDFOR
END

3.2 Continue 继续跳转

        Continue表示结束本次循环,进入下一次循环。

PRO Test02
  FOR i = 0L, 8 DO BEGIN
    IF (i EQ 4) THEN BEGIN
      CONTINUE
    ENDIF
    Print,i
  ENDFOR
END

3.3 Goto 进入跳转

        直接跳转到程序特定的一个位置(有具体的标签处), 语法如下:    

        Goto,标签

        ……

        标签:语句                                                   

PRO Test02
  FOR i = 0L, 8 DO BEGIN
    IF (i EQ 4) THEN BEGIN
      Goto,MyLable
    ENDIF
    Print,i
  ENDFOR
  MyLable:Print,'Goto跳转至这里'
END

   

相关文章:

  • 市场调研团体怎么使用无人系统生产更安全
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • 百度校园招聘历年经典面试题汇总:测试开发
  • 支撑Java NIO 与 NodeJS的底层技术
  • vue2+element 通用表格组件封装
  • Symbol Table
  • LeetCode所有大于等于节点的值之和
  • 基站天线交叉极化比测量的不确定度评定
  • RTL8367/N/RB/S/SC系列千兆交换机方案选型参考
  • GO 调用 python3 (基于ubuntu) 实现人脸识别
  • 澳利率攀升,加息步伐将在某个时候放缓
  • AOP实现系统告警
  • Spring Boot集成第三方登录之微博登录
  • 那么我们应该如何优化Youtube的视频呢?
  • 带你秒懂 SSR-服务端渲染
  • Angular数据绑定机制
  • C++入门教程(10):for 语句
  • codis proxy处理流程
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTTP中的ETag在移动客户端的应用
  • JavaScript实现分页效果
  • Java比较器对数组,集合排序
  • node和express搭建代理服务器(源码)
  • Node项目之评分系统(二)- 数据库设计
  • python学习笔记-类对象的信息
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • vue的全局变量和全局拦截请求器
  • yii2权限控制rbac之rule详细讲解
  • 大主子表关联的性能优化方法
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 你真的知道 == 和 equals 的区别吗?
  • 删除表内多余的重复数据
  • 物联网链路协议
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 昨天1024程序员节,我故意写了个死循环~
  • ​configparser --- 配置文件解析器​
  • ​iOS安全加固方法及实现
  • ​什么是bug?bug的源头在哪里?
  • ​虚拟化系列介绍(十)
  • #{} 和 ${}区别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (多级缓存)多级缓存
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)项目管理杂谈-我所期望的新人
  • .NET 8.0 发布到 IIS
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 中让 Task 支持带超时的异步等待
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】