วันศุกร์ที่ 6 กันยายน พ.ศ. 2556

ใบความรู้ 2 การเขียนโปรแกรมด้วยภาษา C#

โครงสร้างโปรแกรมภาษา 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 มาแทนที่
การขอความช่วยเหลือ

          โปรแกรม MS Visual C# 2008 Express (รวมถึงโปรแกรมอื่น ๆ ในชุด MS Visual Studio 2008
Express) มีการเชื่อมต่อกับระบบไลบรารีของ Microsoft Developer Network (MSDN Library) ซึ่งรวบรวมเอกสารเชิงเทคนิคสำหรับการพัฒนาซอฟต์แวร์บนไมโครซอฟต์วินโดวส์ไว้โดยละเอียด หาก MSDN Library ได้ถูกติดตั้งไว้พร้อมกับการติดตั้ง MS Visual C# ผู้พัฒนาโปรแกรมก็สามารถเรียก MSDN Library จากเมนู Help เพื่อเปิดเอกสารเพื่ออ่านรายละเอียดคุณสมบัติและการใช้งานคลาสต่าง ๆ ที่ถูกเตรียมไว้ใน .NET Framework ได้ รูปที่ 1.6 แสดงการเรียกใช้งาน MSDN Library จากหน้าจอหลักของ MS Visual C# ซึ่งจะได้หน้าจอคล้ายคลึงกับรูปที่ 1.7
รูปที่ 1.6 การเรียกใช้งาน MSDN Library จากหน้าจอหลักของ MS Visual C#

             การค้นเอกสารจาก MSDN Library นั้นสามารถทำได้หลายรูปแบบ ผู้พัฒนาโปรแกรมอาจเลือก
หัวข้อจากสารบัญทางด้านซ้ายมือ หรือป้อนคำค้นในกล่อง Search เพื่อค้นหาหัวข้อที่เกี่ยวข้อง รูปที่ 1.8
แสดงผลลัพธ์จากการค้นหาด้วยคำค้น Math
รูปที่ 1.7 หน้าจอของ MSDN Library ในส่วนของการค้นหา

รูปที่ 1.8 ผลลัพธ์จากการป้อนคำค้น Math

            นอกจากการเข้าสู่ MSDN Library ผ่านทางเมนู Help แล้ว ผู้พัฒนาโปรแกรมยังสามารถค้นหา
รายละเอียดของชื่อเนมสเปส คลาส คีย์เวิร์ด หรือเมท็อดที่ต้องการได้จากพื้นที่การเขียนโปรแกรมโดยตรง โดยเลื่อนเคอร์เซอร์มาวางไว้ในคำที่ต้องการสืบค้น แล้วกดปุ่ม F1 ดังแสดงตัวอย่างในรูปที่ 1.9 ซึ่งจะได้ผลลัพธ์เป็นรายการของคลาสที่อยู่ในเนมสเปส System ดังรูปที่ 1.10


รูปที่ 1.9 การขอความช่วยเหลือโดยใช้ปุ่ม F1

รูปที่ 1.10 รายชื่อคลาสในเนมสเปซ System หลังใช้คำสั่งค้นหาผ่าน MSDN Library

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

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