วันพุธที่ 21 สิงหาคม พ.ศ. 2556

ใบความรู้ที่ 1.3 โครงสร้างโปรแกรมภาษา C# และข้อมูลพื้นฐานและตัวดำเนินการ

ใบความรู้ที่ 1.3
โครงสร้างโปรแกรมภาษา C# และข้อมูลพื้นฐานและตัวดำเนินการ
การโปรแกรมภาษา C# ขั้นพื้นฐานที่มีเฉพาะส่วนของโปรแกรมหลักและไม่มีโปรแกรมย่อย(subroutine) จะมีส่วนประกอบดังนี้
namespace ___(A)___
{
     class ___(B)___
    {
          static void Main()
         {
              ___(C)___
          }
     }
}

         ตามโครงสร้างข้างต้น ณ ตำแหน่ง (A), (B), and (C) มีความหมายดังต่อไปนี้
• ตำแหน่ง (A) ระบุชื่อของเนมสเปซ (namespace) ซึ่งใช้ในการกำหนดขอบเขตให้กับคลาสต่าง ๆ
รวมถึงใช้ในการจัดโครงสร้างของโปรแกรมขนาดใหญ่ให้เป็นสัดส่วนอีกด้วย โดยเฉพาะอย่างยิ่ง
ในการพัฒนาแอพลิเคชันที่ซับซ้อนโดยผู้พัฒนาหลายคน การกำหนดเนมสเปซของตนเองสามารถ
ป้องกันปัญหาการตั้งชื่อคลาสหรือค่าคงที่อื่น ๆ ซ้ำกันได้ ส่วนไลบรารีของภาษา C# ที่มีให้เรา
เรียกใช้งานได้ ก็ถูกเตรียมเอาไว้ในเนมสเปซชื่อต่าง ๆ เช่นเดียวกัน
• ตำแหน่ง (B) ระบุชื่อของคลาส (class)
• ตำแหน่ง (C) เป็นพื้นที่สำหรับคำสั่งต่าง ๆ ที่ผู้เขียนโปรแกรมต้องการให้คอมพิวเตอร์ปฏิบัติตาม
        นอกจากนี้โปรแกรมที่ไม่ซับซ้อนมากยังสามารถละส่วนที่ระบุเนมสเปซทิ้งไปได้ คลาสที่ถูกสร้าง
ขึ้นมาโดยไม่อยู่ในขอบเขตของเนมสเปซใดจะถือว่าอยู่ในเนมสเปซกลาง (global namespace)
class ___(B)___
{
      static void Main()
     {
          ___(C)___
     }
}

โปรแกรมภาษา C# ซึ่งแสดงข้อความ Hello World! ออกทางจอภาพ จากนั้นรอจนกว่าผู้ใช้จะกด Enter และจบการทำงาน โปรแกรมนี้อยู่ในเนมสเปซชื่อ HelloApp และคลาสชื่อ HelloClass
namespace HelloApp
{
      class HelloClass
      {
            static void Main()
            {
                  System.Console.WriteLine("Hello World!");
                 System.Console.ReadLine();
            }
      }
}

โปรแกรมภาษา C# ซึ่งให้ผลลัพธ์เช่นเดียวกับโปรแกรมข้างต้น แต่เขียนโดยไม่ระบุเนมสเปซ
class HelloClass
{
      static void Main()
      {
             System.Console.WriteLine("Hello World!");
             System.Console.ReadLine();
      }

}

กฎการตั้งชื่อตัวระบุในภาษา C#
            โปรแกรมภาษา C# ที่นำไปใช้งานจริงมักจะมีการใช้งานตัวระบุ (identifier) อยู่ทั่วไปภายในโปรแกรม เช่นชื่อของเนมสเปซและคลาสที่ได้กล่าวไปข้างต้น ภาษา C# ได้จำกัดกฎเกณฑ์การตั้งชื่อให้ตัวระบุเอาไว้ดังต่อไปนี้
• ชื่อตัวระบุต้องประกอบด้วยตัวอักษรภาษาอังกฤษ (A-Z,a-z) ตัวเลข (0-9) หรือเครื่องหมายขีดเส้น
ใต้ (_) เท่านั้น
• ตัวอักษรตัวแรกของชื่อต้องเป็นตัวอักษรภาษาอังกฤษ หรือตัวขีดเส้นใต้
• ชื่อตัวระบุจะมีความยาวได้ไม่เกิน 63 ตัวอักษร
• ชื่อตัวระบุต้องไม่ซ้ำกับคำสงวน (reserved word) เช่น class, namespace, int, void,

  static

ชนิดข้อมูล (Data Types) ใน C#
           C# กำหนดชนิดของข้อมูลไว้หลากหลายชนิดเพื่อรองรับการจัดเก็บข้อมูลหลาย ๆ ประเภท
