การใช้งาน Return Value จาก Function ในภาษา COBOL ด้วยความเข้าใจที่ง่ายดาย
ในโลกของการเขียนโปรแกรม ภาษา COBOL เป็นหนึ่งในภาษาการเขียนโปรแกรมที่มีประวัติศาสตร์ยาวนานและยังคงถูกใช้งานในภาคธุรกิจเฉพาะทาง เช่น ธนาคาร ประกันภัย และการจัดการระบบมาสเตอร์ไฟล์ ความสามารถในการส่งค่ากลับ (return value) จาก function หรือใน COBOL ที่เรียกว่า subroutine หรือ subprogram เป็นเทคนิคพื้นฐานที่จำเป็นสำหรับโปรแกรมเมอร์ทุกระดับที่ต้องการเข้าใจการแบ่งโค้ดออกเป็นส่วนๆ แบบมีประสิทธิภาพ
การส่งค่ากลับจาก subroutine ใน COBOL แตกต่างจากภาษาโปรแกรมสมัยใหม่หลายๆ ภาษา ซึ่งมีการใช้คำสั่ง `return` เพื่อส่งค่ากลับไปยังโปรแกรมหลัก ใน COBOL สามารถทำได้โดยมีการกำหนดพื้นที่ในหน่วยความจำ (memory area) ที่โปรแกรมหลักและ subroutine ใช้ร่วมกัน เมื่อ subroutine ทำงานเสร็จแล้ว จะเขียนค่าลงในพื้นที่นั้นและคืนการควบคุมให้โปรแกรมหลัก ซึ่งจะอ่านค่าจากพื้นที่ดังกล่าวเพื่อทำงานต่อไป
มารู้จักกับการส่งค่ากลับจาก subroutine กันให้มากขึ้นด้วยตัวอย่าง CODE เหล่านี้:
ตัวอย่างที่ 1: การคำนวณพื้นที่ของวงกลม
สมมติว่าเรามีโปรแกรมหลักที่ต้องการคำนวณพื้นที่ของวงกลม โดยรับรัศมีจากผู้ใช้:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROGRAM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RADIUS PIC 9(4)V99.
01 AREA PIC 9(5)V99.
PROCEDURE DIVISION.
ACCEPT RADIUS
CALL 'CALCAREA' USING RADIUS AREA
DISPLAY "THE AREA OF CIRCLE IS: " AREA
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCAREA.
DATA DIVISION.
LINKAGE SECTION.
01 RADIUS PIC 9(4)V99.
01 AREA PIC 9(5)V99.
PROCEDURE DIVISION USING RADIUS AREA.
COMPUTE AREA = 3.141592 * RADIUS ** 2
GOBACK.
ในตัวอย่างนี้เราได้สร้างโปรแกรมย่อย `CALCAREA` ซึ่งจะคำนวณพื้นที่วงกลม (πr²) แล้วส่งผลลัพธ์กลับไปยังโปรแกรมหลักผ่านการใช้พื้นที่ `AREA`.
ตัวอย่างที่ 2: การหาค่าสูงสุดในแถวของตัวเลข
โปรแกรมหลักจะส่งแถวของตัวเลขไปยัง subroutine ที่จะหาค่าสูงสุดในแถวนั้น:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROGRAM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBER-LIST.
05 NUM1 PIC 9(4)V99 VALUE 34.78.
05 NUM2 PIC 9(4)V99 VALUE 102.45.
05 NUM3 PIC 9(4)V99 VALUE 56.12.
01 MAX-NUM PIC 9(4)V99.
PROCEDURE DIVISION.
CALL 'FINDMAX' USING NUMBER-LIST MAX-NUM
DISPLAY "THE MAXIMUM NUMBER IS: " MAX-NUM
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. FINDMAX.
DATA DIVISION.
LINKAGE SECTION.
01 NUMBER-LIST.
05 NUM1 PIC 9(4)V99.
05 NUM2 PIC 9(4)V99.
05 NUM3 PIC 9(4)V99.
01 MAX-NUM PIC 9(4)V99.
PROCEDURE DIVISION USING NUMBER-LIST MAX-NUM.
IF NUM1 > NUM2 THEN
MOVE NUM1 TO MAX-NUM
ELSE
MOVE NUM2 TO MAX-NUM
END-IF
IF NUM3 > MAX-NUM THEN
MOVE NUM3 TO MAX-NUM
END-IF
GOBACK.
ในตัวอย่างนี้ เรามี subroutine ชื่อ `FINDMAX` ที่หาค่าสูงสุดจากกลุ่มตัวเลขที่ถูกส่งมา และคืนค่าสูงสุดกลับไปยังพื้นที่ `MAX-NUM`.
ตัวอย่างที่ 3: การแปลงอุณหภูมิจากองศาเซลเซียสเป็นฟาเรนไฮต์
โปรแกรมหลักจะส่งอุณหภูมิเซลเซียสไปยัง subroutine เพื่อแปลงเป็นอุณหภูมิฟาเรนไฮต์:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROGRAM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEMP-C PIC S9(3)V99.
01 TEMP-F PIC S9(3)V99.
PROCEDURE DIVISION.
ACCEPT TEMP-C
CALL 'CONVERTTEMP' USING TEMP-C TEMP-F
DISPLAY "TEMPERATURE IN FAHRENHEIT: " TEMP-F
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. CONVERTTEMP.
DATA DIVISION.
LINKAGE SECTION.
01 TEMP-C PIC S9(3)V99.
01 TEMP-F PIC S9(3)V99.
PROCEDURE DIVISION USING TEMP-C TEMP-F.
COMPUTE TEMP-F = (TEMP-C * 1.8) + 32
GOBACK.
ในตัวอย่างนี้ ตัวแปร `TEMP-C` และ `TEMP-F` ถูกใช้ในการสื่อสารระหว่างโปรแกรมหลักและ subroutine `CONVERTTEMP` เพื่อแปลงอุณหภูมิจากเซลเซียสเป็นฟาเรนไฮต์.
สำหรับระบบธนาคารโบราณ ซึ่งการคำนวณดอกเบี้ย, การพิมพ์รายงานบัญชี, หรือการตรวจสอบยอดเงินคงเหลือ อาจถูกแบ่งออกเป็น subroutines ที่แยกจากกัน เพื่อช่วยให้การเขียนโค้ดเป็นระเบียบและง่ายต่อการบำรุงรักษามากยิ่งขึ้น
เห็นได้ชัดว่าการมี subroutine คอยจัดการกับฟังก์ชันที่ซับซ้อนทำให้โค้ดมีความสะอาดและโปรแกรมมีความยืดหยุ่นในการใช้งาน การทำงานร่วมกันของโปรแกรมหลักและ subroutine ในตัวอย่างข้างต้นเป็นหนทางหนึ่งที่ทำให้เห็นถึงประโยชน์ของการ modularize โปรแกรมให้เข้าใจง่ายและสามารถ reuse ได้ในสิ่งอื่นๆ
หากคุณเป็นผู้ที่มีความสนใจในการออกแบบและพัฒนาโปรแกรมด้วย COBOL หรือโปรแกรมภาษาอื่นๆ ทาง EPT พร้อมที่จะเป็นผู้นำทางสู่การเข้าใจภาษาโปรแกรมและแนวคิดการเขียนโค้ดที่มีคุณภาพ เรียนรู้จากพื้นฐานจนถึงภาษาโปรแกรมสู่การประยุกต์ในโลกจริงไปกับเราที่ EPT ซึ่งการเรียนการสอนของเราไม่เพียงแต่ให้ความรู้เท่านั้น แต่ยังช่วยคุณเข้าใจปัญหาและหาวิธีการแก้ไขได้อย่างมืออาชีพ.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM