MainframeMaster

COBOL Tutorial

COBOL IS Keyword

The IS keyword represents a fundamental readability enhancement and syntactic component within COBOL conditional expressions, serving as an optional but highly recommended element that improves code clarity and standardization across comparison operations, class test conditions, and logical evaluations. This keyword embodies COBOL's commitment to English-like syntax by providing natural language flow in conditional statements, enabling more intuitive code construction, enhancing maintainability through improved readability, and supporting comprehensive data validation patterns while maintaining compatibility with legacy systems and ensuring consistent coding standards across enterprise applications requiring robust conditional logic and sophisticated data validation mechanisms.

IS Keyword Syntax

Conditional Expression Patterns
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
*> Basic comparison syntax IF field-name IS [NOT] comparison-operator value IF field-name IS [NOT] condition-name *> Class test conditions IF field-name IS [NOT] NUMERIC IF field-name IS [NOT] ALPHABETIC IF field-name IS [NOT] ALPHABETIC-LOWER IF field-name IS [NOT] ALPHABETIC-UPPER IF field-name IS [NOT] ALPHANUMERIC *> Comparison operators with IS IF field-name IS EQUAL TO value IF field-name IS GREATER THAN value IF field-name IS LESS THAN value IF field-name IS GREATER THAN OR EQUAL TO value IF field-name IS LESS THAN OR EQUAL TO value *> Special conditions IF field-name IS ZERO IF field-name IS POSITIVE IF field-name IS NEGATIVE IF field-name IS SPACES *> Examples without and with IS (both valid) IF WS-AMOUNT GREATER THAN 1000 *> Without IS IF WS-AMOUNT IS GREATER THAN 1000 *> With IS (preferred) IF WS-NAME ALPHABETIC *> Without IS IF WS-NAME IS ALPHABETIC *> With IS (preferred) IF WS-CODE = "A" *> Without IS IF WS-CODE IS EQUAL TO "A" *> With IS (more readable)
Conditional Logic
Readability
Data Validation

Comprehensive IS Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
IDENTIFICATION DIVISION. PROGRAM-ID. IS-KEYWORD-DEMONSTRATION. DATA DIVISION. WORKING-STORAGE SECTION. *> Test data for IS keyword demonstrations 01 WS-TEST-DATA. 05 WS-EMPLOYEE-ID PIC 9(6). 05 WS-EMPLOYEE-NAME PIC X(30). 05 WS-SALARY PIC 9(7)V99. 05 WS-HIRE-DATE PIC 9(8). 05 WS-DEPARTMENT-CODE PIC X(3). 05 WS-STATUS PIC X(10). 05 WS-GRADE PIC X(1). 05 WS-PHONE-NUMBER PIC X(12). 05 WS-EMAIL PIC X(50). 01 WS-VALIDATION-FLAGS. 05 WS-ID-VALID PIC X VALUE 'N'. 05 WS-NAME-VALID PIC X VALUE 'N'. 05 WS-SALARY-VALID PIC X VALUE 'N'. 05 WS-DATE-VALID PIC X VALUE 'N'. 05 WS-EMAIL-VALID PIC X VALUE 'N'. 01 WS-COUNTERS. 05 WS-VALIDATION-COUNT PIC 9(3) VALUE 0. 05 WS-ERROR-COUNT PIC 9(3) VALUE 0. 05 WS-WARNING-COUNT PIC 9(3) VALUE 0. 01 WS-CONSTANTS. 05 WS-MIN-SALARY PIC 9(7)V99 VALUE 30000.00. 05 WS-MAX-SALARY PIC 9(7)V99 VALUE 200000.00. 05 WS-CURRENT-YEAR PIC 9(4) VALUE 2024. 01 WS-WORK-FIELDS. 05 WS-YEAR PIC 9(4). 05 WS-TEMP-FIELD PIC X(50). 05 WS-POSITION PIC 9(2). 05 WS-LENGTH PIC 9(2). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-TEST-DATA PERFORM DEMONSTRATE-BASIC-IS-CONDITIONS PERFORM DEMONSTRATE-CLASS-TESTS PERFORM DEMONSTRATE-COMPARISON-OPERATORS PERFORM DEMONSTRATE-COMPOUND-CONDITIONS PERFORM DEMONSTRATE-DATA-VALIDATION PERFORM DEMONSTRATE-BUSINESS-RULES PERFORM DISPLAY-VALIDATION-SUMMARY STOP RUN. INITIALIZE-TEST-DATA. DISPLAY "=== INITIALIZING TEST DATA ===" MOVE 123456 TO WS-EMPLOYEE-ID MOVE "JOHN SMITH" TO WS-EMPLOYEE-NAME MOVE 75000.00 TO WS-SALARY MOVE 20220315 TO WS-HIRE-DATE MOVE "IT" TO WS-DEPARTMENT-CODE MOVE "ACTIVE" TO WS-STATUS MOVE "A" TO WS-GRADE MOVE "555-123-4567" TO WS-PHONE-NUMBER MOVE "john.smith@company.com" TO WS-EMAIL DISPLAY "Test data initialized successfully" DISPLAY SPACES. DEMONSTRATE-BASIC-IS-CONDITIONS. DISPLAY "=== BASIC IS CONDITIONS ===" *> Test employee ID validity IF WS-EMPLOYEE-ID IS NUMERIC DISPLAY "Employee ID is numeric: " WS-EMPLOYEE-ID ADD 1 TO WS-VALIDATION-COUNT ELSE DISPLAY "ERROR: Employee ID is not numeric" ADD 1 TO WS-ERROR-COUNT END-IF *> Test employee name format IF WS-EMPLOYEE-NAME IS ALPHABETIC OR WS-EMPLOYEE-NAME IS SPACES DISPLAY "Employee name format is valid: " WS-EMPLOYEE-NAME ADD 1 TO WS-VALIDATION-COUNT ELSE DISPLAY "WARNING: Employee name contains non-alphabetic characters" ADD 1 TO WS-WARNING-COUNT END-IF *> Test department code IF WS-DEPARTMENT-CODE IS ALPHABETIC-UPPER DISPLAY "Department code format is valid: " WS-DEPARTMENT-CODE ADD 1 TO WS-VALIDATION-COUNT ELSE DISPLAY "WARNING: Department code should be uppercase letters" ADD 1 TO WS-WARNING-COUNT END-IF *> Test status field IF WS-STATUS IS NOT SPACES DISPLAY "Status field is populated: " WS-STATUS ADD 1 TO WS-VALIDATION-COUNT ELSE DISPLAY "ERROR: Status field is empty" ADD 1 TO WS-ERROR-COUNT END-IF DISPLAY SPACES. DEMONSTRATE-CLASS-TESTS. DISPLAY "=== CLASS TEST CONDITIONS ===" *> Test various class conditions IF WS-EMPLOYEE-ID IS NUMERIC DISPLAY "✓ Employee ID passes numeric test" IF WS-EMPLOYEE-ID IS POSITIVE DISPLAY "✓ Employee ID is positive" ELSE DISPLAY "✗ Employee ID is not positive" END-IF IF WS-EMPLOYEE-ID IS NOT ZERO DISPLAY "✓ Employee ID is not zero" ELSE DISPLAY "✗ Employee ID is zero" END-IF END-IF *> Test alphabetic conditions IF WS-EMPLOYEE-NAME IS ALPHABETIC DISPLAY "✓ Employee name is purely alphabetic" ELSE IF WS-EMPLOYEE-NAME IS ALPHANUMERIC DISPLAY "✓ Employee name is alphanumeric (may contain spaces)" ELSE DISPLAY "✗ Employee name contains invalid characters" END-IF END-IF *> Test phone number format IF WS-PHONE-NUMBER IS NUMERIC DISPLAY "✓ Phone number is purely numeric" ELSE IF WS-PHONE-NUMBER IS ALPHANUMERIC DISPLAY "✓ Phone number is alphanumeric (formatted)" ELSE DISPLAY "✗ Phone number format is invalid" END-IF END-IF *> Test grade field IF WS-GRADE IS ALPHABETIC-UPPER DISPLAY "✓ Grade is uppercase letter: " WS-GRADE ELSE IF WS-GRADE IS ALPHABETIC-LOWER DISPLAY "WARNING: Grade should be uppercase: " WS-GRADE ELSE DISPLAY "✗ Grade is not alphabetic: " WS-GRADE END-IF END-IF DISPLAY SPACES. DEMONSTRATE-COMPARISON-OPERATORS. DISPLAY "=== COMPARISON OPERATORS WITH IS ===" *> Salary range validation IF WS-SALARY IS GREATER THAN WS-MIN-SALARY DISPLAY "✓ Salary meets minimum requirement: $" WS-SALARY IF WS-SALARY IS LESS THAN OR EQUAL TO WS-MAX-SALARY DISPLAY "✓ Salary is within maximum limit" MOVE "Y" TO WS-SALARY-VALID ELSE DISPLAY "WARNING: Salary exceeds maximum limit: $" WS-MAX-SALARY ADD 1 TO WS-WARNING-COUNT END-IF ELSE DISPLAY "ERROR: Salary below minimum requirement: $" WS-MIN-SALARY ADD 1 TO WS-ERROR-COUNT END-IF *> Status validation IF WS-STATUS IS EQUAL TO "ACTIVE" DISPLAY "✓ Employee status is ACTIVE" ELSE IF WS-STATUS IS EQUAL TO "INACTIVE" DISPLAY "WARNING: Employee status is INACTIVE" ADD 1 TO WS-WARNING-COUNT ELSE IF WS-STATUS IS EQUAL TO "TERMINATED" DISPLAY "INFO: Employee status is TERMINATED" ELSE DISPLAY "ERROR: Unknown employee status: " WS-STATUS ADD 1 TO WS-ERROR-COUNT END-IF END-IF END-IF *> Department code validation IF WS-DEPARTMENT-CODE IS EQUAL TO "IT" OR WS-DEPARTMENT-CODE IS EQUAL TO "HR" OR WS-DEPARTMENT-CODE IS EQUAL TO "FIN" OR WS-DEPARTMENT-CODE IS EQUAL TO "MKT" DISPLAY "✓ Valid department code: " WS-DEPARTMENT-CODE ELSE DISPLAY "ERROR: Invalid department code: " WS-DEPARTMENT-CODE ADD 1 TO WS-ERROR-COUNT END-IF *> Grade validation IF WS-GRADE IS GREATER THAN OR EQUAL TO "A" AND WS-GRADE IS LESS THAN OR EQUAL TO "E" DISPLAY "✓ Valid performance grade: " WS-GRADE ELSE DISPLAY "ERROR: Invalid performance grade: " WS-GRADE ADD 1 TO WS-ERROR-COUNT END-IF DISPLAY SPACES. DEMONSTRATE-COMPOUND-CONDITIONS. DISPLAY "=== COMPOUND CONDITIONS WITH IS ===" *> Complex employee validation IF WS-EMPLOYEE-ID IS NUMERIC AND WS-EMPLOYEE-ID IS GREATER THAN 100000 AND WS-EMPLOYEE-ID IS LESS THAN 999999 DISPLAY "✓ Employee ID format and range valid" MOVE "Y" TO WS-ID-VALID ELSE DISPLAY "ERROR: Employee ID format or range invalid" ADD 1 TO WS-ERROR-COUNT END-IF *> Salary and grade correlation IF WS-GRADE IS EQUAL TO "A" AND WS-SALARY IS GREATER THAN 70000 DISPLAY "✓ Grade A employee with appropriate salary" ELSE IF WS-GRADE IS EQUAL TO "A" AND WS-SALARY IS LESS THAN OR EQUAL TO 70000 DISPLAY "WARNING: Grade A employee with low salary" ADD 1 TO WS-WARNING-COUNT END-IF END-IF *> Hire date validation MOVE WS-HIRE-DATE(1:4) TO WS-YEAR IF WS-YEAR IS NUMERIC AND WS-YEAR IS GREATER THAN 1990 AND WS-YEAR IS LESS THAN OR EQUAL TO WS-CURRENT-YEAR DISPLAY "✓ Hire date year is valid: " WS-YEAR MOVE "Y" TO WS-DATE-VALID ELSE DISPLAY "ERROR: Invalid hire date year: " WS-YEAR ADD 1 TO WS-ERROR-COUNT END-IF *> Name and email consistency check IF WS-EMPLOYEE-NAME IS NOT SPACES AND WS-EMAIL IS NOT SPACES DISPLAY "✓ Both name and email are provided" MOVE "Y" TO WS-NAME-VALID MOVE "Y" TO WS-EMAIL-VALID ELSE DISPLAY "WARNING: Missing name or email information" ADD 1 TO WS-WARNING-COUNT END-IF DISPLAY SPACES. DEMONSTRATE-DATA-VALIDATION. DISPLAY "=== DATA VALIDATION WITH IS ===" *> Phone number validation PERFORM VALIDATE-PHONE-NUMBER *> Email format validation PERFORM VALIDATE-EMAIL-FORMAT *> Comprehensive record validation PERFORM VALIDATE-COMPLETE-RECORD. VALIDATE-PHONE-NUMBER. DISPLAY "Validating phone number format..." *> Check if phone number has proper length MOVE FUNCTION LENGTH(FUNCTION TRIM(WS-PHONE-NUMBER)) TO WS-LENGTH IF WS-LENGTH IS EQUAL TO 12 DISPLAY "✓ Phone number length is correct" *> Check for dash positions (XXX-XXX-XXXX format) IF WS-PHONE-NUMBER(4:1) IS EQUAL TO "-" AND WS-PHONE-NUMBER(8:1) IS EQUAL TO "-" DISPLAY "✓ Phone number format is correct" ELSE DISPLAY "WARNING: Phone number format should be XXX-XXX-XXXX" ADD 1 TO WS-WARNING-COUNT END-IF ELSE IF WS-LENGTH IS EQUAL TO 10 IF WS-PHONE-NUMBER IS NUMERIC DISPLAY "✓ Phone number is 10-digit numeric" ELSE DISPLAY "ERROR: 10-character phone should be numeric" ADD 1 TO WS-ERROR-COUNT END-IF ELSE DISPLAY "ERROR: Phone number length is invalid: " WS-LENGTH ADD 1 TO WS-ERROR-COUNT END-IF END-IF. VALIDATE-EMAIL-FORMAT. DISPLAY "Validating email format..." *> Check for @ symbol INSPECT WS-EMAIL TALLYING WS-POSITION FOR ALL "@" IF WS-POSITION IS EQUAL TO 1 DISPLAY "✓ Email contains exactly one @ symbol" *> Check for dot after @ UNSTRING WS-EMAIL DELIMITED BY "@" INTO WS-TEMP-FIELD WS-TEMP-FIELD INSPECT WS-TEMP-FIELD TALLYING WS-POSITION FOR ALL "." IF WS-POSITION IS GREATER THAN 0 DISPLAY "✓ Email domain contains dot" ELSE DISPLAY "WARNING: Email domain should contain dot" ADD 1 TO WS-WARNING-COUNT END-IF ELSE IF WS-POSITION IS EQUAL TO 0 DISPLAY "ERROR: Email missing @ symbol" ADD 1 TO WS-ERROR-COUNT ELSE DISPLAY "ERROR: Email contains multiple @ symbols" ADD 1 TO WS-ERROR-COUNT END-IF END-IF. VALIDATE-COMPLETE-RECORD. DISPLAY "Performing complete record validation..." *> Check all validation flags IF WS-ID-VALID IS EQUAL TO "Y" AND WS-NAME-VALID IS EQUAL TO "Y" AND WS-SALARY-VALID IS EQUAL TO "Y" AND WS-DATE-VALID IS EQUAL TO "Y" AND WS-EMAIL-VALID IS EQUAL TO "Y" DISPLAY "✓ Complete employee record is valid" ELSE DISPLAY "WARNING: Employee record has validation issues" IF WS-ID-VALID IS NOT EQUAL TO "Y" DISPLAY " - Employee ID validation failed" END-IF IF WS-NAME-VALID IS NOT EQUAL TO "Y" DISPLAY " - Employee name validation failed" END-IF IF WS-SALARY-VALID IS NOT EQUAL TO "Y" DISPLAY " - Salary validation failed" END-IF IF WS-DATE-VALID IS NOT EQUAL TO "Y" DISPLAY " - Hire date validation failed" END-IF IF WS-EMAIL-VALID IS NOT EQUAL TO "Y" DISPLAY " - Email validation failed" END-IF END-IF. DEMONSTRATE-BUSINESS-RULES. DISPLAY "=== BUSINESS RULE VALIDATION WITH IS ===" *> Promotion eligibility rules PERFORM CHECK-PROMOTION-ELIGIBILITY *> Bonus calculation rules PERFORM CHECK-BONUS-ELIGIBILITY *> Performance review requirements PERFORM CHECK-REVIEW-REQUIREMENTS. CHECK-PROMOTION-ELIGIBILITY. DISPLAY "Checking promotion eligibility..." MOVE WS-HIRE-DATE(1:4) TO WS-YEAR IF WS-CURRENT-YEAR - WS-YEAR IS GREATER THAN OR EQUAL TO 2 AND WS-GRADE IS EQUAL TO "A" OR WS-GRADE IS EQUAL TO "B" AND WS-STATUS IS EQUAL TO "ACTIVE" DISPLAY "✓ Employee is eligible for promotion" ELSE DISPLAY "✗ Employee is not eligible for promotion" IF WS-CURRENT-YEAR - WS-YEAR IS LESS THAN 2 DISPLAY " Reason: Less than 2 years of service" END-IF IF WS-GRADE IS NOT EQUAL TO "A" AND WS-GRADE IS NOT EQUAL TO "B" DISPLAY " Reason: Performance grade below B" END-IF IF WS-STATUS IS NOT EQUAL TO "ACTIVE" DISPLAY " Reason: Employee status is not ACTIVE" END-IF END-IF. CHECK-BONUS-ELIGIBILITY. DISPLAY "Checking bonus eligibility..." IF WS-GRADE IS EQUAL TO "A" AND WS-SALARY IS LESS THAN 100000 DISPLAY "✓ Eligible for performance bonus (Grade A, Salary < $100K)" ELSE IF WS-GRADE IS EQUAL TO "B" AND WS-SALARY IS LESS THAN 80000 DISPLAY "✓ Eligible for standard bonus (Grade B, Salary < $80K)" ELSE DISPLAY "✗ Not eligible for bonus" END-IF END-IF. CHECK-REVIEW-REQUIREMENTS. DISPLAY "Checking performance review requirements..." MOVE WS-HIRE-DATE(1:4) TO WS-YEAR IF WS-CURRENT-YEAR - WS-YEAR IS GREATER THAN OR EQUAL TO 1 AND WS-STATUS IS EQUAL TO "ACTIVE" DISPLAY "✓ Employee requires annual performance review" ELSE IF WS-CURRENT-YEAR - WS-YEAR IS LESS THAN 1 DISPLAY "✗ Employee hired less than 1 year ago" ELSE DISPLAY "✗ Employee status does not require review" END-IF END-IF. DISPLAY-VALIDATION-SUMMARY. DISPLAY "=== VALIDATION SUMMARY ===" DISPLAY "Total validations performed: " WS-VALIDATION-COUNT DISPLAY "Total errors found: " WS-ERROR-COUNT DISPLAY "Total warnings issued: " WS-WARNING-COUNT IF WS-ERROR-COUNT IS EQUAL TO ZERO DISPLAY "✓ No critical errors found" ELSE DISPLAY "✗ Critical errors require attention" END-IF IF WS-WARNING-COUNT IS EQUAL TO ZERO DISPLAY "✓ No warnings issued" ELSE DISPLAY "⚠ Warnings should be reviewed" END-IF. *> Additional IS keyword patterns and advanced usage ADVANCED-IS-PATTERNS. DISPLAY "=== ADVANCED IS PATTERNS ===" PERFORM DEMONSTRATE-SPECIAL-CONDITIONS PERFORM DEMONSTRATE-NESTED-CONDITIONS PERFORM DEMONSTRATE-CONDITION-NAMES. DEMONSTRATE-SPECIAL-CONDITIONS. DISPLAY "Special IS conditions:" 01 WS-TEST-VALUES. 05 WS-ZERO-VALUE PIC 9(5) VALUE 0. 05 WS-POSITIVE-VALUE PIC S9(5) VALUE 12345. 05 WS-NEGATIVE-VALUE PIC S9(5) VALUE -12345. 05 WS-SPACE-VALUE PIC X(10) VALUE SPACES. IF WS-ZERO-VALUE IS ZERO DISPLAY "✓ Value is zero" END-IF IF WS-POSITIVE-VALUE IS POSITIVE DISPLAY "✓ Value is positive" END-IF IF WS-NEGATIVE-VALUE IS NEGATIVE DISPLAY "✓ Value is negative" END-IF IF WS-SPACE-VALUE IS SPACES DISPLAY "✓ Value contains only spaces" END-IF. DEMONSTRATE-NESTED-CONDITIONS. DISPLAY "Nested IS conditions:" IF WS-EMPLOYEE-ID IS NUMERIC IF WS-EMPLOYEE-ID IS GREATER THAN 100000 IF WS-EMPLOYEE-ID IS LESS THAN 200000 DISPLAY "✓ Employee ID is in valid range 100001-199999" ELSE DISPLAY "Employee ID is too high" END-IF ELSE DISPLAY "Employee ID is too low" END-IF ELSE DISPLAY "Employee ID is not numeric" END-IF. DEMONSTRATE-CONDITION-NAMES. 01 WS-STATUS-FLAGS. 05 WS-RECORD-STATUS PIC X. 88 RECORD-IS-VALID VALUE "Y". 88 RECORD-IS-INVALID VALUE "N". 88 RECORD-IS-PENDING VALUE "P". MOVE "Y" TO WS-RECORD-STATUS IF RECORD-IS-VALID DISPLAY "✓ Record status is valid" END-IF *> This is equivalent to using IS with condition names IF WS-RECORD-STATUS IS EQUAL TO "Y" DISPLAY "✓ Status check using IS EQUAL TO" END-IF.

IS Usage Categories

Class Tests
  • • IS NUMERIC
  • • IS ALPHABETIC
  • • IS ALPHABETIC-UPPER
  • • IS ALPHABETIC-LOWER
  • • IS ALPHANUMERIC
Comparison Operations
  • • IS EQUAL TO
  • • IS GREATER THAN
  • • IS LESS THAN
  • • IS GREATER THAN OR EQUAL TO
  • • IS LESS THAN OR EQUAL TO
Special Conditions
  • • IS ZERO
  • • IS POSITIVE
  • • IS NEGATIVE
  • • IS SPACES
  • • IS NOT (negation)
Readability Benefits
  • • Enhanced code clarity
  • • English-like syntax
  • • Standardized formatting
  • • Improved maintainability
  • • Better documentation

Interactive Tutorial

Hands-On Exercise: Data Validation System
Practice using IS keyword for comprehensive data validation

Exercise 1: Customer Data Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(8). 05 CUSTOMER-NAME PIC X(50). 05 PHONE-NUMBER PIC X(12). 05 EMAIL-ADDRESS PIC X(100). 05 CREDIT-SCORE PIC 9(3). 05 ACCOUNT-STATUS PIC X(10). PROCEDURE DIVISION. VALIDATE-CUSTOMER. *> ID validation IF CUSTOMER-ID IS NUMERIC AND CUSTOMER-ID IS GREATER THAN 10000000 DISPLAY "Valid customer ID" ELSE DISPLAY "Invalid customer ID" END-IF *> Name validation IF CUSTOMER-NAME IS NOT SPACES AND CUSTOMER-NAME IS ALPHABETIC DISPLAY "Valid customer name" END-IF *> Credit score validation IF CREDIT-SCORE IS NUMERIC AND CREDIT-SCORE IS GREATER THAN OR EQUAL TO 300 AND CREDIT-SCORE IS LESS THAN OR EQUAL TO 850 DISPLAY "Valid credit score range" END-IF.

Exercise 2: Product Inventory Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
01 PRODUCT-RECORD. 05 PRODUCT-CODE PIC X(10). 05 PRODUCT-NAME PIC X(40). 05 QUANTITY PIC 9(6). 05 UNIT-PRICE PIC 9(6)V99. 05 CATEGORY PIC X(20). PROCEDURE DIVISION. VALIDATE-PRODUCT. *> Product code format IF PRODUCT-CODE IS ALPHANUMERIC AND PRODUCT-CODE IS NOT SPACES DISPLAY "Product code format valid" END-IF *> Quantity validation IF QUANTITY IS NUMERIC AND QUANTITY IS NOT NEGATIVE IF QUANTITY IS ZERO DISPLAY "Warning: Zero inventory" ELSE DISPLAY "Inventory level valid" END-IF END-IF *> Price validation IF UNIT-PRICE IS NUMERIC AND UNIT-PRICE IS POSITIVE DISPLAY "Unit price is valid" END-IF.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Purpose

What is the main purpose of the IS keyword in COBOL?

Answer: The IS keyword improves code readability by making conditional expressions more English-like. While optional in most cases, it makes conditions clearer and follows COBOL's philosophy of readable, business-oriented syntax.

Question 2: Class Tests

How do you test if a field contains only numeric data?

Answer: Use "IF field-name IS NUMERIC" to test if a field contains only numeric characters (0-9). This is essential for data validation before performing arithmetic operations.

Question 3: Negation

How do you create negative conditions with IS?

Answer: Use "IS NOT" to create negative conditions, such as "IF field IS NOT ZERO" or "IF field IS NOT SPACES". This provides clear, readable negative logic.