Welcome to the L3 Harris Geospatial documentation center. Here you will find reference guides and help documents.
﻿ >  Docs Center  >  Using IDL  >  Compound Statements ### Compound Statements

Compound Statements

Many of the language constructs that we will discuss in this chapter evaluate an expression, then perform an action based on whether the expression is true or false, such as with the IF statement:

`IF expression THEN statement`

For example, we would say “If X equals 1, then set Y equal to 2” as follows:

`IF (X EQ 1) THEN Y = 2`

But what if we want to do more than one thing if X equals 1? For example, “If X equals 1, set Y equal to 2 and print the value of Y.” If we wrote it as follows, then the PRINT statement would always be executed, not just when X equals 1:

`IF (X EQ 1) THEN Y = 2 `
`PRINT, Y`

IDL provides a container into which you can put multiple statements that are the subject of a conditional or repetitive statement. This container is called a BEGIN...END block, or compoundstatement. A compound statement is treated as a single statement and can be used anywhere a single statement can appear.

## BEGIN...END

The BEGIN...END statement is used to create a block of statements, which is a group of statements that are treated as a single statement. Blocks are necessary when more than one statement is the subject of a conditional or repetitive statement.

For example, the above code could be written as follows:

`IF (X EQ 1) THEN BEGIN`
`   Y = 2`
`   PRINT, Y`
`END`

All the statements between the BEGIN and the END are the subject of the IF statement. The group of statements is executed as a single statement. Syntactically, a block of statements is composed of one or more statements of any type, started by BEGIN and ended by an END identifier. To be syntactically correct, we should have ended our block with ENDIF rather than just END:

`IF (X EQ 1) THEN BEGIN`
`   Y = 2`
`   PRINT, Y`
`ENDIF`

This is to ensure proper nesting of blocks. The END identifier used to terminate the block should correspond to the type of statement in which BEGIN is used. The following table lists the correct END identifiers to use with each type of statement.

 Statement ENDIdentifier Example ELSE BEGIN ENDELSE `IF (0) THEN A=1 ELSE BEGIN` `   A=2` `ENDELSE` FOR variable=init, limit DO BEGIN ENDFOR `FOR i=1,5 DO BEGIN` `   PRINT, array[i]` `ENDFOR` IF expression THEN BEGIN ENDIF `IF (0) THEN BEGIN` `   A=1` `ENDIF` REPEAT BEGIN ENDREP `REPEAT BEGIN` `   A = A * 2` `ENDREP UNTIL A GT B` WHILE expression DO BEGIN ENDWHILE `WHILE ~ EOF(1) DO BEGIN` `   READF, 1, A, B, C` `ENDWHILE` LABEL: BEGIN END `LABEL1: BEGIN` `   PRINT, A` `END` case_expression: BEGIN END `CASE name OF` `'Moe': BEGIN` `         PRINT, 'Stooge'` `       END` `ENDCASE` switch_expression: BEGIN END `SWITCH name OF` `'Moe': BEGIN` `         PRINT, 'Stooge'` `       END` `ENDSWITCH`

Note: CASE and SWITCH also have their own END identifiers. CASE should always be ended with ENDCASE, and SWITCH should always be ended with ENDSWITCH.

The IDL compiler checks the end of each block, comparing it with the type of the enclosing statement. Any block can be terminated by the generic END, but no type checking is performed. Using the correct type of END identifier for each block makes it easier to find blocks that you have not properly terminated.

Listings produced by the IDL compiler indent each block four spaces to the right of the previous level to make the program structure easier to read. (See .RUN for details on producing program listings with the IDL compiler.)

© 2020 Harris Geospatial Solutions, Inc. |  Legal