Showing posts with label เขียนโปรแกรม. Show all posts
Showing posts with label เขียนโปรแกรม. Show all posts

Saturday, July 18, 2015

       การเขียนโปรแกรมคอมพิวเตอร์ให้ทำงาน เพื่อแก้ปัญหา หรือสนองความต้องการของเรานั้น ผู้เขียนต้องรู้ว่าจะให้โปรแกรมทำงานอะไร มีข้อมูลอะไรที่ต้องป้อนให้กับโปรแกรม(Input) และต้องการได้อะไรเป็นผลลัพธ์ (Output) มีการแสดงผลอย่างไร ผู้เขียนโปรแกรมต้องทราบขั้นตอนวิธีการของการแก้ปัญหาของโปรแกรมด้วยว่าต้อง ทำอย่างไร อาจเขียนเป็นลำดับขั้นตอนมาก่อนและจดบันทึกไว้ จากนั้นจึงนำลำดับขั้นตอนนั้นมาพัฒนาเป็นโปรแกรม หากไม่ได้มีการวางแผนการเขียนโปรแกรมไว้ก่อน เมื่อต้องการแก้ไข หรือปรับปรุงโปรแกรมในภายหลังจะทำได้ยาก เสียเวลามากในการมาศึกษาทุกขั้นตอน โดยเฉพาะโปรแกรมที่มีความซับซ้อนมาก โดยทั่วไปขั้นตอนการพัฒนาโปรแกรมจะประกอบด้วย

  1. การกำหนดและวิเคราะห์ปัญหา (problem definition and problem analysis)
  2. เขียนผังงานและซูโดโค้ด (pseudo coding)
  3. เขียนโปรแกรม (programming)
  4. ทดสอบและแก้ไขโปรแกรม (program testing and debugging)
  5. ทำเอกสารและบำรุงรักษา (program documentation and maintenance)
     1. การกำหนดและวิเคราะห์ปัญหา (problem definition and problem analysis)
เป็นขั้นตอนที่จะต้องกำหนดแนวทางในการแก้ปัญหาให้เหมาะสมกับคอมพิวเตอร์ เพื่อให้การทำงานเป็นไปอย่างมีประสิทธิภาพ โดยต้องทำความเข้าใจกับปัญหาที่ต้องการแก้ไขให้ได้ มีขั้นตอนการดำเนินการย่อย ๆ ดังต่อไปนี้

       1.1) กำหนดขอบเขตของปัญหา โดยกำหนดรายละเอียดให้ชัดเจนว่าจะให้คอมพิวเตอร์ทำอะไร ตัวแปร ค่าคงที่ต้องเป็นไปในลักษณะใด

       1.2) กำหนดลักษณะของข้อมูลเข้าและออกจากระบบ (Input/Output specification) โดยต้องรู้ว่าข้อมูลที่ส่งไปเป็นอย่างไร มีอะไรบ้าง เพื่อทำให้โปรแกรมประมวลผลและแสดงผลลัพธ์ เช่น การรับค่าจากคีย์บอร์ด การใช้เมาส์ การกำหนดปุ่มต่าง ๆ ลักษณะการแสดงผลหน้าจอว่าจะให้มีรูปร่างอย่างไร โดยขึ้นอยู่กับผู้ใช้งานโปรแกรมเป็นหลัก เช่น ข้อมูลประเภท ตัวเลข ตัวอักษร ข้อความ ใช้ทศนิยมกี่ตำแหน่ง

       1.3) กำหนดวิธีการประมวลผล (process specification) ต้องรู้ว่าจะให้คอมพิวเตอร์ประมวลผลอย่างไร จึงจะได้ผลลัพธ์ตามที่ต้องการ

     2. เขียนผังงานและซูโดโค้ด (pseudo coding) หลังจากที่ได้วิเคราะห์ปัญหาแล้ว ขั้นตอนต่อไปเป็นการนำเครื่องมือมาช่วยในการออกแบบโปรแกรม ซึ่งยังไม่ใช่การเขียนโปรแกรมจริง ๆ แต่ช่วยในการเขียนโปรแกรม ทำให้ผู้อื่นนำโปรแกรมของเราไปพัฒนาต่อได้ง่ายขึ้น โดยเขียนเป็นลำดับขั้นตอนการทำงานของโปรแกรมที่เรียกว่าอัลกอริทึม (algorithm) ซึ่งจะแสดงขั้นตอนการแก้ปัญหา ใช้ประโยคที่ชัดเจนไม่คลุมเครือ และมีรายละเอียดการทำงานที่เพียงพอที่จะนำมาเขียนโปรแกรมให้ทำงานจริง อาจเขียนในรูปของรหัสจำลอง หรือซูโดโค้ด (pseudo code) หรืออีกลักษณะหนึ่งคือเขียนในรูปของผังงาน (Flowchart) ซึ่งความแตกต่างอยู่ที่ ซูโดโค้ดเขียนคำอธิบายการทำงานของโปรแกรมเป็นแบบย่อ ไม่มีรูปแบบเฉพาะตัว แต่ละส่วนจะเป็นแนวทางในการเขียนโปรแกรม ซึ่งนำไปใช้กับทุก ๆ โปรแกรมได้ง่ายขึ้น ส่วนผังงานเป็นสัญลักษณ์แทนการทำงานและทิศทางของโปรแกรม

สัญลักษณ์ คำอธิบาย
กระบวนการ การคำนวณ
กระบวนการที่นิยามไว้ การทำงานย่อย
ข้อมูล รับ หรือ แสดงข้อมูลโดยไม่ระบุชนิดของอุปกรณ์
การตัดสินใจ การเปรียบเทียบ
การเตรียมการ การกำหนดค่าล่วงหน้า หรือ กำหนดค่าเป็นชุดตัวเลข
ป้อนข้อมูลด้วยตนเอง การรับข้อมูลเข้าทางแป้นพิมพ์
ขั้นตอนที่ทำด้วยตนเอง การควบคุมโปรแกรมทางแป้นพิมพ์
เอกสาร/แสดงผล การแสดงผลทางเครื่องพิมพ์
เอกสารแสดงผลหลายฉบับ
จอภาพแสดงผล
การ์ด หรือบัตรเจาะรู ใช้ใส่ข้อมูล
เทป (สื่อบันทึกข้อมูล)
เริ่มต้น/สิ้นสุด การเริ่มต้น หรือการลงท้าย
จุดเชื่อมต่อในหน้าเดียวกัน
ตัวเชื่อมต่อไปหน้าอื่น
จุดร่วมการเชื่อมต่อ
หรือ
ตรวจเทียบ
หน่วงเวลา
ที่เก็บแบบเข้าถึงโดยเรียงลำดับ
ดิสก์แม่เหล็ก
 เส้นแสดงลำดับกิจกรรม

    3. เขียนโปรแกรม (programming) เป็นขั้นตอนการเปลี่ยนคำอธิบายโปรแกรม หรือผังงานให้อยู่ในรูปของรหัสภาษาคอมพิวเตอร์ ซึ่งผู้เขียนโปรแกรมต้องทำความเข้าใจกับไวยากรณ์ของแต่ละภาษา และความถนัดของผู้เขียนโปรแกรมด้วย

     4. ทดสอบและแก้ไขโปรแกรม (program testing and debugging) เพื่อให้การนำโปรแกรมไปใช้มีความถูกต้อง แก้ปัญหาได้ตรงจุด ผู้เขียนโปรแกรมจึงต้องทดสอบความถูกต้องของโปรแกรมที่เขียนขึ้น เพื่อหาจุดผิดพลาด อาจจะให้บุคคลอื่นลองใช้โปรแกรมด้วย และแก้ไข ทดสอบจนไม่พบจุดผิดพลาดอีก จุดผิดพลาดของโปรแกรมเรียกว่า Bug และการแก้ไขโปรแกรมเรียกว่า Debug ซึ่งข้อผิดพลาดของโปรแกรมมี 2 ประเภท ดังนี้

     4.1) การเขียนคำสั่งไม่ถูกต้องตามหลักการเขียนโปรแกรมภาษาที่เลือก ซึ่งเรียกว่า Syntax Error หรือ Coding error ข้อผิดพลาดแบบนี้มักพบตอนแปลภาษาโปรแกรม เป็นรหัสภาษาเครื่อง

     4.2) ข้อผิดพลาดทางตรรกะ หรือ Logic error เป็นข้อผิดพลาดที่โปรแกรมทำงานได้ แต่ผลลัพธ์ออกมาไม่ถูกต้อง ซึ่งอาจเกิดขึ้นจากขั้นตอนการแก้ปัญหา หรือหาคำตอบที่ออกแบบขึ้น เช่น ต้องการผลลัพธ์อย่างหนึ่ง แต่สิ่งที่คำนวณหรือประมวลผลได้เป็นอีกแบบหนึ่ง


     5. ทำเอกสารและบำรุงรักษา (program documentation and maintenance) เป็นการให้ผู้ใช้งานโปรแกรมใช้งานได้อย่างมีประสิทธิภาพ และสะดวกในการตรวจสอบข้อผิดพลาดโดยเขียนเป็นเอกสารประกอบโปรแกรมขึ้นมา แบ่งออกเป็น 2 ประเภท คือ

       5.1) คู่มือการใช้ (User Document) หรือ user guide ซึ่งจะอธิบายการใช้โปรแกรม

       5.2) คู่มือโปรแกรมเมอร์ หรือ Program document หรือ Technical reference ซึง จะอำนวยความสะดวกในการแก้ไขโปรแกรมและพัฒนาโปรแกรมในอนาคต โดยมีรายละเอียดต่าง ๆ เกี่ยวกับโปรแกรม เช่น ชื่อโปรแกรม การรับข้อมูล การพิมพ์ผลลัพธ์ ขั้นตอนต่าง ๆในโปรแกรม เป็นต้น
     ส่วนการบำรุงรักษาโปรแกรม (Maintenance) เป็นการที่ผู้เขียนโปรแกรมจะต้องคอยตรวจสอบการใช้โปรแกรมจริง เพื่อแก้ไขข้อผิดพลาด ซึ่งอาจเกิดขึ้นภายหลัง รวมทั้งการพัฒนาโปรแกรมให้ทันสมัยอยู่เสมอเมื่อเวลาผ่านไป
ตัวแปลภาษา COMPILERS

วัตถุประสงค์
1.    แสดงรูปแบบจำลองของโปรแกรมตัวแปลภาษา  เพื่อใช้ประกอบการศึกษาและวางพื้นฐานการออกแบบ
2.  สร้างความเข้าใจ   เพื่อให้เห็นคุณค่าของการใช้ภาษาคอมพิวเตอร์  และความยากง่ายในการใช้ภาษาอย่างมีประสิทธิภาพ

ดังนั้นจึงแบ่งเนื้อหาออกเป็นดังนี้
    Part  I   แนะนำหลักการทั่วไปและแบบจำลองของโปรแกรมตัวแปลภาษา
    Part  II    แสดงตัวอย่างการออกแบบและการทำงานของโปรแกรมตัวแปลภาษา
    Part  III  การจัดการโครงสร้างข้อมูล,  Recursion,  Storage  Allocation,  Block  Structure,  Conditions  และ  Pointers  ที่นำมาประยุกต์ใช้ในการทำงานกับรูปแบบจำลองตัวแปลภาษา
Computer  Languages


    Structure  of  Computer  Languages
1.    Character  Set
•    Alphabetic  Symbols
•    Special  Characters
2.    Data  Types
•    Constants  or  Literals
•    Numeric
    Fixed-point or Integer  such as Positive, Zero, Negative
    Floating-point or Real  such as Single or Double Precision
    Complex
•    Character  String  such as bits or bytes string manipulation
•    Logical
•    Others  Data  Types
3.    Data  Structures
•    Arrays,  Stacks
•    File  Structures  such as organizing in Sequential, Random, Inverted Files
•    Pointers
•    Procedures  and  Functions
4.    Naming  and  any  Rules
5.    Operators and Internal  Functions
•    Arithmetic  Operators  such as +, -, *, /, DIV, MOD, ^
•    Logical  Operators  such as NOT, AND, OR, XOR
•    String  Operators  such as concatenate, search, extract, replace of string
6.    Structure  of  Statement  Lines  and  Program
7.    Statements  or  Commands  or  Instructions
•    Declarative  Statements
•    Assignment  Statements
•    Control  Statements
•    Conditional  Statements
•    I/O  Statements
•    Debugging or Compiler-directive  Statements
•    Others


Part  I

PL/I   Program
WCM: PPROCEDURE  (RATE,START,FINISH);
              DECLARE  (COST,RATE,START,FINISH)  FIXED  BINARY(31)  STATIC;
             COST  =  RATE * (START – FINISH) + 2 * RATE * (START – FINISH – 100);
             RETURN (COST);
END;

    ตัวแปลภาษาจะต้องทำอย่างไรกับโปรแกรม  WCM  นี้   เพื่อให้ได้มาซึ่งโปรแกรมคำสั่งภาษาเครื่อง

1.    แยกแยะ  กระจาย  String  ให้ได้  Basic  Elements (or  Tokens)
                WCM   --------   Label
                PROCEDURE  --------   Keyword
                 COST  --------  Variable  or  Identifier
                              =       --------  Operator

2.    ตรวจสอบ  จดจำรูปแบบประโยคคำสั่ง  (Syntactic  Construction)   เพื่อหาความหมายของการสั่งงาน (Semantic) 
            คำสั่งแรก        เป็นคำสั่ง  PROCEDURE  พร้อมค่า  Arguments  สามตัว
            คำสั่งที่สอง     เป็นคำสั่งอธิบายตัวแปรพร้อมคุณสมบัติที่จะใช้งาน
           คำสั่งที่สาม      เป็นการกำหนดค่านิพจน์เลขคณิตแก่ตัวแปร  COST
           คำสั่งที่สี่          เป็นการส่งค่าตัวแปรกลับไปยังโปรแกรมที่เรียกใช้
           คำสั่งที่ห้า        แสดงการจบชุดของคำสั่งนี้

3.    กำหนดพื้นที่และตำแหน่งของหน่วยความจำให้แก่ค่าคงที่    ตัวแปรต่างๆ
4.    จัดสร้างชุดคำสั่งภาษาเครื่องที่เหมาะสมถูกต้อง

1.    Recognizing  Basic  Element
Lexical  Analysis  parsing  the  source  program  into  the  proper  syntaxtic  classes (Scan)
วิเคราะห์คำ  โดยการแยกแยะ  String  ออกเป็นคำ ๆ  (Tokens  or  Basic  Elements)  โดยอาศัยตัว  Separators  ซึ่งได้แก่  ช่องว่าง (Blank  or  Spaces)   โอเปอเรเตอร์ (Operators)  สัญลักษณ์พิเศษที่ใช้คั่นวรรคตอน  (Punctuation  Symbols  or  Special  Symbol)    เพื่อแยกประเภทของ  Elements  ดังกล่าว
•    Identifiers
•    Literals
•    Terminal  Symbols  เช่น  Operators,  Keywords,  แล้วจัดสร้างเป็น  Uniform  Symbols  (Token  ที่มีขนาดไม่คงที่จัดการลำบาก   จึงสร้าง  Uniform  Systems  ซึ่งมีขนาดคงที่)

       Lexical  Analysis  :    หมายถึง  1  Token



Uniform  Symbol  =  is  the  same  size

2.    Recognizing  Syntactic  Units  and   Interpreting    Meaning
                        Basic  Syntactic  Constructs     (Token)
                              
WCM    :    PROCEDURE    (    RATE    ,    START    ,    FINISH    )    ;
            Valid   Statement

DECLARE    (    COST    ,    RATE    ,    START    ,    FINISH    )    FIXED    BINARY    (    31    )    STATIC    ;
            Valid   Statement

COST    =    RATE    *    (    START    -    FINISH    )    +     2    *    RATE    *    (    START    -    FINISH    -
                                                        100    )    ;
           Valid   Statement

RETURN    (    COST    )    ;
           Valid   Statement

END    ;
           Valid   Statement

หน้าที่ 
-    ตรวจสอบ  จดจำ  วลีคำสั่ง  Syntactic  Constructs    Syntactic  Phrase
-    แปลความหมายในการสั่งทำงาน  (Interpret  the  Meaning)

วิธีการ
   Semantic    -   Intermediate  Form
                               Reduction  Rules
                               Action  Routines
(ใช้กฎ  Reductions  เพื่อกำหนดรูปแบบประโยคคำสั่ง  ว่าประกอบขึ้นมาด้วย  ดครงสร้างพื้นฐานอะไรบ้าง    แล้วควรจะเรียกใช้รูทีนส่วนไหน  (Action  Routines) ของตัวแปลภาษามาทำงานในการตีความหมายต่อไป)

    Intermediate   Forms

ประโยชน์
       ช่วยในการ  Optimization   และยังทำให้การ  Optimization   แบ่งการทำงานของตัวแปลภาษาออกเป็นการทำงาน   2  ส่วน  คือ  Machine-Independent  (Lexical  Analysis,  Syntax  Analysis,  Interpretation)
   กับ  Machine-dependent (Storage  Allocation,  Code  Generation,  Assembly)
การสร้าง  Intermediate  Forms  ขึ้นอยู่กับโครงสร้างของ  Syntactic  Constructs   สามรถแบ่งได้เป็น  3  ชนิด
     -  Arithmetic   Statements
     -  Non-arithmetic   Statements
     -  Non-Executable   Statements

Arithmetic    Statements
COST    =    RATE    *    (    START    -    FINISH    )    +     2    *    RATE    *    (    START    -    FINISH    -
                                                        100    )    ;


1.  Parse  Tree   เป็นการนำ  Binary  Tree  มาประยุกต์ใช้กับ  Binary  Operator  ( +,  -,  *,  /,  **)
                           โดยให้  Root  Node  เป็น  Operator
                                 Left-son  Node  เป็น  Operand  ตัวแรก
                               Right-son  Node  เป็น  Operand  ตัวที่สอง


2.    Matrix  
                 สำหรับ  Arithmetic   Statements
Index    Operator    Operand-1    Operand-2
M1    -    START    FINISH
M2    *    RATE    M1
M3    *    2    RATE
M4    -    START    FINISH
M5    -    M4    100
M6    *    M3    M5
M7    +    M2    M6
M8    =    COST    M7

สำหรับ  Non-Arithmetic   Statements
         Source  Statement   :    RETURN  (COST);
                                                END;
จะได้  Matrix  ดังนี้
Index    Operator    Operand-1    Operand-2
M1    RETURN    COST   
M2    END       

คำสั่งอื่นๆ   เช่น  คำสั่ง  DO,  IF,   GO  TO    เป็นต้น

สำหรับ  Non-Executable   Statements
    No  Intermediate  Form   but  have   some   table   of   information  about  Identifiers
       เช่น   คำสั่ง  DECLARE   ของภาษา  PL/I
                คำสั่ง   DIMENSION   ของภาษา  FORTRAN,  BASIC


    Storage  Assignment

หน้าที่

Code  Generation
Matrix Line.             Matrix  Entry                     Generated  Codes
                                     L      1,START
1.      -    START    FINISH                S       1,FINISH
              ST    1,M1
              L    1,RATE   
2.      *      RATE        M1                    M    0,M1
              ST    1,M2
              L    1,=F’2’
3.      *    2        RATE                    M    0,RATE
              ST    1,M3
              L    1,START
4.      -    START    FINISH                S    1,FINISH
              ST    1,M4
              L    1,M4
5.      -    M4        100                    S    1,=F’100’
              ST    1,M5
               L    1,M3
6.      *    M3        M5                    M    0,M5
              ST    1,M6
              L    1,M2
7.      +    M2        M6                    A    1,M6
              ST    1,M7
              L    1,M7
8.      =    COST    M7                    ST    1,COST
                                   (Length  =  92   Bytes)

Optimization  (Machine-independent)
    จากตัวอย่างของ Matrix  โปรแกรมชุดคำสั่งของ WCM  ปรากฎว่ามีนิพจน์ย่อย  2  ตัวที่ซ้ำกันคือนิพจน์ย่อย  START  -  FINISH  เนื่องจากนิพจน์ดังกล่าวให้ผลลัพธ์ในการทำงานเหมือนกัน   ดังนั้นจึงสามารถตัดออกจาก  Matrix  ได้   แล้วปรับปรุงการอ้างอิงแทนกันให้ถูกต้องต่อไป   เรียกวิธีการจัดการแบบนี้ว่า  Eliminate  of  Common  Subexpression
Matrix  with  common  subexp.    Matrix  after  eliminate  of  common  subexp.
1.        -       START         FINISH    1.        -       START         FINISH
2.        *       RATE          M1    2.        *       RATE          M1
3.        *         2                 RATE    3.        *         2                 RATE
4.        -       START         FINISH    4.
5.        -        M4               100    5.        -        M1               100
6.        *        M3               M5    6.        *        M3               M5
7.        *        M2               M6    7.        *        M2               M6
8.        =        COST          M7    8.        =        COST          M7

วิธีอื่นๆ  ได้แก่
-    Compile  Time  Computation  of  Operations  both  of  whose  operands  are  constants.
-    Movement  of  computations  involving  nonvarying  operands  out  of  loops.
-    Use  of  the  properties  of  Boolean  expressions  to  minimize  their  computation.                   Etc.
นิยมแยกออกเป็นอีกขั้นตอนการทำงานหนึ่งก่อนที่จะนำ Matrix  ไปดำเนินการในขั้น  Code  Generation  ต่อไป

Optimization  (Machine-dependent)
      พิจารณาจากตัวอย่าง
1.     สามารถลดการใช้  Temporary  Storage  สำหรับจัดเก็บค่าผลลัพธ์ของการคำนวณรายการใน  Matrix  ได้   โดยการไม่พยายามที่จะจัดเก็บผลการคำนวณไว้ในหน่วยความจำ (Store) 
    (คำสั่ง  L  และ  ST  เดิมใช้ถึง  14  คำสั่ง   เมื่อทำการ  Optimize  แล้ว  จะเหลือเพียง  5 
     คำสั่งเท่านั้น)
2.     สามารถใช้คำสั่งที่สั้นลง   แต่ทำงานได้รวดเร็วขึ้นกว่าเดิมอีก
     (เช่น  แทนที่จะใช้คำสั่ง  M  ก็ใช้คำสั่ง  MR  แทนได้)
    นอกจากจะลดพื้นที่ขนาดโปรแกรมแล้ว  ยังช่วยลดเวลาการ  execute  ลงไปอีกด้วยถึงเกือบสองเท่า
    ปกติการ Optimization  มักจะทำควบคู่ไปพร้อมกับการทำ  Code  Generation   นอกจากนั้นแล้วยังน่าที่จะนำเอาเทคนิคของ  Conditional  Macro  Pseudo-ops  มาประยุกต์ผสมใช้ด้วย   จะช่วยทำให้การสร้าง  Code  มีความยืดหยุ่น  มีประสิทธิภาพมากยิ่งขึ้นอีก

Assembly  Phase
ค่าคงที่ (Literals)  และตัวแปรตำแหน่ง (Symbolic  Address) สำหรับผู้อ่านโปรแกรมอาจจะดูเหมือนง่าย     แต่สำหรับตัวแปลภาษาแล้วจะต้องสร้างคำสั่งภาษาเครื่องที่ถูกต้องเสมอ
ตัวแปลภาษาสามารถที่จะใช้วิธีการสร้างค่าคงที่  และ  ตัวแปรต่างๆ  โดยใช้วิธีการอ้างอิงไปยังตำแหน่งที่จัดเก็บค่าคงที่  และ  ตัวแปรดังกล่าวในช่วงของการทำ  Storage  Allocation  ได้    แต่อย่างไรก็ตาม   ตัวแปลภาษาก็ไม่สามารถที่จะกำหนดค่าที่แท้จริงของ  Labels  ได้   จนกว่าจะมีการสร้าง  Code  ทั้งหมกเสร็จเรียบร้อยเสียก่อน
ดังนั้นจริงๆ แล้วการทำงานในขั้น  Code  Generation  จึงต้องทำหน้าที่  2  อย่าง
1.    Generating  Code
2.    Defining  Labels  and  resolving  all  references
เมื่อข้อ 1.  คือการทำ  Code  Generation  Phase  ที่เราได้กล่าวผ่านมาแล้ว   ส่วนข้อ 2. จึงเป็นหน้าที่ของ  Assembly  Phase   ซึ่งในทางปฎิบัติจริงๆ  แล้วก็คือ  Pass  2  ของ  Assembler   นั่นเอง


สรุปการทำงาน  Part  I  ของตัวแปลภาษา
ลักษณะงานและปัญหา (Statement  of  Problem)
1.     การแยกประเภทของข้อความ  คำสั่งต่างๆ
    (Recognizing  Basic  Elements)
    Lexical  Analysis              Terminal  Table

2.     ตรวจสอบความถูกต้องของคำสั่งและความหมาย
    (Recognizing Syntactic  Unit  and  Interpreting  Meaning)
         Syntax  Analysis                   Reductions
                           Semantic                    Action  Routines

3.     รูปแบบตัวกลาง   (Intermediate  Forms)
      Parse  Tree  
            Matrix

4.     กำหนดการจัดเก็บ  (Storage  Allocation)
    Storage  Assignment                  Static,  Dynamic  Allocation

5.     การสร้างรหัสภาษาเครื่อง    (Code  Generation)
    Code  Generation               Code  Production  Table
                                   Optimization 
•    Machine-Independent
•    Machine-Dependent


รูปแบบทั่วไปของตัวแปลภาษา  (General Model of Compilers)

1.     Lexical  Analysis 
recognition  of  basic  elements  and  creation  of  Uniform  Symbols
2.     Syntax  Analysis
recognition  of  basic  constructs  through  Reductions
3.     Interpretation
definition  of  exact  meaning,  creation  of  Matrix  and  tables  by  Action  Routines
4.     Machine  Independent  Optimization
creation  of  more  optimal  Matrix

ขั้นที่  1 - 4  เป็นช่วงของ  Machine-independent  Phase

5.     Storage  Assignment
modification  of  Identifier  and  Literal  Tables.  It  makes  entries  in the  Matrix  that  allow  Code  Generation  to  create  code  that  allocates  dynamic  storage,  and  that  also  allow  the Assembly  phase  to  reserve  the proper  amounts  of  STATIC  storage
6.     Code  Generation
use  of  macro  processor  to  produce  more  optimal  assembly  codes
7.     Assembly  and  Output
resolving  symbolic  addresses  (labels)  and  generating  machine  language

ขั้นที่  5 - 7  เป็นช่วงของ  Machine-dependent  Phase

เป้าหมายที่ 1. Object  Code    2. Amount  of  Cores     3. Time  to  Execute
ซึ่งทั้งสามประการนี้มักจะก่อให้เกิดข้อขัดแย้งกันอยู่บ้างในตัวกว่าจะได้มา

สรุป  โครงสร้างข้อมูลที่ใช้งานกับตัวแปลภาษา
A.  Source  Code
B.  Uniform  symbol  Table 
created  by  Lexical  Analysis  (List  of  Tokens)  used  for  Syntax  Analysis  and  Interpretation
C.     Terminal  Table
permanent  table-list  of  all  keywords  and  special  symbols  (pointed  to  by  Uniform  Symbols)
D.     Identifier  Table
all  variables  and  temporary  storage  with  information  creation  by  Lexical  Analysis 
modified  by  Interpretation  and  Storage  Allocation
referenced  by  Code  Generation  and  Assembly
E.     Literal  Table   similar  to  D.
F.     Reductions
permanent  table  of  decision  rules  in form  of  patterns  for  matching  with  the Uniform  Symbols  Table  to  discover  syntactic  structure
G.     Matrix
intermediate  form  which  created  by  Action  Routines,  optimized  and  then 
used  for  Code  Generation
H.     Code  Production
permanent  table  of  definition,  one  entry  defining  code  for  each  possible  matrix  operator
I.     Assembly  Code
created  by  Code  Generation  input  to  assembly  phase (assembler)
J.     Relocatable  Object  Code
final  output  of  assembly  phase  ready  to  be  used  as  input  to  Loader 
   
ภาษาคอมพิวเตอร์

ภาษาคอมพิวเตอร์
     • ภาษาคอมพิวเตอร์ หมายถึง สัญลักษณ์ที่ผู้คิดพัฒนาภาษากำหนดขึ้นมา เพื่อใช้แทนการสื่อสาร / สั่งงาน ระหว่างมนุษย์กับเครื่องคอมพิวเตอร์
     • ประเภทของภาษาคอมพิวเตอร์
 
     แบ่งได้เป็น 5 ประเภท

          1. ภาษาเครื่อง
  -เป็นภาษาระดับต่ำ
  -ใช้เลข 0 และ 1 ภาษาเครื่องเป็นภาษาที่คอมพิวเตอร์เข้าใจได้โดยตรง จึงไม่ต้องมีตัวแปลภาษา
  -โปรแกรมที่เขียนด้วยภาษาเครื่อง จะใช้ได้กับเครื่องคอมพิวเตอร์ที่ใช้พัฒนาโปรแกรมเท่านั้น

          2. ภาษาแอสเซมบลี เรียกอีกอย่างว่า “ภาษาสัญลักษณ์” เป็นภาษาระดับต่ำ
  -ใช้รหัสเป็นคำแทนคำสั่งภาษาเครื่อง เป็นคำสั่งสั้น ๆ ที่จดจำได้ง่าย เรียกว่า นิวมอนิกโค้ด เช่น
  A แทน การบวก(Add)
  C แทน การเปรียบเทียบ(Compare)
  MP แทน การคูณ(Multiply)
  STO แทน การเก็บข้อมูลในหน่วยความจำ(Store)
  -ต้องทำการแปลด้วยโปรแกรมแปลภาษาที่เรียกว่า แอสเซมเบลอ(Assembler) ซึ่งจะแปลโปรแกรมต้นฉบับ(Source code)ที่เขียนด้วยภาษาแอสเซมบลี ให้เป็น ภาษาเครื่อง

          3.ภาษาระดับสูง
  -ใช้รูปแบบคำภาษาอังกฤษแทนรหัสคำสั่งต่าง ๆ
  -เป็นภาษาแบบโพรซีเยอร์
  -โปรแกรมที่พัฒนาจากภาษาระดับสูง ต้องทำการแปลคำสั่งโปรแกรมต้นฉบับ(Source code) ที่เขียนด้วยภาษาระดับสูงให้เป็นภาษาเครื่อง
  -ตัวอย่างภาษาระดับสูงเช่น ภาษาเบสิก ภาษาปาสคาล ภาษาซี ภาษาโคบอล ภาษาฟอร์แทรน เป็นต้น

          4.ภาษาระดับสูงมาก
  -ใช้คำภาษาอังกฤษแทนคำสั่งงาน เช่นเดียวกับ ภาษาระดับสูง
  -เป็นภาษาแบบไม่เป็นโพรซีเยอร์
  -เขียนง่ายและสะดวกกว่าภาษาระดับสูง
  -ตัวอย่างภาษาเช่น ภาษาSQL ที่ใช้ในฐานข้อมูล เป็นต้น
  -ภาษาระดับสูงมากไม่ได้ถูกออกแบบให้สามารถทำงานตามลำพังจึงต้องทำงานร่วมกับภาษาอื่นๆ

          5.ภาษาธรรมชาติ
  -ภาษาธรรมชาติไม่สนใจรูปแบบคำสั่งหรือลำดับที่เคร่งครัด
  -ผู้ใช้สามารถพิมพ์สิ่งที่ต้องการในคอมพิวเตอร์เป็นคำหรือประโยคที่ผู้ใช้ เข้าใจ คอมพิวเตอร์จะพยายามแปลคำหรือประโยคเพื่อทำตามคำสั่ง
  -ภาษาธรรมชาตินิยมนำมาประยุกต์งานด้าน ระบบผู้เชี่ยวชาญ

          ตัวแปลภาษา
     หมายถึง โปรแกรมที่ทำหน้าที่แปลโปรแกรมต้นฉบับ(Source code) ที่เขียนขึ้น ให้เป็นภาษาเครื่องที่เป็นเลขฐานสอง เพื่อให้เครื่องคอมพิวเตอร์ทำงานตามที่ต้องการ

          ประเภทของตัวแปลภาษา
  -โปรแกรมแปลภาษาแบบแอสเซมเบลอ (Assembler)
  -โปรแกรมแปลภาษาแบบคอมไพเลอร์(Compiler)
  -โปรแกรมแปลภาษาแบบอินเทอร์พรีเทอร์(Interpreter)

  Assembler
   คือ แปลเฉพาะภาษาแอสเซมบลีให้เป็นภาษาเครื่องเท่านั้น


  Compiler
  -แปลโปรแกรมต้นฉบับทั้งโปรแกรม ที่เขียนจากภาษาระดับสูง ให้เป็นออบเจ็กต์(Object Code)
  Object code สามารถนำไปใช้ได้ทันที
  -ระหว่างการแปล หากพบข้อผิดพลาดที่เกิดจากการเขียนคำสั่ง จะแสดงข้อผิดพลาดและหยุดการแปลเมื่อเกิดข้อผิดพลาดระหว่างการแปล ผู้เขียนโปรแกรมจะต้องแก้ไขและแปลใหม่อีกครั้ง
  -ตัวอย่างภาษาที่ใช้ compiler ได้แก่ FORTRAN , PASCAL , C , C++ เป็นต้น


  Interpreter
  -แปลโปรแกรมต้นฉบับทั้งโปรแกรม ที่เขียนจากภาษาระดับสูง ให้เป็นภาษาเครื่อง
  -แปล Source code ทีละคำสั่ง ให้เป็น Object code
  -ถ้าพบข้อผิดพลาดจะหยุดทำงาน และให้ดำเนินการแก้ไขคำสั่งที่ผิด จึงเริ่มประมวลผลใหม่
  -ตัวอย่างภาษาที่ใช้ Interpreter ได้แก่ ภาษา BASIC เป็นต้น


          การเขียนโปรแกรมเชิงวัตถุ
  - คุณสมบัติที่สำคัญของ OOP คือ การซ่อนข้อมูล (Encapsulation) , การสืบทอด(Inheritance) และการพ้องรูป
  - ภาษาคอมพิวเตอร์ที่ใช้เขียน OOP ได้แก่ ภาษาจาวา(JAVA) , ภาษา C++ , ภาษา Smalltalk เป็นต้น
ไม่ว่าคุณจะพัฒนาแอพพลิเคชันด้วยภาษาใดก็ตาม สิ่งที่คุณต้องเรียนรู้เป็นอันดับต้นๆ ก็คือ ตัวแปร ค่าคงที่ และชนิดของข้อมูล ที่ภาษานั้นๆ สนันสนุน หรือรองรับอยู่ ซึ่งจะทำให้คุณเห็นข้อจำกัดต่างๆ จุดเด่น จุดด้อย ในแต่ละส่วน ทำให้คุณสามารถเลือกใช้งานได้อย่างถูกต้อง และมีประสิทธิภาพ เพราะว่าตัวแปร และค่าคงที่ถือได้ว่าเป็นตัวแทนของข้อมูล ที่คุณจะนำไปเก็บข้อมูล ประมวลผล และแสดงข้อมูลที่เกิดจากการประมวลผล ซึ่งจะดีเพียงใด ก็ขึ้นอยู่กับคุณ ดังนั้นคุณควรศึกษารูปแบบเบื้องต้น ในการใช้งานให้เข้าใจเสียก่อน คุณจึงสามารถนำไปใช้ได้

การประกาศตัวแปร (Declarations)


     ก่อนที่คุณจะใช้งานตัวแปร หรือค่าคงที่ทุกครั้ง คุณควรที่จะประกาศตัวแปร  (declare) ก่อน เพื่อบอกให้ VB รู้ว่า ตัวแปรชื่อนี้ คุณต้องการใช้งาน และตัวแปรดังกล่าว ใช้แทนข้อมูลชนิดใด เหตุที่ผู้เขียนใช้คำว่า ควรที่จะ เนื่องจากว่า VB จะอนุญาตให้คุณใช้งานตัวแปรได้ โดยที่คุณไม่จำเป็นต้องประกาศตัวแปร   แต่ตัวแปรที่คุณได้มา มันจะกินทรัพยากรระบบ มากเกินความจำเป็น รวมถึงประมวลผลได้ช้าอีกด้วย เพราะจะเป็นตัวแปรที่สามารถแทนข้อมูลได้ทุกชนิด ซึ่ง VB เรียกว่า ตัวแปรชนิด Variant คุณอาจคิดว่า ตัวแปรชนิด Variant ก็ดีอยู่แล้ว ไม่ต้องยุ่งยาก ในการกำหนดรายละเอียดต่างๆ ให้วุ่นวาย แต่โปรแกรมเมอร์จะไม่นิยมใช้ และหลีกเลี่ยงที่จะใช้งานตัวแปรชนิด Variant อีกด้วย จะใช้ในกรณีที่จำเป็นเท่านั้น เนื่องจากว่ามีผลเสียมากกว่าผลดีที่คุณจะได้รับ เหตุผลที่สำคัญอีกประการหนึ่งก็คือ ตัวแปรต่างๆ ที่คุณนำมาใช้งานในโปรเจ็กต์ของคุณ ตัวคุณเองย่อมรู้ดีว่า จะใช้ตัวแปรใดบ้าง และจะให้ตัวแปรตัวใดแทนข้อมูลชนิดไหน ซึ่งคุณเองเป็นผู้กำหนดทั้งหมด ดังนั้นจึงไม่มีเหตุผลใด ที่คุณจะใช้ตัวแปรชนิด Variant จากเหตุผลข้างต้น คุณควรที่จะประกาศตัวแปรทุกครั้ง ก่อนที่จะนำไปใช้งาน ใน VB มีรูปแบบการประกาศดังนี้
Dim varname As datatypes
ความหมายของแต่ละส่วน มีดังนี้
  • Dim คือ คำสั่ง  (statements) ที่บอกให้ VB รู้ว่า คุณต้องการประกาศตัวแปร
  • varname คือ ชื่อของตัวแปร คุณสามารถตั้งชื่อตัวแปรได้อย่างอิสระ แต่ต้องไม่ผิดกฎการตั้งชื่อของ VB คุณควรจะตั้งชื่อตัวแปร ให้สื่อกับข้อมูลที่ตัวมันเก็บอยู่ จะทำให้คุณอ่านโค้ดได้ง่ายขึ้น
  • As คือ คำสงวน (keywords) ที่บอกให้ VB รู้ว่า คุณต้องการกำหนดให้ตัวแปรชื่อดังกล่าวแทนข้อมูลชนิดใด
  • datatypes คือ ชนิดของข้อมูลที่  VB สนับสนุนอยู่ ซึ่งมีอยู่หลายชนิด เช่น ตัวเลขจำนวนเต็ม (integer), ตัวอักษร (string) เป็นต้น
การประกาศตัวแปรใน VB สามารถแยกได้ 2 แบบคือ
1.การประกาศตัวแปรแบบ Implicit Declaration หมายถึง VB ยอมให้คุณใช้งานตัวแปรได้ โดยไม่ต้องมีการประกาศตัวแปร ชนิดของข้อมูลที่ได้จะเป็นแบบ Variant ซึ่งไม่ควรนำมาใช้งานด้วยเหตุผลข้างต้น แต่ถ้าคุณต้องการใช้งานตัวแปรชนิดอื่นๆ โดยการประกาศแบบนี้ คุณสามารถใช้สัญลักษณ์พิเศษที่ VB กำหนดไว้ เพื่อเปลี่ยนชนิดของข้อมูล เป็นชนิดอื่นๆ ได้ ให้ดูหัวข้อ ชนิดของข้อมูลเพิ่มเติม 
2.การประการตัวแปรแบบ Explicit Declaration หมายถึง คุณจะต้องมีการประกาศตัวแปรก่อนการใช้งานทุกครั้ง แล้วจึงสามารถนำตัวแปรนั้นๆ ไปใช้งานได้


note.gif (1525 bytes)      การประกาศตัวแปรแบบ Explicit ให้คุณใส่คำสั่ง Option Explicit ไว้ในส่วนบนสุด ก่อนการสร้างโพรซีเดอร์ จะเป็นการบังคับให้คุณ ต้องประกาศตัวแปรก่อน ที่จะนำไปใช้งานทุกครั้ง ถ้าคุณไม่ต้องการพิมพ์ข้อความดังกล่าวทุกครั้ง ให้คุณเลือกเมนู Tools/Option เลือกหัวข้อ Require Variable Declaration VB จะใส่ข้อความดังกล่าว ให้คุณโดยอัตโนมัติทุกครั้ง ดังรูป
vb3-1.jpg (11365 bytes)
รูปที่ 3.1 แสดงข้อความ Option Explicit

กฎการตั้งชื่อตัวแปรและค่าคงที่

1.ให้ขึ้นต้นด้วยพยัญชนะเท่านั้น
2.ความยาวของชื่อที่ตั้งสูงสุดไม่เกิน 255 ตัวอักษร ในทางปฏิบัติ การตั้งชื่อที่ยาวจนเกินไป จะไม่เกิดประโยชน์ใดๆ กลับก่อให้เกิดผลเสียคือ   คุณต้องเสียเวลาพิมพ์โดยเปล่าประโยชน์
3.ชื่อที่คุณตั้ง จะต้องไม่ซ้ำกับคำสงวน (keywords), คำสั่ง(statements), ฟังก์ชัน (functions) หรืออื่นๆ ที่ VB กำหนดไว้
4.ห้ามตั้งชื่อซ้ำกันในโพรซีเดอร์เดียวกัน หรือในขอบเขตเดียวกัน
5.ห้ามใช้เครื่องหมายทางคณิตศาสตร์, ตัวดำเนินการ (Operators) หรือ เครื่องหมายพิเศษ เช่น @,# มาตั้งชื่อ
6.ห้ามมีช่องว่างในชื่อของตัวแปร ถ้าต้องการเว้นว่าง ให้ใช้เครื่องหมาย _ (underscore) เท่านั้น เช่น end_salary เป็นต้น

note.gif (1525 bytes) ถ้าคุณตั้งชื่อผิดกฎ VB จะมีข้อความเตือนให้คุณทราบ

การตั้งชื่อคอนโทรลและอ๊อบเจ็กต์ตามคำแนะนำของไมโครซอฟท์

     เนื่องจาก VB มีคอนโทรลต่างๆ มากมาย โปรแกรมเมอร์มักจะใช้คำนำหน้า (prefixs) ในการตั้งชื่อคอนโทรล ต่อไปนี้ เป็นคำแนะนำของไมโครซอฟท์ ที่คุณควรใช้ตั้งชื่อคอนโทรล และอ๊อบเจ็กต์ ดังตารางต่อไปนี้

คอนโทรล คำนำหน้า (Prefixs) ตัวอย่าง
CheckBox chk chkStudents
ComboBox cbo cboSalary
CommandButton cmd cmdExit
CommonDialog dlg dlgSave
Data Control dat datStudents
DBComboBox dbc dbcList
DBGrid dbg dbgWork1
DBListBox dbl dblDisplay
DirListBox dir dirDestination
DriveListBox drv drvMain
FileListBox fil filInput
Frame fra fraDisplay
HScrollBar hsb hsbColor
Image img imgMain
Label lbl lblName
Line lin linTop
ListBox lst lstMouth
OptionButton opt optSex
Ole Container ole oleWord
PictureBox pic picPeople
Shape shp shpCircle
TextBox txt txtInput
Timer tmr tmrCount
VScrollBar vsb vsbHeight

ชนิดของข้อมูล

      VB มีชนิดของข้อมูลที่เป็นพื้นฐาน ให้คุณเลือกใช้ได้เหมาะสมตามที่คุณต้องการมากมาย   ไม่ว่าจะเป็นจำนวนเต็ม  (Integer), เศษส่วน (Single, Double)  ที่คุณยังสามารถ เลือกความละเอียดจำนวนตัวเลขได้อีกด้วย เพื่อให้เหมาะสมกับข้อมูลที่คุณต้องการเก็บ, ข้อความ (string), ตัวเลขทางการเงิน (Currency), ค่าทางตรรก (boolean) เป็นต้น ข้อมูลแต่ละชนิดที่กล่าวมา จะใช้พื้นที่ในการเก็บไม่เท่ากัน รวมถึงความเร็วในการประมวลผลก็แตกต่างกันด้วย เช่น ถ้าเป็นตัวเลข ให้คุณพยายามใช้ข้อมูลชนิด Integer ให้มากที่สุด เพราะว่าใช้ทรัพยากรน้อย และประมวลผลได้เร็ว แต่ก็ต้องขึ้นอยู่กับข้อมูลที่จะเก็บด้วย เนื่องจากข้อมูลชนิด Integer สามารถเก็บค่าที่อยู่ระหว่าง -32768 ถึง 32767 เท่านั้น ให้คุณเลือกใช้ชนิดของข้อมูลที่ใช้ทรัพยากรระบบให้น้อยที่สุด เท่าที่จะเป็นไปได้ก่อน โดยที่ยังสามารถรองรับความต้องการของคุณได้         ตารางต่อไปนี้ เป็นชนิดของข้อมูลเบื้องต้นที่ VB สนันสนุน สิ่งที่คุณควรสนใจก็คือ ชนิดของข้อมูลที่สามารถเก็บได้, ขอบเขตของข้อมูล, ใช้หน่วยความจำระบบเท่าใด, และสัญลักษณ์พิเศษที่ใช้แทนชนิดของข้อมูล ใช้ในกรณีที่คุณต้องการใช้งานตัวแปรแบบ Implicit

ชนิดของข้อมูล สัญลักษณ์พิเศษ ใช้หน่วยความจำ รายละเอียด
Boolean ไม่มี 2 Bytes เก็บค่าทางตรรก มีได้ 2 ค่า คือ true (จริง) , false (เท็จ) โดยที่ VB กำหนดไว้ว่า 0 มีค่าเท่ากับ false และตัวเลขจำนวนเต็มใดที่ไม่เท่ากับ 0 มีค่าเท่ากับ true
Byte ไม่มี 1 Byte เก็บค่าเลขจำนวนเต็มตั้งแต่ 0-255 ซึ่งเป็นรหัสแอสกี ASCII
Currency @ 8 Bytes ใช้เก็บตัวเลขจำนวนจริง มีค่าระหว่าง -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807 ใช้สำหรับเก็บตัวเลขทางการเงินโดยเฉพาะ เพราะมีความละเอียดสูง มีทศนิยม 4 ตำแหน่ง
Variant ไม่มี ขึ้นอยู่กับชนิดข้อมูลที่เก็บ สามารถเก็บข้อมูลได้ทุกชนิด
Integer % 2 Bytes เก็บค่าเลขจำนวนเต็มที่มีค่าระหว่าง   -32768 ถึง 32767
Long & 4 Bytes ใช้เก็บเลขจำนวนเต็มที่มีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647
Single ! 4 Bytes ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง   -3.402823E38 ถึง -1.401298E-45
Double # 8 Bytes ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324
String $ 1 ตัว/1ไบต์  (ascii) ใช้เก็บตัวอักษร   ข้อความ และตัวเลข
Date  ไม่มี 8 Bytes ใช้สำหรับเก็บวันเดือนปี
Decimal ไม่มี 12 Bytes กรณีเลขจำนวนเต็ม มีค่าตั้งแต่ -79,228,162,514,264,337,593,543,950,335 ถึง +79,228,162,514,264,337,593,543,950,335 กรณีเลขทศนิยม มีค่าตั้งแต่  -7.9228162514264337593543950335 ถึง +-7.9228162514264337593543950335
ค่าที่น้อยที่สุดที่ไม่เท่ากับศูนย์ที่สามารถเก็บได้คือ 0.0000000000000000000000000001
Object ไม่มี ? ใช้สำหรับแทนอ๊อบเจ็กต์ หรือคอนโทรลที่ VB สนับสนุน
   ตารางดังกล่าว เป็นเพียงชนิดของข้อมูลเบื้องต้นเท่านั้น ยังมีชนิดของข้อมูลอื่นๆ อีก ที่ยังไม่ได้กล่าวไว้ ผู้เขียนจะอธิบายอีกครั้ง ในกรณีที่มีการใช้ข้อมูลชนิดอื่นๆ รูปแบบการประกาศตัวแปรมีดังนี้
Dim x As Integer หมายถึง ให้ตัวแปร x เก็บข้อมูลที่เป็นตัวเลขจำนวนเต็มเท่านั้น (มีค่าอยู่ระหว่าง -32768 ถึง 32767)
Dim y As String    หมายถึง ให้ตัวแปร y เก็บข้อมูลที่เป็นข้อความ หรือตัวอักษรเท่านั้น

     ให้คุณสังเกต  VB จะใช้ฟอนต์ สีน้ำเงินแทนคำสงวน หรือคำสั่ง, สีดำแทนตัวแปร และ สีเขียนแทนหมายเหตุ รายละเอียดของข้อมูล แต่ละชนิด มีดังนี้

Boolean

     เป็นข้อมูลชนิดบูลีน (Boolean) ใช้หน่วยความจำ 2 bytes สามารถมีค่า True (จริง) หรือ False (เท็จ) เท่านั้น ถ้าคุณกำหนดเป็นตัวเลข โดยที่ 0 หมายถึง False และตัวเลขจำนวนเต็มใดๆ ที่ไม่เท่ากับ 0 หมายถึง True เช่น
Dim a As Boolean
กำหนดให้ตัวแปร a เป็นตัวแปรชนิดบูลีน

Byte

     เป็นข้อมูลชนิดเลขจำนวนเต็ม มีค่าระหว่าง 0-255 โดยใช้หน่วยความจำ 1 byte มักใช้เก็บรหัสโค้ดแอสกี้ ที่มีจำนวน 256 ตัวอักษร เช่น
Dim asc As Byte
กำหนดให้ตัวแปร asc เป็นตัวแปรชนิด Byte

Currency

     เป็นข้อมูลชนิดที่มีค่าตั้งแต่ -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807 ใช้หน่วยความจำ 8 bytes ใช้สำหรับเก็บตัวเลขทางการเงินโดยเฉพาะ เพราะมีความละเอียดสูง มีทศนิยม 4 ตำแหน่ง เช่น
Dim Deb As currency

Date

     เป็นข้อมูลสำหรับใช้เก็บวันที่ ซึ่งสามารถเก็บได้ตั้งแต่วันที่ 1 January 100 ถึงวันที่ 31 December 9999 และเก็บเวลาได้ตั้งแต่ 0:00:00 ถึง 23:59:59 ในการใช้ข้อมูลชนิดนี้ คุณต้องใช้เครื่องหมาย #...# ล้อมรอบค่าของตัวแปรด้วย ใช้หน่วยความจำ 8 bytes เช่น
Dim dte As Date
dte = #12/31/1999 11:59:59 PM#


Decimal

     เป็นข้อมูลชนิดเลขจำนวนจริง ใช้หน่วยความจำ 12 bytes ซึ่งจะแยกออกเป็น 3 กรณีคือ
  • กรณีเลขจำนวนเต็ม มีค่าตั้งแต่ -79,228,162,514,264,337,593,543,950,335 ถึง +79,228,162,514,264,337,593,543,950,335
  • กรณีเลขทศนิยม มีค่าตั้งแต่  -7.9228162514264337593543950335 ถึง +-7.9228162514264337593543950335
  • ค่าที่น้อยที่สุดที่ไม่เท่ากับศูนย์ ที่สามารถเก็บได้คือ 0.0000000000000000000000000001

note.gif (1525 bytes)      ใน Visual Basic 6.0 คุณยังไม่สามารถประกาศ ให้เป็นข้อมูลชนิดนี้ได้โดยตรง คุณต้องทำ 2 ขั้นตอนดังนี้1.ประกาศตัวแปรให้เป็นข้อมูลชนิด Variant ก่อน
2.ใช้ฟังก์ชัน CDec ( ) เพื่อแปลงชนิดของข้อมูลจาก Variant เป็น Decimal ดังนี้

Dim a As Variant
a = CDec("123456789123456789")

Double

     ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324 ใช้หน่วยความจำ 8 bytes เช่น
 Dim aBs As Double

Integer

     ใช้เก็บเลขจำนวนเต็มที่มีค่าตั้งแต่ -32768 ถึง 32767 ใช้หน่วยความจำ 2 byte เช่น
Dim count As Integer

Long

     ใช้เก็บเลขจำนวนเต็มที่มีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647 ใช้หน่วยความจำ 4 byte เช่น
Dim num As Long

Single

     ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง   -3.402823E38 ถึง -1.401298E-45 ใช้หน่วยความจำ 4 byte เช่น
Dim Intr As Single

String

     เป็นข้อมูลชนิดข้อความ ซึ่งอาจเป็นได้ทั้งตัวอักษร หรือตัวเลขก็ได้ ขนาดหน่วยความจำที่ใช้จะขึ้นอยู่กับรูปแบบการจัดเก็บ คือ ถ้าตัวอักษรที่เก็บอยู่ในรูปแบบ ASCII จะใช้พื้นที่ 1 ตัวต่อ 1 byte แต่ถ้าเก็บในรูปแบบ Unicode อักษรแต่ละตัวจะใช้พื้นที่ 1 ตัวต่อ 2 bytes
ข้อมูลชนิด String สามารถแบ่งออกได้ 2 ประเภท คือ
  • Variable-length string หมายถึง เป็นตัวแปร String ที่คุณไม่ได้กำหนดขนาดของตัวอักษรไว้ คุณสามารถใส่ตัวอักษรได้ 65526 ตัวอักษร (ascii) และ 32763 ตัวอักษร (unicode)
  • Fixed-length string หมายถึง เป็นตัวแปร String ที่คุณจำกัดขนาดตัวอักษรไว้ คุณจะต้องใช้เลขจำนวนเต็มเท่านั้น ในการจำกัดขนาดตัวอักษร เช่น Dim a As String * 99 หมายถึง ตัวแปร a สามารถเก็บตัวอักษร รวมช่องว่างได้ไม่เกิน 99 ตัวอักษร สูงสุดที่ 98 ตัวอักษร ตัวสุดท้ายใช้เก็บตัวอักษรพิเศษ null กำกับไว้เพื่อบอกให้รู้ว่า จบข้อความแล้ว ซึ่งเป็นกฎเกณฑ์ที่คุณควรทราบไว้สำหรับในการใช้ตัวแปรชนิด String
     สำหรับในการใช้งานตัวแปร String แบบจำกัดขนาดนี้ ให้คุณระวังในเรื่อง ขนาดของข้อความที่จัดเก็บ ถ้าข้อความมีจำนวนตัวอักษร เกินกว่าที่คุณกำหนดไว้ ข้อความส่วนที่เกินจะถูกตัดออกไป

การใช้งานตัวแปรแบบใช้สัญลักษณ์พิเศษกำกับ

     คุณยังสามารถใช้งานตัวแปรได้ โดยการใช้สัญลักษณ์พิเศษต่อท้ายตัวแปรนั้นๆ ให้คุณดูตารางต่อไปนี้
ชนิดของข้อมูล สัญลักษณ์พิเศษ
Integer %
Long &
Single !
Double #
Currency @
String $
       การประกาศใช้งานตัวแปรแบบปกติ ถ้าคุณต้องการตัวแปรแบบ Integer คุณจะต้องประกาศ ดังนี้
Dim x As Integer   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม
     แต่คุณสามารถใช้สัญลักษณ์พิเศษต่อท้ายตัวแปรเพื่อ กำหนดให้ตัวแปรแทนชนิดของข้อมูลที่คุณต้องการได้ ซึ่งถ้าคุณใช้วิธีนี้ คุณต้องใช้ตลอดทั้งโพรซีเดอร์ เช่น
Dim x%   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม Integer เช่นกัน
Dim x&   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม Long
Dim x!   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทศนิยมแบบ Single (ความละเอียดต่ำ)
Dim x#   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทศนิยมแบบ Double (ความละเอียดสูง)
Dim x@   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทางการเงิน Currency
Dim x$   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดข้อความ String


note.gif (1525 bytes)      การประกาศตัวแปรแบบปกติ หรือประกาศแบบใช้สัญลักษณ์พิเศษต่อท้าย มีผลเหมือนกันทุกประการ คุณสามารถเลือกใช้ได้อย่างอิสระ

ขอบเขตของตัวแปร (Scope of Variable)

     ตัวแปรที่คุณต้องการใช้งานในแอพพลิเคชันหนึ่งๆ จะมีมากมายหลายชนิด  สิ่งหนึ่งที่คุณควรทราบก็คือ ตัวแปรแต่ละตัวมีขอบเขต การใช้งานเป็นอย่างไร หัวข้อนี้จะเป็นการอธิบาย ข้อจำกัดและขอบเขตของตัวแปร ใน VB สามารถแบ่งขอบเขตตัวแปรได้ 2 ประเภท คือ
1.ตัวแปรแบบ Local
2.ตัวแปรแบบ Public

ตัวแปรแบบ Local

     หมายถึง ตัวแปรที่คุณประกาศขึ้นมา และสามารถเรียกใช้งานได้ ในเฉพาะโพรซีเดอร์ ที่ประกาศเท่านั้น มักใช้ประกาศตัวแปรที่คุณต้องการใช้ชั่วคราว หรือต้องการใช้แค่ในโพรซีเดอร์นั้นๆ เช่น

Private Sub Command1_Click()
Dim x As Integer
Dim y As Long
   x=x+y
End Sub

Private Sub Command2_Click()
   x=x*y
End Sub
     จากตัวอย่างข้างต้น ตัวแปร x แทนชนิดข้อมูล Integer และ y แทนข้อมูล Long คุณสามารถเรียกใช้งานตัวแปรทั้ง 2 ได้เฉพาะในโพรซีเดอร์ Command1_Click( ) เท่านั้น (ในกรณีที่คุณกำหนดให้ VB ใส่ประโยค  Option Explicit)    ถ้าคุณเรียกใช้งานตัวแปรดังกล่าว ในโพรซีเดอร์ Command2_Click( ) VB จะแสดงข้อความ Variable not defined ซึ่งหมายถึง ตัวแปร x และ y ในโพรซีเดอร์ Command2_Click( ) ไม่ได้มีการประกาศตัวแปร จึงไม่สามารถนำตัวแปร x และ y มาใช้ได้ เพราะตัวแปร x และ y ที่คุณประกาศไว้ มีขอบเขตการใช้งานในระดับ Local หรือแค่ในโพรซีเดอร์ที่ประกาศไว้เท่านั้น แต่ถ้าในกรณีที่คุณไม่ได้กำหนดให้ VB ใส่ข้อความ Option Explicit ตัวแปร x และ y คุณสามารถเรียกใช้งานได้ ในโพรซีเดอร์ Command2_Click( ) แต่ตัวแปรทั้ง 2 จะเป็นข้อมูลชนิด Variant ซึ่งคุณไม่มีความจำเป็นต้องใช้ และตัวแปรชนิด Local นี้จะถูกยกเลิกหรือถูกทำลาย ซึ่งหมายถึง คืนหน่วยความจำให้กับระบบ เมื่อจบโพรซีเดอร์  (End Sub) ทันที
     แต่ถ้าคุณต้องการใช้งานตัวแปรในโพรซีเดอร์ Command2_Click ( ) โดยใช้ชื่อ x และ y เหมือนกัน VB จะถือว่า เป็นตัวแปรคนละตัว และจะจองหน่วยความจำให้แต่ละตัว ไม่เกี่ยวข้องกันแต่อย่างใด เช่น

Private Sub Command1_Click()
Dim x As Integer
Dim y As Long
   x=x+y
End Sub

Private Sub Command2_Click()
Dim x As Long
Dim y As Single
   x=x*y
End Sub
     จากตัวอย่างข้างต้น คุณยังสามารถประกาศให้ตัวแปร x และ y ให้แทนชนิดข้อมูลต่างกันได้อีกด้วย เหตุผลก็คือ ตัวแปรทั้ง 4 ตัว เป็นแบบ Local นั่นเอง

ตัวแปรแบบ Public

     หมายถึง ตัวแปรที่คุณประกาศใช้งานแล้ว คุณสามารถเรียกใช้งานได้ทั้งโปรเจ็กต์ โพรซีเดอร์ใด ฟอร์มใดก็ได้ อาจเรียกได้อีกอย่างหนึ่งว่า ตัวแปรร่วมแบบ Public หรือตัวแปรระดับโมดูล มักจะใช้ในกรณีที่ต้องเก็บค่าตัวแปร ที่ต้องใช้ทุกฟอร์ม หรือทุกโพรซีเดอร์ เช่น กรณีที่คุณเขียนโปรแกรม ซื้อ-ขายสินค้า ไม่ว่าจะเป็นการซื้อ หรือขาย ภาษีก็เท่ากับ 7 % เสมอ (สมมติ)   คุณไม่ต้องประกาศตัวแปรภาษี ทุกโพรซีเดอร์ หรือถ้าเป็นโปรแกรมเงินเดือน จะต้องมีการหักเงินประกันสังคม 3% ของพนักงานทุกคน คุณก็ไม่ต้องประกาศตัวแปรเงินประกันสังคมในทุกโพรซีเดอร์   คุณสามารถเลือกใช้ตัวแปรแบบ Public ได้ดังนี้
  • ให้คุณเลือกเมนู Project/Add Module VB จะเพิ่มไฟล์โมดูล .bas (Module) เข้ามาในโปรเจ็กต์ ให้คุณสังเกตที่หน้าต่าง Project Explorer จะมีรายการ Module1 เพิ่มเข้ามาในโปรเจ็กต์  ดังรูป
vb3-2.jpg (10851 bytes)
รูปที่ 3-2 หน้าต่างโมดูล (Module)

note.gif (1525 bytes)      ไฟล์โมดูล (Module) เป็นพื้นที่พิเศษที่ใช้สำหรับประกาศตัวแปร, ฟังก์ชันที่คุณเขียนขึ้นมา,  General Procedure,  หรือฟังก์ชัน Windows API  ฯลฯ เท่านั้น คุณไม่สามารถเขียนโค้ดในไฟล์โมดูล นี้ได้ คุณสามารถสังเกตได้โดยดูที่ช่อง Object list box และช่อง Event list box ไม่มีรายการอ๊อบเจ็กต์ หรือรายการเหตุการณ์แต่อย่างใด
     ในบางครั้ง คุณอาจการประกาศค่าคงที่ เพื่อแทนตัวแปรแบบ Public ก็ได้

  • คุณต้องประกาศตัวแปรโดยใช้คำสั่ง  Public  แทนคำสั่ง  Dim ดังรูป ให้คุณระวังในจุดนี้ไว้ เพราะเนื่องจากว่า คุณอาจจะมีความเคยชินในการใช้คำสั่ง Dim เสมอ เพื่อประกาศตัวแปร เพราะถ้าคุณใช้คำสั่ง Dim ในการประกาศตัวแปรที่ไฟล์โมดูล มันจะกลายเป็นตัวแปรระดับ Local ที่สามารถเรียกใช้งานได้ เฉพาะในโมดูลที่ประกาศเท่านั้น ซึ่งก็จะไม่ใช่ตัวแปรแบบ Public ตามที่คุณต้องการ   และจะเกิดข้อความ Variable not defined เจ้าเก่า :-)
vb3-3.jpg (13200 bytes)
รูปที่ 3-3 แสดงการประกาศตัวแปรแบบ Public ในไฟล์โมดูล
     เมื่อคุณประกาศตัวแปรแบบ Public แล้ว ในโพรซีเดอร์ Command1_Click ( ) และ Command2_Click ( ) คุณสามารถใช้งานตัวแปรทั้ง 2 ได้ โดยไม่ต้องประกาศตัวแปรอีกแต่อย่างใด

Private Sub Command1_Click()
   x=x+y
End Sub

Private Sub Command2_Click()
   x=x*y
End Sub
     ถ้าในกรณีที่คุณมีการประกาศตัวแปรแบบ Local และตัวแปรแบบ Public โดยใช้ชื่อเดียวกัน VB จะถือว่าเป็นตัวแปรคนละตัว คนละแบบ และจะจองหน่วยความจำ ให้กับตัวแปรทั้ง 2 ไม่เกี่ยวข้องกันแต่อย่างใด และจะให้ความสำคัญกับตัวแปรแบบ Local ก่อนตัวแปรแบบ Public เสมอ  เช่น
  • ให้คุณทดสอบโดยการประกาศตัวแปรในไฟล์ดูล ดังรูป
vb3-4.jpg (11943 bytes)
รูปที่ 3-4 ตัวอย่างทดสอบการประกาศตัวแปรแบบ Public และแบบ Local
จากนั้นในแต่ละโพรซีเดอร์ ให้คุณประกาศตัวแปร โดยใช้ชื่อเหมือนกัน แต่ต่างชนิดข้อมูลกัน ดังนี้

Private Sub Command1_Click()
   x = x * y
End Sub

Private Sub Command2_Click()
Dim x As String
   x = x + y
End Sub
     ให้คุณทดลองรัน แล้วคุณลองคลิ๊กปุ่ม Command2 ปรากฎว่าจะเกิดข้อความ Run-time '13' Type mismatch ซึ่งหมายถึง ข้อมูลผิดประเภท เนื่องจากว่า ตัวแปร x (แบบ Public) ที่คุณประกาศไว้ในโมดูล เป็นข้อมูลตัวเลขจำนวนเต็ม Long แต่ตัวแปร x (แบบ Local) ที่คุณประกาศไว้ในโพรซีเดอร์ Command2_Click ( ) เป็นชนิดข้อความ String เป็นไปไม่ได้ที่ ตัวเลข+ตัวเลข จะเท่ากับข้อความ ถึงแม้ว่า จะเป็นข้อความที่เป็นตัวเลข แต่เป็นตัวเลขที่ไม่สามารถนำไปคำนวนได้เต็มรูปแบบ ให้คุณระวังในจุดนี้ให้ดี และขอให้คุณใช้ตัวแปรแบบ Public เท่าที่จำเป็นเท่านั้น

การใช้งานตัวแปรร่วมระดับโพรซีเดอร์

     หมายถึง เป็นตัวแปรที่คุณประกาศแล้ว สามารถใช้งานได้ทุกๆ โพรซีเดอร์ แต่ไม่สามารถเรียกใช้ในระดับโปรเจ็กต์แบบ Public ได้ ซึ่งถ้าเรียงลำดับขอบเขต ความสามารถในการเรียกใช้งานแล้ว ตัวแปรแบบ Public จะมีขอบเขตกว้างที่สุดก็คือ คุณสามารถเรียกใช้งาน ที่จุดใดก็ได้ในโปรเจ็กต์ รองลงมาก็คือ ตัวแปรร่วมระดับโพรซีเดอร์ ซึ่งคุณสามารถเรียกใช้งานได้ในทุกๆ โพรซีเดอร์ที่อยู่ในฟอร์มที่ประกาศเท่านั้น และท้ายสุดคือตัวแปรแบบ Local ก็คือ คุณสามารถเรียกใช้งานตัวแปรแค่ในโพรซีเดอร์ที่ประกาศไว้เท่านั้น วิธีการประกาศตัวแปรร่วมระดับโพรซีเดอร์ ก็คือ
  • ให้คุณดับเบิ๊ลคลิ๊ก ที่ฟอร์มเพื่อเปิดหน้าต่าง editor แล้วเลือก General ใน Object list box ประกาศตัวแปรโดยการใช้คำสั่ง Dim ดังรูป
vb3-5.jpg (13736 bytes)
รูปที่ 3-5 ประกาศตัวแปรระดับโพรซีเดอร์ ใน Form1
     เนื่องจากว่า ในแอพพลิเคชันหนึ่งๆ  อาจจะมี 2 ฟอร์มขึ้นไป คุณอาจใช้ตัวแปรร่วมระดับโพรซีเดอร์ เพื่อจำกัดขอบเขตการเรียกใช้งานก็ได้ โดยตัวแปรร่วมระดับโพรซีเดอร์ จะมีขอบเขตเรียกใช้งาน แค่ในฟอร์มที่ประกาศไว้เท่านั้น ยกตัวอย่างเช่น ถ้าคุณเขียนโปรแกรมซื้อ-ขาย และโปรแกรมคิดเงินเดือน โดยกำหนดให้ โปรแกรมซื้อ-ขาย อยู่ใน Form1 และโปรแกรมคิดเงินเดือนให้อยู่ใน Form2 ซึ่งทั้ง 2 โปรแกรม ยังคงอยู่ในโปรเจ็ตก์เดียวกัน เป็นโปรเจ็กต์สารพัดประโยชน์จริงๆ  :-) คุณอาจใช้ตัวแปรร่วมระดับโพรซีเดอร์ เพื่อประกาศอัตราภาษี 7% ซึงใช้ร่วมกันทุกโพรซีเดอร์ เฉพาะใน Form1 เท่านั้น ส่วนในโปรแกรมเงินเดือน ไม่มีการใช้ภาษี 7% แต่อย่างใด ในทางกลับกัน คุณต้องการประกาศอัตราเงินประกันสังคม 3% ซึ่งใช้ร่วมกันทุกโพรซีเดอร์เฉพาะใน Form2 เท่านั้น โปรแกรมซื้อ-ขาย ไม่ต้องการ อัตราเงินประกันสังคมแต่อย่างใด เพื่อให้คุณเห็นภาพได้ชัดเจนมากยิ่งขึ้น ให้คุณทดลองทำดังนี้
ใน Form1 ประกอบไปด้วย 3 โพรซีเดอร์ ให้คุณใส่คอนโทรล CommandButton 3 ตัว และเขียนโค้ดดังนี้

Private Sub Command1_Click()
   a = a + b
End Sub

Private Sub Command2_Click()
   a = a * b
End Sub

Private Sub Command3_Click()
   Form2.Show
'Display Form2
End Sub
ในส่วนของ Form1 ให้คุณประกาศตัวแปรระดับโพรซีเดอร์ ดังนี้
vb3-6.jpg (12025 bytes)
รูปที่ 3-6 ประกาศตัวแปร a และ b ซึ่งเป็นตัวแปรร่วมระดับโพรซีเดอร์ ใน Form1
  • ให้คุณเพิ่ม Form2 เข้ามา โดยเลือกเมนู Project/Add Form เลือกไอคอน Form ดังรูป
vb3-7.jpg (21679 bytes)
รูปที่ 3-7 แสดงไอคอน Form จากคำสั่ง Add Form
จากนั้นใส่คอนโทรล CommandButton 2 ตัว ที่ Form2 และเขียนโค้ด ดังนี้

Private Sub Command1_Click()
    a = a + b
End Sub

Private Sub Command2_Click()
    a = a * b
End Sub
     ให้คุณรันโปรเจ็กต์ ทดลองคลิ๊กที่ปุ่ม Command1 และ Command2 ของ Form1 ปรากฎว่าไม่มีอะไรเกิดขึ้น เพราะเป็นการคำนวณธรรมดา ให้คุณคลิ๊กที่ปุ่ม Command3 แล้ว Form2 จะปรากฎขึ้นมา ให้คุณคลิกที่ปุ่ม Command1 หรือ Command2 ของ Form2 ปรากฎว่า จะมีข้อความ Variable not defined เจ้าเก่าอีกนั่นเอง ปรากฎขึ้นมา
     จากการทดลองดังกล่าว สรุปได้ว่า ตัวแปร a และ b  ซึ่งถูกประกาศให้เป็นตัวแปรร่วมระดับโพรซีเดอร์ มีขอบเขตการใช้งานแค่ใน Form1 เท่านั้น คุณสามารถเรียกใช้งานได้ ทั้งในโพรซีเดอร์ Command1_Click ( ) และ Command2_Click ( ) ที่อยู่ใน Form1 เท่านั้น แต่คุณไม่สามารถใช้งานตัวแปร a และ b ใน Form2 ได้เลย เพราะตัวแปร a และ b มีข้อจำกัดการใช้งาน แค่ในฟอร์มที่ประกาศเท่านั้น ให้คุณลองเปลี่ยนจากการประกาศใน Form1 เป็นประกาศในโมดูล ปรากฎว่า จะไม่มีปัญหาในการใช้งานตัวแปร a และ b แต่อย่างใด

การตั้งชื่อตัวแปรแบบบอกชนิดและขอบเขตของตัวแปร

     ในการเขียนแอพพลิเคชันทั่วๆ ไป คุณจะต้องมีการเรียกใช้งานตัวแปรต่างๆ มากมาย ซึ่งคุณไม่สามารถที่จะจดจำได้อย่างถูกต้องทั้งหมด มีแนวทางการตั้งชื่อ ที่โปรแกรมเมอร์มืออาชีพนิยมใช้ เพื่อบอกชนิด หรือขอบเขตของตัวแปร เมื่อเวลาที่ย้อนกลับมาดู source code สามารถที่จะศึกษาได้ source code ดังกล่าวได้ไม่ยากนัก ซึ่งจะอำนวยประโยชน์เป็นอย่างยิ่ง เช่น ถ้าคุณมีการประกาศตัวแปรเพื่อ ใช้สำหรับเก็บค่าเงินเดือน คุณอาจตั้งชื่อดังนี้ก็ได้ Dim iSalary As Integer
ตัว i สื่อให้รู้ว่า ตัวแปร iSalary เป็นข้อมูลชนิด Integer
Dim strUser As String
ตัว str สื่อให้รู้ว่า ตัวแปร strUser เป็นข้อมูลชนิด String หรือถ้าคุณระบุขอบเขตของตัวแปรด้วยก็ได้ เช่น
Dim iLocSalary As Integer
ตัว i สื่อให้รู้ว่า เป็นตัวแปรชนิด Integer โดยมีขอบเขตระดับ Local
Dim strModName As String
ตัว str สื่อให้รู้ว่า เป็นตัวแปรชนิด String โดยมีขอบเขตการใช้งานระดับ Module
Dim lngLocEmployee As Long
ตัว lng สื่อให้รู้ว่าเป็นตัวแปรชนิด Long โดยมีขอบเขตการใช้งานระดับ Local เป็นต้น

note.gif (1525 bytes)      การตั้งชื่อแบบนี้ เหมาะกับแอพพลิเคชันที่ต้องมีการใช้งานตัวแปรจำนวนมากๆ และคุณต้องการให้ source code มีระเบียบ มีความเป็นมืออาชีพมากยิ่งขึ้น และสามารถย้อนกลับมาศึกษา source code นี้ได้อย่างไม่ยากเย็น  คุณจะพบ source code ที่มีการตั้งชื่อตัวแปรแบบนี้ เมื่อมีการเรียกใช้งานกลุ่มฟังก์ชัน Windows API ร่วมด้วย หรือเป็นตัวอย่างแอพพลิเคชันที่มีขนาดใหญ่มากๆ

ตัวแปรอาร์เรย์ (Array)

     ตัวแปรอาร์เรย์ เป็นกลุ่มของตัวแปรที่คุณประกาศขึ้นมา โดยใช้ชื่อของตัวแปรแต่ละตัวเหมือนกัน ข้อแตกต่างของตัวแปรแต่ละตัว จะใช้ค่า Index ในการอ้างอิง ตัวแปรชนิดนี้มีประโยชน์ในแง่ของการเก็บข้อมูลที่คล้ายๆ กัน เป็นชุดๆ โดยที่คุณไม่ต้องห่วงเรื่องการตั้งชื่อตัวแปรแต่ละตัว เพราะมีชื่อเหมือนกัน ต่างกันที่ค่า Index  จะทำให้การเรียกใช้งานตัวแปรเหล่านี้ง่าย และสะดวกกว่า   ซึ่งตัวแปรที่ประกาศเป็นแบบอาร์เรย์นี้   แต่ละตัวจะเรียกว่า สมาชิกตัวที่....  มีรูปแบบการประกาศดังนี้ Dim intCnt( ) As Integer
     จะเห็นได้ว่า มีความคล้ายกับการประกาศตัวแปรแบบปกติ ที่เพิ่มขึ้นมาก็คือ เครื่องหมายวงเล็บต่อท้ายชื่อตัวแปร ซึ่งหมายถึง คุณต้องการใช้งาน ตัวแปรแบบอาร์เรย์ ซึ่งสมาชิกแต่ละตัวในตัวแปรอาร์เรย์ จะต้องเป็นข้อมูลชนิดเลขจำนวนเต็ม Integer เท่านั้น ตัวแปรอาร์เรย์มี 2 ชนิด คือ
1.ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)
2.ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)


ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)

     เป็นอาร์เรย์ที่มีจำนวนสมาชิกที่แน่นอน ซึ่งคุณต้องระบุจำนวนสมาชิก โดยใช้เลขจำนวนเต็ม เข้าไปในวงเล็บด้วย ขอให้คุณจำลองหน่วยความจำในเครื่องว่า เป็นห้องๆ ติดกัน แต่ละห้องสามารถเก็บข้อมูลได้ 1 ตัวอักษร VB จะจองจำนวนห้องเพื่อเก็บข้อมูล ให้เท่ากับจำนวนตัวแปรอาร์เรย์ที่คุณระบุไว้ เช่น
Dim x(5 ) As Integer   หมายถึง ตัวแปร x เป็นตัวแปรอาร์เรย์ชนิดสแตติก ที่ใช้เก็บเลขจำนวนเต็ม Integer โดยที่มีสมาชิกทั้งสิ้น 5 ตัว การใช้งานตัวแปรแต่ละตัว โดยการใช้ชื่อ x(0) เป็นตัวที่ 1 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตล่าง ไปจนถึง x(4) เป็นตัวที่ 5 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตบน ซึ่งจะมีความสำคัญเป็นอย่างยิ่ง ในการใช้งานตัวแปรแบบอาร์เรย์ โดยปกติแล้วสมาชิกตัวแรกของตัวแปรแบบอาร์เรย์ จะมีลำดับที่ 0 เสมอ
Dim x(1 To 10 ) As Long  หมายถึง ประกาศตัวแปรอาร์เรย์ ที่มีสมาชิก 10 ตัว แต่ละตัวแทนข้อมูลชนิด Long โดยที่มีขอบเขตล่างเท่ากับ 1 สมาชิกตัวแรกคือ x(1) ไปจนถึง x(10) โดยที่มีขอบเขตบนเท่ากับ 10 เป็นต้น
     ค่าที่อยู่ในวงเล็บจะเรียกว่า ค่า Index ทำให้ตัวแปร x แต่ละตัวมีความแตกต่างกันนั่นเอง และในการใช้งาน ขอให้คุณใช้ตัวแปรอาร์เรย์ชนิดนี้ ให้น้อยที่สุดเท่าที่จะเป็นไปได้ เนื่องจากว่า เมื่อคุณประกาศตัวแปรอาร์เรย์แบบสแตติกแล้ว VB จะจองหน่วยความจำเท่ากับจำนวนสมาชิกทันที ถึงแม้ว่า คุณจะไม่มีการใช้งานตัวแปรก็ตาม หรือใช้งานตัวแปรไม่ครบทุกตัว คุณจะสูญเสียหน่วยความจำในส่วนนี้ไป เช่น กรณีข้างต้น สมมติว่า คุณใช้งานเพียง 3 ตัวแปร x(0), x(1) และ x(2) คุณต้องเสียหน่วยความจำไป 5 ส่วน ซึ่งไม่มีความจำเป็นแต่อย่างใด ขอให้คุณใช้อาร์เรย์ชนิดไดนามิกจะเหมาะสมกว่า

ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)

     เป็นตัวแปรอาร์เรย์ที่ใช้สำหรับกลุ่มของตัวแปร ที่คุณไม่ทราบจำนวนที่แน่นอน หรือคุณทราบแต่ต้องการใช้อาร์เรย์แบบไดนามิก เพื่อประหยัดทรัพยากรระบบ โดยที่ตัวแปรแบบอาร์เรย์ จะปรับขนาดจำนวนสมาชิกให้เท่ากับ จำนวนตัวแปรที่คุณต้องการใช้ในขณะนั้น จะเห็นได้ว่า มีการใช้ทรัพยากรระบบ เมื่อต้องการเท่านั้น ซึ่งเป็นข้อดีเป็นอย่างยิ่ง มีรูปแบบการประกาศดังนี้
Dim intCnt( ) As Integer
     ข้อแตกต่างของตัวแปรอาร์เรย์แบบไดนามิก คือ คุณไม่ต้องระบุจำนวนสมาชิกในวงเล็บ จะเห็นได้ว่ามีความยีดหยุ่นมากกว่า ตัวแปรอาร์เรย์แบบสแตติก แต่ถ้าในขณะรัน คุณต้องการกำหนดจำนวนสมาชิกที่แน่นอน คุณต้องใช้คำสั่งดังนี้
ReDim [Preserve] varname(subscripts) As type
  • คำสั่ง ReDim หมายถึง คุณต้องการกำหนดจำนวนสมาชิกในตัวแปรอาร์เรย์ใหม่
  • คำสั่ง Preserve หมายถึง คุณต้องการเก็บข้อมูลเดิม ที่ตัวแปรอาร์เรย์ดังกล่าวเก็บไว้
  • ตัวแปร varname หมายถึง ตัวแปรอาร์เรย์ที่คุณต้องการกำหนดจำนวนสมาชิก
  • ตัวแปร subscripts หมายถึง ขนาดจำนวนสมาชิกที่คุณต้องการ จะต้องเป็นเลขจำนวนเต็ม
  • ตัวแปร type หมายถึง ชนิดของข้อมูลที่คุณต้องการให้ตัวแปรอาร์เรย์ทดแทน เช่น
สมมติว่าคุณประกาศตัวแปรอาร์เรย์  Dim intCnt( ) As Integer ต่อมาคุณต้องการระบุขนาดจำนวนสมาชิกของตัวแปรดังกล่าว ให้คุณทำดังนี้
ReDim intCnt(10 ) As Integer
แต่ถ้าคุณต้องการรักษาค่า ที่ตัวแปรอาร์เรย์ intCnt ( ) เก็บไว้ด้วย คุณต้องเพิ่มเติมดังนี้
ReDim Preserve intCnt(10 ) As Integer
     จากกรณีที่กล่าวมา เป็นการสร้างตัวแปรอาร์เรย์แบบ 1 มิติ คุณสามารถเพิ่มเติมให้ตัวแปรอาร์เรย์มีประสิทธิภาพมากยิ่งขึ้น ด้วยการใช้ ตัวแปรอาร์เรย์แบบหลายมิติ

การสร้างตัวแปรอาร์เรย์มากกว่า 1 มิติ

     แม้ว่าตัวแปรแบบอาร์เรย์ จะสามารถเก็บค่าตัวแปรเป็นชุดได้แล้วก็ตาม คุณยังสามารถขยายขีดความสามารถของตัวแปรอาร์เรย์ได้อีก โดยที่ขอให้คุณจำลองตัวแปรอาร์เรย์ให้มีลักษณะช่องสี่เหลี่ยมติดๆ กัน ถ้าคุณต้องการใช้งานห้องใด ที่ห้องนั้นๆ จะมีเลขที่ห้องอยู่ ดังรูป
x(0) x(1) x(2) x(3)  x(n)
     เมื่อคุณต้องการใช้งานตัวแปรอาร์เรย์ตัวใด คุณจะใช้ความแตกต่างของค่า subscript เพื่ออ้างถึงตัวแปรนั้นๆ กรณีนี้เป็นอาร์เรย์ชนิด 1 มิติ แต่ถ้าคุณต้องการเพิ่มแถวเข้าไปอีก จะเกิดอะไรขึ้น ดังรูป

x(0) (0) x(0) (1) x(0) (2) x(0) (3) x(0) (n)
x(1) (0) x(1) (1) x(1) (2)  x(1) (3) x(1) (n)
ตัวอย่างข้างต้น คุณยังสามารถเพิ่มเติมมิติ (Dimentions) เข้าไปได้อีก โดยที่ค่า subscript ไม่มีทางซ้ำกันได้ ดังนั้น จึงเป็นแนวความคิดที่สร้างตัวแปรอาร์เรย์ที่มีมิติที่ 2 ขึ้นมา ซึ่งคุณต้องทำดังนี้
Dim x(1 To 5,1 To 4 ) As Long
ข้อสังเกต จะใช้เครื่องหมาย , เพื่อเพิ่มมิติขึ้นมา จากกรณีนี้ สามารถจำลองตัวแปรอาร์เรย์ 2 มิติได้ดังนี้

x(1,1) x(1,2) x(1,3) x(1,4)
x(2,1) x(2,2) x(2,3) x(2,4)
x(3,1) x(3,2) x(3,3) x(3,4)
x(4,1) x(4,2) x(4,3) x(4,4)
x(5,1) x(5,2) x(5,3) x(5,4)
     คุณจะได้ตัวแปรทั้งสิ้น 20 ตัว ที่มีความแตกต่างกัน ซึ่งคุณอาจจะใช้แบบ Dim x(19 ) As Long ก็ได้ ไม่ผิดแต่อย่างใด นั่นคือ คุณจะได้ x(0) ถึง x(19)

การใช้งานคอนโทรลอาร์เรย์

     ในการใช้งานตัวแปร เราสามารถใช้งานในลักษณะแบบปกติ และใช้งานแบบอาร์เรย์ ซึ่งหมายถึง การใช้งานตัวแปรชุด ที่มีการตั้งชื่อเหมือนกัน ต่างกันตรงที่ตัวแปรแต่ละตัวมีลำดับ (ค่า index) ต่างกัน ซึ่งแนวความคิดนี้เอง สามารถนำมาใช้กับคอนโทรลได้เช่นกัน นั่นคือ เราสามารถใช้งานคอนโทรลประเภทเดียวกัน โดยที่ตั้งชื่อเหมือนกัน ต่างกันตรงที่คอนโทรลแต่ละตัว จะมีค่า index ที่ทำให้คอนโทรลแต่ละตัว ไม่เหมือนกันนั่นเอง ซึ่งก็คือ การใช้งานคอนโทรลแบบอาร์เรย์ (Control Array)       ให้คุณทดลองโดยการวางคอนโทรล TextBox 1 ตัวบนฟอร์ม จากนั้นให้คุณคลิ๊กที่ตัวคอนโทรล TextBox เลือกคำสั่ง Copy แล้วเลือกคำสั่ง Paste ซึ่งคุณจะได้พบกับไดอะล๊อกบ๊อกซ์ ดังรูป
vb3-8.jpg (9478 bytes)
รูปที่ 3-8 แสดงไดอะล๊อกบ๊อกซ์ยืนยันการใช้งานคอนโทรลอาร์เรย์
     ไดอะล๊อกบ๊อกซ์ดังกล่าว เป็นการยืนยันว่า คุณต้องการใช้งานคอนโทรล TextBox ในรูปแบบอาร์เรย์ ซึ่งเมื่อคุณตอบ Yes แล้ว คอนโทรล TextBox จะถูกใช้งานในลักษณะคอนโทรลอาร์เรย์
vb3-9.gif (4020 bytes)
รูปที่ 3-9 แสดงการใช้งานคอนโทรล TextBox แบบคอนโทรลอาร์เรย์
     จากรูปที่ 3-9 คุณจะพบว่า ชื่อของคอนโทรล TextBox ทั้ง 2 ตัวเหมือนกัน ให้คุณสังเกตได้ที่คุณสมบัติ Name ในหน้าต่างคุณสมบัติ รวมถึงชื่อของคอนโทรล TextBox ที่ปรากฎอยู่ในช่อง list box ในหน้าต่างคุณสมบัติด้วย ซึ่งจะเห็นว่า มีตัวเลขอยู่ในวงเล็บ Text1(0) สำหรับคอนโทรล TextBox ตัวแรกและ Text1(1) สำหรับคอนโทรล TextBox ตัวที่ 2 ดังรูป

vb3-10.jpg (18009 bytes) รูปที่ 3-10 แสดงข้อแตกต่างของคอนโทรล TextBox แต่ละตัว เมื่อใช้งานในลักษณะของคอนโทรลอาร์เรย์
     เมื่อคุณต้องการอ้างอิงถึงคอนโทรล TextBox แต่ละตัว จึงจำเป็นที่จะต้องมีการใส่ค่า index ประจำตัวของคอนโทรล TextBox แต่ละตัวเข้าไปด้วย เช่น ถ้าคุณต้องการเพิ่มข้อความเข้าไปที่คอนโทรล TextBox ตัวที่ 1 ให้คุณเขียนโค้ดดังนี้
Text1(0).Text = "Your Text"
     สำหรับการใช้งานคอนโทรลอาร์เรย์นี้ ถ้าคุณมีการแก้ไขคุณสมบัติต่างๆ ของคอนโทรลต้นแบบแล้ว คุณยังสามารถ copy คุณสมบัติต่างๆ ที่คุณได้แก้ไขไว้กับคอนโทรลต้นแบบนั้นๆ นำมาใช้กับคอนโทรลอาร์เรย์ตัวต่อๆ ไปได้อีกด้วย ซึ่งจะช่วยให้คุณสามารถแก้ไขคุณสมบัติคล้ายๆ กันได้อย่างรวดเร็วอีกด้วย  

การสร้างชนิดของตัวแปรขึ้นใช้เอง (User-defined data type)

     นอกจากชนิดของข้อมูลที่ VB สนับสนุนแล้ว คุณยังสามารถนำชนิดของข้อมูลพื้นฐานดังกล่าวทั้งหมด มาสร้างเป็นชนิดข้อมูล ตามที่คุณต้องการได้อีกด้วย โดยมีรูปแบบดังนี้ [Private | Public] Type varname
   elementname [([subscripts])] As type
   [elementname [([subscripts])] As type]
   . . .

End Type

ความหมายของแต่ละส่วนมีดังนี้

คำสั่ง รายละเอียด
Public (Optional) หมายถึง กำหนดให้ชนิดของข้อมูลที่สร้างขึ้นมา สามารถใช้ได้ทั้งโปรเจ็กต์ ทุกโพรซีเดอร์ ทุกโมดูล
Private (Optional) หมายถึง กำหนดให้ชนิดของข้อมูลที่สร้างขึ้นมา สามารถใช้ได้เฉพาะโมดูลที่ประกาศเท่านั้น ซึ่งเป็นค่า default คุณจะใส่หรือไม่ใส่ก็ได้
varname คุณต้องใส่ ซึ่งเป็นชื่อของชนิดข้อมูลที่คุณกำหนดขึ้นมาใหม่ โดยสร้างจากชนิดข้อมูลพื้นฐานที่ VB สนับสนุน
elementname ชื่อของตัวแปร ซึ่งเป็นส่วนหนึ่งของชนิดข้อมูลที่คุณสร้างขึ้นมา
subscripts คุณยังสามารถสร้างตัวแปรแบบอาร์เรย์ ที่เป็นส่วนหนึ่งของชนิดข้อมูลที่คุณกำหนดมาได้อีกด้วย
type ชนิดของข้อมูลพื้นฐานแต่ละตัว ที่เป็นองค์ประกอบของข้อมูลที่คุณสร้างขึ้นมา เช่น Byte,  Boolean,  Integer,  Long,  Currency,   Single,  Double,   Date,  String (ไม่จำกัดความยาว), String * length (จำกัดความยาว),  Object,  Variant รวมถึงอาร์เรย์ด้วย
ตัวอย่างเช่น
Type Student
  FirstName As String

  LastName As String
  ID As Integer
End Type

เป็นการสร้างชนิดข้อมูลขึ้นมาใหม่ โดยให้ชื่อว่า Student เมื่อคุณต้องการใช้งานตัวแปรชนิดนี้ คุณต้องประกาศดังนี้
Dim Input As Student
ส่งผลให้ตัวแปร Input มีโครงสร้างเหมือนกับชนิดข้อมูล Student และเมื่อคุณต้องการอ้างถึงตัวแปรต่างๆ ที่อยู่ในโครงสร้างนี้ ให้คุณทำดังนี้
Input.FirstName = "Suphachai"
Input.LastName = "Somphanit"
Input.ID = 12345678

     คุณจะต้องระบุข้อมูลให้ตรงกับชนิดของข้อมูลแต่ละตัว ในโครงสร้างนั้นๆ ด้วย ซึ่งชนิดของข้อมูลต่างๆ ที่ประกอบขึ้นมา จะมีขอบเขต และความสามารถ เหมือนกับการใช้งานชนิดของข้อมูลตามปกติ

การประกาศค่าคงที่ (Constant)

     ในการประกาศค่าคงที่ คุณต้องใช้คำสั่ง Const เพื่อสร้างค่าคงที่ โดยปกติแล้ว จะใช้ค่าคงที่เมื่อคุณทราบจำนวนที่แน่นอน และค่าดังกล่าว คุณไม่ต้องการให้มีการเปลี่ยนแปลง ถ้ามีการเปลี่ยนแปลงค่าคงที่จะเกิดข้อผิดพลาด มีรูปแบบการประกาศดังนี้ [Public | Private] Const constname [As type] = expression
ความหมายของแต่ละส่วนมีดังนี้

คำสั่ง รายละเอียด
Public Optional หมายถึง ให้ค่าคงที่สามารถเรียกใช้งานได้  ทุกฟอร์ม ทุกโพรซีเดอร์ คุณต้องประกาศในไฟล์โมดูลเท่านั้น ซึ่งจะมีความหมายเช่นเดียวกับ ตัวแปรระดับ Public หรือระดับโมดูลนั่นเอง
Private Optional หมายถึง ให้ค่าคงที่สามารถใช้งานได้เฉพาะในฟอร์ม หรือโมดูลที่ประกาศเท่านั้น ซึ่งเป็นค่าปกติที่ VB ตั้งไว้อยู่แล้ว
Const คำสั่งนี้ หมายถึงเป็นการเริ่มต้นสร้างค่าคงที่
constname ชื่อค่าคงที่ คุณสามารถตั้งชื่อได้อย่างอิสระ โดยที่ไม่ผิดกฎการตั้งชื่อของ VB
type Optional เป็นการกำหนดชนิดของค่าคงที่ ซึ่งอาจเป็น Byte, Boolean, Integer, Long, Currency, Single, Double,  Date, String, หรือ  Variant คุณสามารถกำหนดชนิดของค่าคงที่ โดยใช้คำสั่งนี้ร่วมด้วยก็ได้
expression ค่าคงที่ ที่คุณต้องการกำหนดให้กับ constname
 เช่น Const Vat = 0.07 
        Public Const MyName = "Suphachai" 
        Private Const cntyear As Integer = 12 
        Const MyStr = "Hello World", mgpa As Double = 4.00


ตัวดำเนินการใน VB 6.0 (Operators)

     ตัวดำเนินการ คือ การนำข้อมูลอย่างน้อยที่สุด 2 ตัวมากระทำอย่างใดอย่างหนึ่ง เช่น บวกกัน ลบกัน เชื่อมต่อกัน เปรียบเทียบกัน ทดสอบค่ากัน เป็นต้น ซึ่งสามารถแบ่งได้ 4 ประเภท ดังนี้

ตัวดำเนินการด้านคณิตศาสตร์ (Arithmatic Operators)

     เป็นตัวดำเนินการที่ใช้สำหรับ บวก ลบ คูณ หาร ตัวเลข มีรายละเอียดดังนี้

ชื่อตัวดำเนินการ ลักษณะตัวดำเนินการ ตัวอย่าง ผลลัพธ์
การบวก + 15+20 35
การลบ - 20-15 5
การคูณ * 5*4 20
การหาร / 9/3 3
การหารจำนวนเต็ม \ 10\3 3
การ Modulo Mod 10 Mod 3 1
การยกกำลัง ^ 2^2 4
การเปลี่ยนเครื่องหมาย - 5 -5
รายละเอียดของตัวดำเนินการทางคณิตศาสตร์
การบวก, ลบ, คูณ, หาร เป็นไปตามกฏทางคณิตศาสตร์ ที่น่าสนใจคือ
  • การหารจำนวนเต็ม หมายถึง จะเอาแต่เฉพาะเลขที่เป็นจำนวนเต็มเท่านั้น ส่วนเศษ จะปัดทิ้ง เช่น 10\6=1.6666 แต่จะได้ผลลัพธ์เท่ากับ 1 แม้ว่า .6666 จะเกินครึ่งก็ตาม ไม่มีการปัดเศษแต่อย่างใด
  • การ Mod หมายถึง จะเอาแต่เศษที่เหลืออยู่จากการ Mod เช่น 10 Mod 3 =1 เนื่องจาก 10 หาร 3 ไม่ลงตัว เหลือเศษ 1 จึงได้ผลลัพธ์ 1, 20 Mod 6 =2 (เหลือเศษ 2 นั่นเอง)

ตัวดำเนินการทางด้านตรรกะ (Logical Operator)

     เป็นตัวดำเนินการที่ให้ผลลัพธ์แค่ 2 ค่าเท่านั้น คือ True และ False มักจะใช้ในการตรวจสอบเงื่อนไข หรือสร้างเงื่อนไขขึ้นมาเพื่อทดสอบกรณีต่างๆ เสมอในการเขียนแอพพลิเคชัน มีรายละเอียดดังนี้

A B And Or Xor Eqv Imp Not A
 True  True True True False True True False
 True False False True True False False False
False  True False True True False True True
False False False False False True True True
รายละเอียดของตัวดำเนินการทางตรรกะ
  • ตัวดำเนินการ And จะมีกรณีเดียวที่เป็นจริงก็คือ ทั้ง 2 พจน์ต้องเป็นจริง
  • ตัวดำเนินการ Or จะมีกรณีเดียวที่เป็นเท็จก็คือ ทั้ง 2 พจน์ต้องเป็นเท็จ
  • ตัวดำเนินการ Xor ถ้า 2 พจน์มีค่าต่างกัน จะได้ผลลัพธ์เป็นจริง
  • ตัวดำเนินการ Eqv ถ้า 2 พจน์มีค่าเหมือนกัน  จะได้ผลลัพธ์เป็นจริง
  • ตัวดำเนินการ Imp จะมีกรณีเดียวที่มีค่าเป็นเท็จคือ พจน์หน้าเป็นจริง พจน์หลังเป็นเท็จ
  • ตัวดำเนินการ Not เป็นการสลับค่าของพจน์ เช่น ถ้า A เป็นจริง จะได้ผลลัพธ์เป็นเท็จ

ตัวดำเนินการทางด้านการเปรียบเทียบ (Comparison Operators)

     หมายถึง การนำพจน์ตั้งแต่ 2 พจน์ขึ้นไป มาเปรียบเทียบกัน เพื่อทดสอบเงื่อนไข หรือสร้างเงื่อนไข มักจะใช้คู่กับตัวดำเนินการทางด้านตรรกะ เพื่อตรวจสอบเงื่อนไขต่างๆ เสมอ  มีรายละเอียดดังนี้

ตัวดำเนินการ ชื่อตัวดำเนินการ
< น้อยกว่า
> มากกว่า
<= น้อยกว่าหรือเท่ากับ
>= มากกว่าหรือเท่ากับ
= เท่ากับ
<> ไม่เท่ากับ

ตัวดำเนินการทางด้านการเชื่อมข้อความ (Concentration Operators)

     ถ้าโดยตามหน้าที่แล้ว จะเป็นการเชื่อมข้อความ 2 ข้อความเข้าด้วยกัน แต่ยังมีกรณียกเว้นที่จะเป็นการบวกกันของพจน์ 2 พจน์ เข้าด้วยกัน ซึ่งขึ้นอยู่กับชนิดของพจน์ที่จะมากระทำกัน  สามารถแยกออกเป็นกรณี ได้ดังนี้

ตัวดำเนินการ กรณี ตัวอย่าง ผลลัพธ์
+  String + String "Visual"+"Basic 6.0" "Visual Basic 6.0"
&  String & String "Visual" & "Basic 6.0" "Visual Basic 6.0"
+ String(numeric)+numeric  "20"+6 26
&  String(numeric)&numeric "20"+6  206


Subscribe to RSS Feed Follow me on Twitter!