วันอาทิตย์ที่ 9 กุมภาพันธ์ พ.ศ. 2557

Tips เพิ่มความเร็วใน Code-1

คำเตือน - Tips บางเรื่อง  เหมาะกับบางเหตุการณ์ น๊ะครับ
ผมพยายามจะ  บอกว่า  มัน "น่าทำ" ใน เหตุการณ์ไหน ? 
ดังนั้น  อย่าท่อง  "แบบย่อ"    ถ้าใช้ผิดเรื่อง อาจทำให้  งาน "ช้าลง" ได้ครับ

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'         



ไม่มีความคิดเห็น:

แสดงความคิดเห็น