ตารางที่ 1 แสดงชนิดข้อมูลหลัก ๆ ที่พบบ่อยในโปรแกรมทั่วไป
ตารางที่ 1 ชนิดข้อมูลหลัก ๆ ของภาษา C#
ชนิดข้อมูล           คำอธิบาย
char                     อักขระเดี่ยว เช่น a
bool                     ค่าความจริง เป็นไปได้สองค่าคือ true หรือ false
byte                     จำนวนเต็มไม่มีเครื่องหมาย ตั้งแต่ 0 ถึง 255
int                       จำนวนเต็มมีเครื่องหมาย ตั้งแต- 2,147,483,648 ถึง 2,147,483,647
uint                     จำนวนเต็มไม่มีเครื่องหมาย ตั้งแต่ 0 ถึง 4,294,967,295
long                     จำนวนเต็มมีเครื่องหมาย ตั้งแต- 9,223,372,036,854,775,808 ถึง                                                    9,223,372,036,854,775,807
ulong                   จำนวนเต็มไม่มีเครื่องหมาย ตั้งแต่ 0 and 18,446,744,073,709,551,615
float                    จำนวนจริง (มีทศนิยมได้) เช่น 3.14159
double                 จำนวนจริงที่เก็บความละเอียดมากเป็นสองเท่า

string                   ข้อความ (สายอักขระ) เช่น Hello

ตัวแปร (Variables)
           ตัวแปร (variable) เป็นตัวระบุประเภทหนึ่งที่นำมาใช้ในการอ้างถึงข้อมูล โดยค่าของมันสามารถถูกเปลี่ยนแปลงได้ตลอดเวลาที่โปรแกรมกำลังทำงานอยู่ ในภาษา C# ตัวแปรทุกตัวต้องถูกประกาศก่อนที่จะถูกนำมาใช้งาน โดยมีการระบุชนิดข้อมูลที่จะใช้กับตัวแปรนั้น ๆ ไว้ด้วยตามรูปแบบดังนี้
DataType variableName;

          ในที่นี้ variableName คือชื่อของตัวแปร และ DataType คือชื่อของชนิดข้อมูลที่ตัวแปรนี้
เก็บค่าได้ (ตามตัวอย่างในตารางที่ 1)
           นอกจากการประกาศตัวแปรตามแบบข้างต้นแล้ว เรายังสามารถกำหนดค่าเริ่มต้นให้กับตัว
แปรนั้นๆ ได้อีกด้วย โดยมีรูปแบบดังนี้
DataType variableName = initialValue;

           จะเห็นว่าส่วนที่เพิ่มขึ้นมาคือเครื่องหมาย = และ initialValue ซึ่งระบุค่าเริ่มต้นให้กับตัว
แปรชื่อvariableName

คำสั่งด้านล่างประกาศตัวแปรชื่อ distance ที่มีชนิดข้อมูลเป็น uint และไม่มีการกำหนดค่าเริ่มต้น
uint distance;

คำสั่งด้านล่างประกาศตัวแปรชื่อ salary ที่มีชนิดข้อมูลเป็น long และค่าเริ่มต้นเป็น 30000
long salary = 30000;

ค่าคงที่ (Constants)
            ค่าคงที่เป็นตัวระบุอีกประเภทหนึ่งที่นำมาใช้ในการอ้างถึงข้อมูลเช่นเดียวกับตัวแปร สิ่งที่แตกต่างจากตัวแปรก็คือค่าของมันไม่สามารถเปลี่ยนแปลงได้อีกหลังจากการประกาศในภาษา C# ค่าคงที่ต้องถูกประกาศโดยระบุชนิดข้อมูลและค่าตั้งต้นก่อนถูกนำมาใช้งานเสมอการประกาศค่าคงที่จะคล้ายคลึงกับการประกาศตัวแปร แตกต่างกันตรงที่ต้องมีการระบุด้วยคีย์เวิร์ดconst ดังแสดง
const DataType constantName = value;

            ในที่นี้ constantName คือชื่อของค่าคงที่ ส่วน DataType คือชื่อชนิดข้อมูลที่ค่าคงที่นี้ใช้
อ้างถึง และ value ระบุค่าที่ค่าคงที่นี้ถูกใช้เป็นตัวแทน

คำสั่งด้านล่างประกาศค่าคงที่ชื่อ myconst โดยมีชนิดข้อมูลเป็นแบบ double และใช้แทนค่า 2.71828

const double myconst = 2.71828;

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

1:    using System;
2:
3:    class Intro {
4:         static void Main() {
5:               const string MY_NAME = "Harry";
6:
7:               Console.WriteLine("Hello {0}, how are you?", MY_NAME);
8:               Console.WriteLine("And how can I help you, {0}?",
9:                        MY_NAME);
10:              Console.ReadLine();
11:       }

12:   }

           ตัวแปร)รวมถึงค่าคงที่ (ที่มีชนิดข้อมูลแบบเดียวกันสามารถถูกประกาศร่วมกันภายในคำสั่งเดียวกันได้โดยคั่นด้วยเครื่องหมายคอมม่า
const int FreezingPoint = 32;
int x, y;
int wd = 5, ht = 8;
const double PI = 3.1424;
char ch = 'A';
string mynote = "Hello, Kitty";

int j = 5;


นิพจน์ทางคณิตศาสตร์ (Arithmetic Expressions)
          นิพจน์ (expression) ภายในโปรแกรมภาษา C# หมายถึงส่วนของโปรแกรมที่สามารถถูกตีความเป็นค่าต่าง ๆ ได้ โดยนิพจน์อาจประกอบด้วยเทอมเพียงเทอมเดียว หรือเกิดจากการผสมกันของนิพจน์อื่นที่เล็กกว่า ด้านล่างเป็นตัวอย่างของนิพจน์ที่ประกอบด้วยเทอมเพียงเทอมเดียว
• ตัวเลขโดด เช่น 3000, 1.414
• ข้อความ เช่น "Hello, World"
• ค่าความจริง ได้แก่ true และ false
• ตัวแปรหรือค่าคงที่เดี่ยว ๆ ที่ผ่านการกำหนดค่าให้แล้ว เช่น myName, salary
         ในที่นี้จะเน้นการศึกษาเกี่ยวกับนิพจน์ที่ให้ค่าเป็นตัวเลข เรียกว่า นิพจน์ทางคณิตศาสตร์ (arithmeticexpression) โดยเราสามารถผสมนิพจน์ต่าง ๆ ให้เป็นนิพจน์ที่ซับซ้อนขึ้นโดยอาศัยตัวดำเนินการทางคณิตศาสตร์ที่มีให้ในภาษา C# ดังตารางที่2

ตารางที่ 2 ตัวดำเนินการทางคณิตศาสตร์

ตัวดำเนินการ     สัญลักษณ์    จำนวนนิพจน์ที่นำมาผสม    ตัวอย่าง  ค่าของนิพจน์เมื่อ x = 20
บวก (add)               +                           2                          x+4                        24
ลบ (subtract)           -                            2                         32-x                       12
คูณ (multiply)          *                           2                          x*2                        40
หาร (divide)            /                            2                           x/2                        10
หารเอาเศษ

(modulo)               %                            2                         x%6                         2


ตัวดำเนินการ    สัญลักษณ์    จำนวนนิพจน์ที่นำมาผสม    ตัวอย่าง   ค่าของนิพจน์เมื่อ x = 20
กลับเครื่องหมาย
(negate)                    -                               1                            -x                        -20
จัดกลุ่ม                   (    )                         N/A                       (x+2)*3                    66

        หากนิพจน์ที่สร้างขึ้นมาใหม่ประกอบด้วยตัวดำเนินการมากกว่าหนึ่งตัว C# จะคำนวณค่าเรียง
ตามลำดับก่อนหลังดังนี้
•   (   )
•    *, / และ %
•    + และ -
•    หากตัวดำเนินการมีลำดับเท่าเทียมกัน คำนวณจากซ้ายไปขวา

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

การเรียกใช้งานคำสั่ง Write และ WriteLine โดยระบุเนมสเปสเต็มรูปแบบ
class Hello
{
      static void Main()
      {
          System.Console.Write("Hello, ");
          System.Console.WriteLine("everybody");
      }
}

            สังเกตว่าการเรียกใช้คำสั่ง Write และ WriteLine นั้นต้องระบุถึงคลาส Console ซึ่งเป็น
คลาสที่นิยามคำสั่งนี้เอาไว้ และเนื่องจากคลาส Console เป็นคลาสที่อยู่ในเนมสเปส System จึงต้อง
ระบุชื่อเนมสเปสไว้ด้วยตามตัวอย่าง อย่างไรก็ตามเราสามารถทำโปรแกรมให้สั้นลงได้โดยใช้คำสั่ง
using ซึ่งเป็นการสั่งให้คอมไพเลอร์ค้นหาคลาสที่เรียกใช้งานในเนมสเปสที่ระบุ ดังตัวอย่างต่อไปนี้

การเรียกใช้งานคำสั่ง Write และ WriteLine โดยใช้คำสั่ง using

using System;
class Hello
{
       static void Main()
      {
            Console.Write("Hello, ");
            Console.WriteLine("everybody");
      }

}

           คำสั่ง Write และ WriteLine นั้นยังสามารถเรียกใช้งานในรูปแบบที่ซับซ้อนกว่านี้อีกมาก ดังแสดงในตัวอย่างต่อไปนี้

การเรียกใช้งานคำสั่ง Write และ WriteLine โดยใช้สตริงกำหนดรูปแบบ (formatting string)
using System;
class Hello
{
       static void Main()
       {
             int width = 80, height = 30;
             Console.WriteLine("Area of {0}x{1} rectangle = {2}",
             width, height, width*height);
       }
}
             จะเห็นว่าสตริงที่เป็นพารามิเตอร์ตัวแรกของคำสั่ง WriteLine นั้นเป็นสตริงที่ใช้สำหรับ
กำหนดรูปแบบในการแสดงผลของนิพจน์ที่ตามมาอีกสามตัว สัญลักษณ์ {0} {1} และ {2} คือตำแหน่งที่ C# จะนำค่าของนิพจน์ width, height และ width*height มาแทนที่




1 ความคิดเห็น: