• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

V5R3 CL Programming

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 29次 | 进入软件测试论坛讨论

领测软件测试网
V5R3 CL Programming Enhancements, Part 1 



by Ted Holt 

In the October 10, 2003, issue of Midrange Guru, I said I doubted that the good folks at IBM would ever enhance the CL programming language. Well, I was wrong. I recently had a long phone conversation with one of those good folks, and he told me what IBM is doing to beef up CL programming in V5R3. I liked what I heard, and I hope you'll be as happy as I was to hear the news. 

 I'm going to tell you about what's new with declarations, looping structures, and selection structures. The rest will have to wait until a later issue. 



VARIABLE DECLARATIONS 



When you move to V5R3, you will be able to define signed and unsigned integer variables with the DCL command by entering *INT or *UINT in the TYPE parameter. You may fill in the LEN parameter with 2 or 4 to indicate the number of bytes, not digits, that the compiler should allocate. If you do not code a length parameter, CL will allocate four bytes for integer variables. Being able to define these data types will come in handy when calling APIs. Just think, you may not have to use the %BIN function nearly as often as you do now. 

The following table shows the ranges of values that may be stored in integer variables. 

 
 

 



The maximum length for character variables has increased from 9999 to 32767 bytes. However, you can only specify a maximum of 3000 bytes in the VALUE parameter of a DCL declaration. 

There is no change to decimal declarations. The maximum length remains 15 digits. The maximum number of decimal positions is nine. 



LOOPING STRUCTURES 



There are three new looping structures in V5R3: DOWHILE, DOUNTIL, and DOFOR. All of these control a body of commands terminated with an ENDDO. 

DOWHILE is a top-tested loop, and DOUNTIL is a bottom-tested loop. Both of these commands accept one parameter, COND, which lets you specify the same sort of condition the IF command takes. 

The following loop executes as long as indicator 03 is off. If indicator 03 is off when control reaches this point, the loop is not executed at all. 

DOWHILE   COND(*NOT *IN03)
... commands
ENDDO

Here's an example of DOUNTIL. The body of the loop will be executed at least once. After each iteration, the value of variable &ANSWER will be tested. If &ANSWER has a value of N, control will continue after the ENDDO. 

DOUNTIL   COND(&ANSWER *EQ 'N')
... commands
ENDDO

The third looping structure is called DOFOR. It is similar in function to the DO and FOR op codes in RPG, the PERFORM . . . VARYING . . . UNTIL structure in COBOL, and the FOR loop in BASIC. 

DOFOR requires a control variable, which must be of type *INT or *UINT, to be specified in the VAR parameter. DOFOR also requires the FROM and TO parameters, which denote the beginning and limiting values for the control variable. FROM and TO values may be integer literals or variables of the integer data types. There is an optional parameter, BY, with which you can identify the quantity to be added to the control variable before each iteration. Enter a negative value for descending loops and a zero or positive value for ascending loops. The BY parameter requires a literal; variables are not permitted. The default value of the BY parameter is 1. 

DCL      VAR(&POS) TYPE(*INT) LEN(2)

DOFOR    VAR(&POS) FROM(3) TO(53) BY(10)
... commands
ENDDO



LEAVE AND ITERATE 



The LEAVE and ITERATE commands alter the behavior of DOWHILE, DOUNTIL, and DOFOR loops. The LEAVE command exits a loop and passes control to the command following the loop's ENDDO. The ITERATE command branches to the loop's test condition to determine whether the body of the loop will be executed again. 

RPG programmers will recognize these commands as the counterparts of the LEAVE and ITER op codes. However, there is a difference you should know about. You may provide the name of a label in the CMDLBL parameter. This label name must be a literal, not a variable. If you do not provide a label, the LEAVE or ITERATE refers to the innermost loop. If you provide a label, the LEAVE or ITERATE refers to the loop identified by the label. In the following example, the LEAVE command exits the outer loop, which is labeled NEXTFILE. 

NEXTFILE:    DOWHILE COND(&FILENAME *NE ' ')
             ... commands
   NEXTMBR:     DOWHILE COND(&FILEMBR *NE ' ')
                ... commands
                IF (&TYPE *EQ 'DSPF') THEN(LEAVE CMDLBL(NEXTFILE))
                ... commands
                ENDDO
             ... commands
             ENDDO



THE SELECT STRUCTURE 



V5R3 CL programming includes a new case structure, which is implemented with the SELECT, WHEN, OTHERWISE, and ENDSELECT commands. SELECT and ENDSELECT begin and end the structure. They do not accept parameters. At least one WHEN group is required. The OTHERWISE command is optional. 

WHEN is identical in structure to the IF command. The first parameter, COND, is a logical expression that must evaluate to true or false. The second parameter, THEN, is optional and indicates the action that is to be carried out if the condition is true. If you want to execute more than one command, use a DO command, as you would with IF. The system executes the first WHEN group whose condition proves true and ignores subsequent WHEN groups and OTHERWISE. 

OTHERWISE is identical to ELSE in structure. You may specify a command to execute if none of the WHEN conditions is true. You may use a DO/ENDDO group to execute more than one command. 

   SELECT
      WHEN COND(*IN12) /* do nothing */
      WHEN COND(*IN03) THEN(RETURN)
      WHEN COND(&DATE *EQ ' ') THEN(DO)
              CHGVAR VAR(&IN21) VALUE('1')
              ITERATE
           ENDDO
      OTHERWISE CMD(DO)
              CHGVAR VAR(&IN22) VALUE('1')
              CHGVAR VAR(&IN25) VALUE('1')
           ENDDO
   ENDSELECT



NESTING 



There are limits to the number of levels of nested structures. You can nest up to 10 levels of IF statements. This is unchanged from previous releases of OS/400. You can nest up to 25 levels of DO, DOWHILE, DOUNTIL, and DOFOR commands. That is not 25 levels of each one, but 25 levels of all DOx operations. You can nest up to 25 levels of the SELECT command. 

These limits are independent of one another. For example, you can have 10 levels of IF commands under a SELECT. 



MORE TO COME

 qingzhou 回复于:2004-03-17 15:40:16
早听说IBM要推出V5R3版本了,一直没机会拜读。
谢谢先~~~
正在阅读中。。。

 michael9406 回复于:2004-03-17 22:26:28
是啊,看到国内IBMER的说法是错误的。

 居士 回复于:2004-03-18 09:06:15
期待V5R3系统光盘尽快搞到,好一睹芳容……

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网