For Newbie Programmer with C# Language.... มาเรียนเขียนโปรแกรมภาษา C# เบื้องต้นกันเถอะ ที่นี่จะทำให้มุมมองของการโปรแกรมมิ่งของคุณเปลี่ยนไป
วันอังคารที่ 2 มิถุนายน พ.ศ. 2552
Object Foundation พื้นฐานความรู้ด้านอ๊อบเจ็ค
อ๊อบเจ็ค (Object)
เกริ่นให้เข้าใจเกี่ยวกับอ๊อบเจ็คกันซักเล็กน้อย ในชีวิตประจำวัน อ๊อบเจ็ค คือ วัตถุที่สามารถสัมผัสได้ทั้งทางตรงและทางอ้อม และมีคุณสมบัติและความสามารถหลายประการ
ในทางโปรแกรมมิ่งนั้น ความหมายของอ๊อบเจ็คไม่ได้แตกต่างจากในชีวิตประจำวันครับเพียงแต่เป็นการอ้างอิงให้รู้ว่า สิ่งที่เราสร้างหรือกำหนดขึ้นในโปรแกรมนั้นๆ มีลักษณะเฉพาะเจาะจง ความสามารถต่างๆ โดยที่เป็นอิสระจากสิ่งอื่นๆ ก็เหมือนกับสิ่งของวัตถุรอบๆตัวในชีวิตประจำวันนั่นเอง ที่มีการทำงานที่ต่างกันโดยสิ้นเชิง และไม่จำเป็นต้องสัมผัสได้เสมอไป
ยกตัวอย่างให้เข้าใจถึงอ๊อบเจ็คง่ายๆ เช่น ดินสอ (นี่ก็คือวัตถุ) คุณสมบัติ (property) ของดินสอ อาจจะมีลักษณะยาวหรือสั้น ตามแต่ชนิด ส่วนประกอบ แกรไฟต์ ความยาว ความกว้าง เส้นผ่านศูนย์กลาง นี่คือคุณสมบัติครับหรือจะเรียนลักษณะทางกายภาพก็ได้เช่นกัน ความสามารถ (Method) ของดินสอก็คือ สามารถทำให้เกิดลวดลายบนแผ่นกระดาษได้ นำไปเคาะทำให้เกิดเสียงได้ เป็นต้น สำหรับที่กล่าวมานี่เป็นการอธิบายอ๊อบเจ็คที่เรียกว่าดินสอนะครับ ดินสอก็มีหลายชนิดใช่ไหมครับ 2B เอย 3B เอย ในเชิงอ๊อบเจ็คจะเรียกชนิดของอ๊อบเจ็คว่า "Class" ครับจะเป็นการบ่งบอกชนิดของอ๊อบเจ็ค
**คุณสมบัติ (Property) ลักษณะทางกายภาพของวัตถุ เช่น ความกว้าง ความยาว ความสูง สี กลิ่น รส (ถ้ามีนะ)
**ความสามารถ (Method) ผลที่เกิดหรือพฤติกรรมเมื่อมีการใช้งานวัตถุ
เนื่องจากภาษา C# ก็เป็นหนึ่งในภาษาที่มีแนวคิดแบบ OOP
( Object Oriented Programming ) 100% จึงทำให้การเขียนโปรแกรมขนาดใหญ่เป็นเรื่องง่ายๆ เพราะการเขียนโปรแกรมจะเป็นในเชิงของวัตถุกล่าวคือ "เป็นอิสระจากกัน" ฟังดูอาจจะงงครับ ให้คุณผู้อ่านนึกถึงเครื่องคอมพิวเตอร์เครื่องหนึ่งที่มี ตู้ระบบรวมอุปกรณ์ต่างๆ อาทิเช่น แผงวงจรหลัก (เมนบอร์ด) การ์ดแสดงผล การ์ดเสียง ฮาร์ดดิส ฟรอปปี้ดิส และอีกมากมาย โอ๊คกำลังจะบอกว่า อุปกรณ์แต่ละมันทำหน้าที่เฉพาะเจาะจงของมันถูกไหมครับ การ์ดแสดงผลก็ควบคุมในส่วนของการแสดงผล การ์ดเสียงก็ควบคุมทางด้านเสียง ฮาร์ดดิสส่วนของการจัดเก็บข้อมูล เห็นไหมครับ แต่ละอุปกรณ์ล้วนมีหน้าที่เฉพาะเจาะจง เปรียบกับการเขียนโปรแกรมก็เช่นเดียวกัน เราจะเขียนการทำงานเฉพาะเจาะจงให้กับอ๊อบเจ็คแต่ละตัว โดยไม่มีความสัมพันธ์ใดๆต่อกัน เมื่อต้องการปรับแก้การทำงาน เราก็สามารถทำในส่วนของอ๊อบเจ็คนั้นๆได้ โดยที่เราไม่ต้องแก้โค้ดใหม่ทั้งหมด ซึ่งจะทำให้เสียเวลา หรือถ้าเป็นโปรแกรมใหญ่ๆก็จะเสียทั้งเงินต้นทุน และเวลามากมาย แนวคิด OOP จึงเป็นอีกทางเลือกของการเขียนโปรแกรมในปัจจุบัน
เพื่อเป็นแนวทางให้เข้าใจถึง อ๊อบเจ็ค อย่างดีก่อน แล้วเราจะมาพูดกันถึงการใช้งานของอ๊อบเจ็คกันอีกครั้ง.......
วันเสาร์ที่ 30 พฤษภาคม พ.ศ. 2552
Data & Data type (ข้อมูลและชนิดของข้อมูล)...!!!
เมื่อข้อมูลดิบถูกป้อนเข้ามาประมวลผลในคอมพิวเตอร์จึงเกิดปัญหาหน่วยความจำเนื่องจากขอบเขตของข้อมูล จึงต้องมีชนิดของข้อมูลเพื่อจำแนก ขอบเขตที่แน่นอนเพื่อที่คอมพิวเตอร์จะได้เตรียมพื้นที่ในการเก็บค่านั้นๆได้เพียงพอ
ข้อมูลชนิดจำนวนเต็ม
คือ ชนิดข้อมูลที่อยู่ในรูปจำนวนเต็มบวก เต็มลบ และ เต็มศูนย์
- int (ใช้พื้นที่ 32 บิต) (ขอบเขต 2^-31 ถึง 2^31 - 1)
- long (ใช้พื้นที่ 64 บิต) (ขอบเขต 2^-63 ถึง 2^63 - 1 )
- byte (ใช้พื้นที่ 8 บิต) (ขอบเขต 0 ถึง 2^8 )
- short (ใช้พื้นที่ 16 บิต) (ขอบเขต 2^-15 ถึง 2^15 - 1)
คือ ชนิดข้อมูลที่อยู่ในรูปจำนวนจริง มีจุดทศนิยม
- float (ใช้พื้นที่ 32 บิต)
- double (ใช้พื้นที่ 64 บิต)
** นิยมใช้ double มากกว่า float แม้ว่าจะใช้พื้นที่มากกว่าก็ตาม ทำให้ค่าที่เก็บนั้นไม่คลาดเคลื่อน
ข้อมูลชนิดตรรกะ
คือ ชนิดข้อมูลที่ใช้เก็บค่าทางตรรกะ ที่มีเพียง จริง และ เท็จ
- bool มีค่าเพียง 2 ค่า คือ true และ false
ข้อมูลชนิดข้อความ
คือ ชนิดข้อมูลที่ใช้เก็บข้อความ (string) และอักขระเพียงหนึ่งตัว (char)
- string (พื้นที่ขึ้นอยู่กับขนาดข้อความ) (สามารถรับอักขระได้หลายตัว)
- char (N/A) (สามารถรับอักขระได้เพียงตัวเดียว)
Variable ( ตัวแปร )....!!!
ก่อนที่จะนิยามตัวแปรต้องขออธิบายซักนิดครับ ถ้าพูดถึงวิชาคณิตศาสตร์ ตัวแปรนั้นจะหมายถึงสิ่งที่เราไม่ทราบค่าและต้องการหาค่าเหล่านั้น แต่ในทางโปรแกรมมิ่ง ตัวแปรคือ สิ่งที่ใช้เก็บค่าของข้อมูลนั้นๆ ในเงื่อนไขหนึ่งๆ
ตัวแปร คือ การตั้งชื่อให้กับหน่วยความจำเพื่อใช้ในการเก็บค่าต่างๆ ตัวแปรแต่ละตัวจะสามารถเก็บค่าได้เพียง 1 ค่าเท่านั้น
ในการเขียนโปรแกรมจะมีการจองพื้นที่หน่วยความจำ เพื่อใช้เก็บข้อมูล และต้องกำหนดชื่อเรียกเพื่อนอ้างอิงพื้นที่หน่วยความจำที่จอง ข้อมูลในตัวแปรสามารถเปลี่ยนแปลงได้ตลอดเวลา
กฏการตั้งชื่อตัวแปร
- ห้ามนำคำสงวน (reserved word) มาตั้งเป็นชื่อตัวแปร
- ชื่อตัวแปรจะต้องขึ้นต้นด้วย ตัวอักษรภาษาอังกฤษ อักขระพิเศษ @
และ _ (underscore) เท่านั้น - ตัวแปรจะต้องไม่ขึ้นต้นด้วยตัวเลข เช่น 9number, 105Ages ถือว่าผิด
- ชื่อตัวแปรจะต้องไม่ประกอบไปด้วยอักษรพิเศษทุกชนิด
(เครื่องหมาย /, +, -, *, %, !) และไม่มีการเว้นวรรค - ตัวอักษรใหญ่และเล็กจะถือว่าไม่เหมือนกัน เช่น mVar, MVAR จะถือว่าเป็นคนละตัวแปร
- ไม่ควรใช้ชื่อยาวเกินไป และควรตั้งให้เหมาะสมกับการนำไปใช้ เช่น ตัวแปรเก็บอายุก็ควรตั้งว่า Age เป็นต้น
ตัวอย่างการตั้งชื่อตัวแปรที่ถูก
- _Number (ถูกต้องเพราะขึ้นต้นด้วย _ และประกอบไปด้วยตัวอักษร)
- @humor123
- InputNumber (ถูกต้องเพราะขึ้นต้นด้วยตัวอักษร)
ตัวอย่างการตั้งชื่อตัวแปรที่ผิด
- 12Vat (ผิดเพราะ ขึ้นต้นด้วยตัวเลข)
- inter-net (ผิดเพราะมีอักขระพิเศษ - )
- case (ผิดเพราะ case เป็นคำสงวน)
การประกาศตัวแปร
ก่อนที่เราจะได้ใช้งานตัวแปร เราจะต้องทำการประกาศตัวแปรเสียก่อน เพื่อที่จะให้โปรแกรมได้จองพื้นที่หน่วยความจำ ไว้สำหรับรองรับค่าที่จะรับเข้ามาเก็บไว้ในตัวแปรต่อไป ขนาดของหน่วยความจำที่ใช้จะขึ้นอยู่กับชนิดของตัวแปร
(ชนิดของตัวแปร) (ชื่อของตัวแปร) ; // เป็นการประกาศค่าตัวแปรโดยที่ตัวแปรจะไม่มีค่าใดๆในหน่วยความจำ
เช่น int number ; // เป็นการประกาศตัวแปร number ชนิด int (จำนวนเต็ม)
เราสามารถประกาศตัวแปรได้หลายตัวพร้อมกัน
(ชนิดของตัวแปร) (ชื่อของตัวแปร 1), (ชื่อของตัวแปร 2), (ชื่อของตัวแปร 3), ...., (ชื่อของตัวแปร n) ;
เช่น int a,b,c,d,e ;
เราสามารถประกาศตัวแปรพร้อมกับใส่ค่าเริ่มต้นให้กับตัวแปรได้
(ชนิดของตัวแปร) (ชื่อของตัวแปร) = ค่าที่ของตัวแปร ;
เช่น double pi = 3.14 ; // เป็นการประกาศค่าตัวแปร pi ชนิด double (จำนวนจริง) พร้อมกับใส่ค่าให้กับตัวแปร pi
สำหรับการประกาศค่าของ string และ char จะมีการกำหนดค่าเริ่มต้นดังนี้
string text = "Oak" ; // จะมีเครื่องหมาย " มาครอบข้อความเอาไว้
char word = 'O' ; // จะมีเครื่องหมาย ' มาครอบข้อความเอาไว้
** สำหรับรายชื่อชนิดของข้อมูลให้ดูในหัวข้อ Data & Data type ครับ
การประกาศตัวแปรค่าคงที่ ( Constant )
ค่าคงที่ในโค้ดโปรแกรมมีหน้าที่เฉพาะเจาะจงในแต่ละค่า เช่น ค่า พาย ค่า e หรือค่าอะไรก็แล้วแต่ ซึ่งเมื่อเราประกาศตัวแปรค่าคงที่มาแล้วนั้น
จะไม่สามารถเปลี่ยนแปลงค่าได้อีก ไม่ว่าในส่วนของโปรแกรมใดๆ
รูปแบบการประกาศตัวแปรค่าคงที่
const (ชนิดของตัวแปรค่าคงที่) = (ค่าที่ต้องการ) ;
*** การประกาศตัวแปร const จะต้องประกาศพร้อมกับใส่ค่าให้กับตัวแปร จะประกาศเพียงชื่อไม่ได้
*** const int oak ; (ถือว่าผิด จะไม่สามารถรันโปรแกรมได้) x x x x x x
const double PI = 3.14159 ;
** ส่วนใหญ่มักจะตั้งชื่อค่างคงที่ด้วยตัวอักษรใหญ่
ส่วนประกอบในโค้ดของภาษา C#...!!!
เนื่องจากภาษา C# นั้นเป็นภาษาระดับสูงที่มีเครื่องหมายต่างๆมากมาย ก่อนเราจะเขียนโค้ดกัน มาทำความรู้จักกับเครื่องหมายต่างๆของภาษา C# กันก่อนดีกว่าครับ
Comment (ส่วนอธิบายโค้ด)
คือ ส่วนที่ compiler จะไม่ทำการแปลคำสั่ง ใช้เพื่ออธิบายโค้ดที่เราเขียนขึ้นครับ
- // คำอธิบาย (ในกรณีที่คำอธิบายมีบรรทัดเดียว)
- /*คำอธิบาย
คำอธิบาย (ในกรณีที่คำอธิบายมีหลายบรรทัด)
คำอธิบาย*/
Block (ขอบเขตคำสั่ง) ( "{", "}" )
คือ สัญลักษณ์ที่จะบอกขอบเขตการทำงานของแต่ละ function หรือ procedure และเป็นส่วนที่บรรจุคำสั่งต่างๆ (ตั้งแต่ 1 บรรทัดขึ้นไป) หรืออาจจะบรรจุบล๊อคย่อยๆได้อีกหลายบล๊อคเช่นกัน
- {...คำสั่ง...} // ตัวอย่างของบล๊อคที่บรรจุคำสั่งเพียงบรรทัดเดียว
(ในกรณีที่มีคำสั่งเพียง 1 บรรทัด ไม่จำเป็นต้องมี { } ก็ได้) - {
.....คำสั่ง 1 ;
.....คำสั่ง 2 ; // ตัวอย่างบล๊อคที่บรรจุคำสั่งหลายบรรทัด
.....คำสั่ง 3 ;
} - {
...{
........คำสั่ง 1 ; // ตัวอย่างบล๊อคที่บรรจุบล๊อคย่อย
...}
}
Semi Colon เครื่องหมายสิ้นสุดคำสั่ง (;)
คือ สัญลักษณํแทนการสิ้นสุดคำสั่งแต่ละคำสั่ง (แต่ละคำสั่งจะต้องปิดท้ายด้วย ; ซึ่งหมายถึงจบคำสั่งนั้นๆ) จะไม่ใช้ในการปิดบล๊อค (ขอบเขตของคำสั่ง)
- คำสั่ง 1;
คำสั่ง 2;
คำสั่ง 3; - คำสั่ง 1; คำสั่ง 2; คำสั่ง 3;
Method (ความสามารถของโปรแกรม)
คือ ส่วนของโปรแกรมที่อยู่ภายนอกโปรแกรมหลัก โดยจะนิยมเรียกกันว่าโปรแกรมย่อย (sub program) แนวคิดของ Method ก็คือการรวมคำสั่งที่ถูกใช้บ่อย และเราไม่จำเป็นต้องสนใจการทำงานภายในของ Method
Method สามารถแบ่งได้เป็น 2 ประเภท คือ
- Function (ฟังก์ชั่น)
เป็น Method ที่จะมีการส่งค่ากลับ เช่นเมื่อเราเรียกใช้งาน เราจะต้องนำตัวแปรมารับค่าที่ถูกส่งมาจาก Function
(จะขอกล่าวโดยละเอียดในบทถัดไป) - Procedure (โพรซีเจอร์)
เป็น Method ที่ไม่มีการส่งค่ากลับคืน เมื่อเราเรียกใช้จะไม่มีตัวแปรใดๆมารับค่า
Identifier (ไอเด็นติฟายเออร์)
คือ ชื่อที่ใช้สำหรับกำหนดให้กับส่วนประกอบต่างๆของโปรแกรม ไม่ว่าจะเป็น ตัวแปร ฟังก์ชั่น โพรซีเจอร์
(เป็นชื่อที่เราจะสามารถตั้งให้กับตัวแปรเก็บค่าต่างๆหรือชื่อฟังก์ชั่นได้ โดยมีเงื่อนไขตามแต่ละภาษากำหนด)
ประเภทของ Identifier มีดังนี้ คือ
- Reserved Word (คำสงวน)
คือ คำที่มีความหมายและเงื่อนไขการใช้ที่แน่นอน และไม่สามารถนำไปตั้งเป็นชื่อของตัวแปรได้
auto , string , int, double, goto, case, do, while, if, else, break
float, for, foreach, continue, default, long, void, enum, struct
stack, const, return, switch, in, class, checked, override, event
null, lock, random, private, public, protected, char, ref
** คำสงวนไม่จำเป็นต้องท่องนะครับ เมื่อได้ใช้บ่อยๆก็จะคุ้นเคยโดยอัตโนมัติ
** คำสงวนภายในโปรแกรม Visual Studio จะแสดงเป็นสีน้ำเงิน - User-Define Identifier
คือ ชื่อที่ผู้เขียนโปรแกรมจะต้องตั้งให้กับตัวแปร ฟังก์ชั่น และ เม็ดตอด ต่างๆ เพื่อเป็นการระบุหน้าที่
การใช้งานที่แตกต่างกันของแต่ละตัวแปร (หลักการตั้งชื่อตัวแปรจะขอกล่าวในบทถัดไป)
Chapter 6 'bout Magic Math...!!!
คราวนี้โอ๊คจะบอกเทคนิคในการคูณเลขสามหลักและเลขสี่หลักกับ เลข 11 ครับ ซึ่งจะเป็นเทคนิคที่เข้าใจง่ายและสามารถนำไปใช้ได้ดีด้วยครับในชีวิตประจำวันครับ มาดูเทคนิคกันเลยครับ
125 x 11 = ?
จากโจทย์นะครับ ให้แยก 125 ออกเป็น 12 กับ 5 นะครับ จากนั้นบวกกัน จะได้ 17 ใช่ไหมครับ
จากนั้นในส่วนของคำตอบให้เราคิด รอไว้เลยครับคือ 12_5 แต่ในช่องว่างเราจะใส่ตัวเลขลงไปเพียงหลักเดียวเท่านั้นนะครับ คือเลข 7 ส่วนเลข 1 จะนำไปทดในหลักถัดไปครับ เพื่อให้เข้าใจงั้นมาดูผลลัพธ์กันครับ
125 x 11 = 1375 (ในช่องว่างนำ 7 ไปใส่ จากนั้นนำ 1 ทดไปบวกกับเลขสองในหลักร้อย) นี่คือผลลัพธ์ครับ ง่ายไหม ?
มาดูการคูณเลขสี่หลักกับ 11 กันบ้างครับ
1547 x 11 = ?
จากโจทย์ให้จับ 1547 แยกออกเป็นสองส่วนครับ คือ 154 กับ 547 แล้วบวกกันครับ ได้เท่ากับ 701 นะครับเก็บไว้ในใจได้เลย จากนั้นเหมือนกับเลขสามหลักครับ เขียนคำตอบรอไว้เลยครับ 1___7 ในช่องว่างให้นำเลขที่คำนวณมาได้มาใส่ได้เพียงสามหลักนะครับ ที่เหลือนำไปทด เพื่อให้เข้าใจเรามาดูผลลัพธ์กันครับ
1547 x 11 = 17017 สำหรับคำตอบมันห่างจากคำตอบที่เราคะเนไว้ตอนแรกมากเหมือนกัน เกิดจากตัวทดครับ เราต้องสังเกตุและทดให้คล่องครับ ไม่เช่นนั้นอาจได้คำตอบที่ผิดได้นะครับ
