ผมพยายามจะ บอกว่า มัน "น่าทำ" ใน เหตุการณ์ไหน ?
ดังนั้น อย่าท่อง "แบบย่อ" ถ้าใช้ผิดเรื่อง อาจทำให้ งาน "ช้าลง" ได้ครับ
A. ลด Condition
ที่มา การทำงานแบบ Cond จะต้องใช้ "CPU มาก" (คนอ่าน Code ก็อ่านยาก)
การเขียน RPG ทั่วไปจะเขียนสั้น ไม่ใช่ Structure ทำให้ต้องแยกเป็นชิ้น
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+.
C W1SEL COMP 'A' 31 ADD
C W1SEL COMP 'C' 32 CHG
C W1SEL COMP 'D' 33 DEL
*...
C KG122 CHAINPG010L2 80
C 31 *IN80 CABEQ'0' 41 ERR
C N31 *IN80 CABEQ'1' 42 ERR
ตย. ข้างต้น ในทุกรอบ จะต้องผ่าน 5 Condition
เมื่อเปลี่ยนมาแบบนี้ จะทำงานเร็วกว่า (ผ่าน 2 - 4 Condition)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+.
C KG122 CHAINPG010L2 80
C SELEC
C W1SEL WHEQ 'A'
C *IN80 CABEQ'0' 41 ERR
C W1SEL WHEQ 'C'
C *IN80 CABEQ'1' 42 ERR
C W1SEL WHEQ 'D'
C *IN80 CABEQ'1' 42 ERR
C ENDSL
B. อ่านได้เร็ว และ เข้าใจง่ายขึ้น
แทนที่ การกำหนดค่ายาวๆ ด้วย Constance
ในภาษาใหม่ เรามักกำหนด constance ไว้ด้านบน (ทุกคนจะเห็นผ่านตา ก่อนทำงาน)
แต่ใน RPG การกำหนดค่าที่ยาวๆ มักจะใช้ Array ซึ่งต้องประกาศไว้ "ท้าย" โปรแกรม
โดย กำหนดตัวแปร Constance ใน I-Spec (ต้องประกาศไว้ด้านบน)
ตย. ต้องการ ตรวจว่า มีอักษรไหน ไม่ใช่ ตัวเลข ใน String หรือไม่ ? เริ่มตรวจที่ตำแหน่งที่ 3
... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6
I* field Data for CHECK
I DS
I '0123456789' C DIGITS
... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6
C* -----CHECK *all is DIGITS
C MOVE 'xx123z5' STRING 7
C DIGITS CHECKSTRING:3 RESULT 30 80
C* ==> result = 6 found *in80='1'
แทนที่ การกำหนดค่ายาวๆ ด้วย Constance
ในภาษาใหม่ เรามักกำหนด constance ไว้ด้านบน (ทุกคนจะเห็นผ่านตา ก่อนทำงาน)
แต่ใน RPG การกำหนดค่าที่ยาวๆ มักจะใช้ Array ซึ่งต้องประกาศไว้ "ท้าย" โปรแกรม
โดย กำหนดตัวแปร Constance ใน I-Spec (ต้องประกาศไว้ด้านบน)
ตย. ต้องการ ตรวจว่า มีอักษรไหน ไม่ใช่ ตัวเลข ใน String หรือไม่ ? เริ่มตรวจที่ตำแหน่งที่ 3
... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6
I* field Data for CHECK
I DS
I '0123456789' C DIGITS
... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6
C* -----CHECK *all is DIGITS
C MOVE 'xx123z5' STRING 7
C DIGITS CHECKSTRING:3 RESULT 30 80
C* ==> result = 6 found *in80='1'
ไม่มีความคิดเห็น:
แสดงความคิดเห็น