Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
ระดับมัธยม
ความรู้พื้นฐานที่ในระดับมือใหม่ควรจะต้องรู้ เชื่อไหมว่าถ้าเข้าใจเนื้อหา พื้นฐาน ทั้งหมดนี่ได้จริงๆก็สามารถเขียนโปรแกรมส่วนใหญ่ 70% ได้แล้ว 😍
1.โปรแกรมที่ต้องลง2.โครงสร้างของโค้ด3.ชนิดของข้อมูล4.การสร้างตัวแปร5.คำสั่งพื้นฐาน6.การแปลงข้อมูล7.การเปรียบเทียบค่า8.การตัดสินใจด้วย IF statements9.การตัดสินใจด้วย Switch statements10.การทำงานซ้ำๆด้วย While11.การทำงานซ้ำๆด้วย Do While12.การทำงานซ้ำๆด้วย For13.การแก้โจทย์จากรูป14.มารู้จักกับ Array กัน💬 ในการเขียนภาษา C# เราจะต้องติดตั้งโปรแกรมนิดโหน่ย เพื่อให้เครื่องคอมเราทำงานด้วยได้นะฮ๊าฟ ซึ่งโปรแกรมที่ต้องติดตั้ง ดช.แมวน้ำ ขอแนะนำ 2 ตัวนี้นะ (เลือกแค่ตัวเดียวก็พอนะ แต่ถ้าอยากลงทั้งคู่ก็ไม่เป็นไรแค่เปลืองพื้นที่เจ๋ยๆ)
เหมาะสำหรับคนที่ใช้งานจริงจัง ลงตัวนี้ตัวเดียวจบเลย ใช้งานง่ายไม่ต้องใช้ Command line โหลดจากลิงค์ด้านล่างนี้ https://visualstudio.microsoft.com/vs/community
คนที่จะลงตัวนี้ลองเช็คเครื่องตัวเองดูก่อนนะว่า มีพื้นที่เหลือ 20 GB ขึ้นไป และเครื่องไม่ช้า ส่วน Ram ขั้นต่ำคือ 4 GB แต่แนะนำว่า 8 GB จะดีมาก แต่ถ้าไม่สนใจคำเตือนอยากลองลงดูก็ได้นะ เครื่องไม่พังหรอกแต่มันอาจจะอืดๆหน่อยนะจุ๊
อันนี้เป็นรุ่นน้องเล็ก เหมาะสำหรับคนที่อยากลองเขียนโปรแกรมใหม่ๆ แต่ต้องติดตั้งของ 2 อย่างคือ Visual Studio Code และ .NET Core SDK ด้วย
อันนี้แถมนะจ๊ะ สำหรับคนที่ขี้เกียจลงทุกๆอย่างที่ว่ามา แล้วอยากลองวิชาเลย สามารถเข้าไปลองใช้ C# ผ่านเว็บไซต์ด้านล่างนี้ได้เบย
มันใช้ลองวิชาแบบเร็วๆได้ แต่มันเอาไปเขียนเป็นแอพจริงๆไม่ได้นะ เพราะมันอยู่บนเว็บ พอปิดหน้าเว็บโค้ดทั้งหมดก็อาจจะหายไปด้วยเน่อเดี๋ยวจะหาว่านู๋ไม่เตือน
using System;
namespace myApp
{
class Program
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}
}โปรแกรม
ลิงค์ดาวโหลด
Visual Studio Code
.NET Core SDK
💬 ก่อนที่เราจะเขียนโค้ดตัวแรกจริงๆกัน เราต้องรู้จักกับสิ่งที่เรียกว่า ชนิดของข้อมูล หรือ data type เสียก่อน ซึ่งข้อมูลแต่ละชนิดก็จะเหมาะกับงานแต่ละแบบ
ถ้าเราไม่เข้าใจจุดนี้มันก็เหมือนกับเราเอาค้อนไปเลื่อยไม้นั่นเอง เพราะเราไม่เข้าใจการทำงานพื้นฐานของข้อมูลแต่ละรูปแบบ ซึ่งจุดนี้ผมเจอมาเยอะมากเลยแม้กระทั่งนักพัฒนาที่เขียนโปรแกรมมาเป็น 10 ปีบางคนก็ไม่ได้เข้าใจในจุดนนี้อย่างถ่องแท้ ทำให้เวลาเจอข้อผิดพลาดก็จะพากัน งงๆ ว่าเกิดอะไรขึ้น
ในโลกของการเขียนโปรแกรม เราควรต้องรู้จักประเภทข้อมูล 4 ตัวแรกมีตามนี้เบย
true หรือ false
Data type
ใช้กับ
ตัวอย่างข้อมูล
int
ตัวเลขจำนวนเต็ม
1000
double
ตัวเลขจำนวนเต็ม หรือ ทศนิยม
32.76
string
ข้อความ และจะต้องอยู่ภายใต้ double quote
"Hello"
bool
ข้อมูลที่เป็น จริง หรือ เท็จ เท่านั้น
การเขียน for ไม่จำเป็นต้องมี INITIALIZER ก็ได้นะ หรืออาจจะมีมากกว่า 1 ตัวก็ได้ เช่นโค้ดตัวอย่างด้านล่าง
เช่นเดียวกันตัว ITERATOR ก็ไม่จำเป็นต้องมีหรือจะมีกกว่า 1 อย่างก็ได้ เช่นโค้ดด้านล่าง
และสุดท้าย CONDITION จะไม่ใส่ก็ได้ มันก็จะมองเป็น infinity loop ทันที
for( INITIALIZER; CONDITION; ITERATOR )
{
// เข้ามาทำงานตรงนี้ถ้าเงื่อนไขยังเป็นจริงอยู่
}for(int round = 0; round < 10; round++, a--)
{
// Do something
}อะเคร๊ หลังจากรู้แล้วว่าการเขียนโค้ดนั้นมันจะมีข้อมูลที่เราต้องทำงานด้วย 4 ชนิดคือ int, double, string, bool กันละ ในรอบนี้เราจะลองสั่งให้คอมพิวเตอร์ช่วยจำข้อมูลแต่ละประเภทดูหน่อยละกันนะ
ชนิดตัวแปร ชื่อตัวแปร;
ชื่อตัวแปรห้ามซ้ำกัน แม้จะเป็นคนละชนิดกันก็ตาม
ชื่อตัวแปรตัวเล็กตัวใหญ่มีความหมาย (case sensitive) ดังนั้น a กับ A ถือว่าเป็นตัวแปรคนละตัวกัน
ห้ามตั้งชื่อแล้วเว้นวรรค (ถ้าจะทำให้ใช้ตัว _ แทน)
สามารถตั้งชื่อภาษาไทยหรือเลขไทยได้นะ แต่แนะนำว่าอย่าทำเพราะมันจะทำให้มีปัญหาเวลาใช้งานจริง
💬 พอได้ลองเขียนโค้ดไปได้ซักพัก พวกเราจะพบว่าตัวแปรที่เราสร้างไว้มันค่อนข้างวุ่นวายเลยใช่ไหม ลองคิดดูนะว่าถ้าเราต้องเก็บคะแนนของนักเรียน 1 คนมีต้องมีตัวแปร 1 ตัวชิมิ แต่ถ้าเกิดว่าเราต้องเก็บข้อมูลของนักเรียนซัก 100 คนขึ้นมาละ? ตัวแปรของเราคงมีอย่างต่ำคือ 100 เลยตัวใช่ไหม? ดังนั้นในรอบนี้เราจะลองมารู้จักกับการจัดการกับตัวแปรประเภทเดียวที่ใช้ซ้ำๆกันดู นั่นคือเรื่องของ Array นั่นเอง
// แบบไม่มี initializer
for( ; round < 10; round++ )
{
// Do something
}
// แบบมี initializer มากกว่า 1 ตัว
for( int a = 1, b = 2; round < 10; round++ )
{
// Do something
}for(int round = 0; ;round++)
{
// Do something
}ห้ามตั้งชื่อซ้ำกับคำสงวนของภาษา C#
กลุ่มของข้อมูลที่มีชนิดของข้อมูลเป็นชนิดเดียวกัน แล้วเราทำการเก็บมารวมไว้ภายในตัวแปรเดียว ส่วนเมื่อเราต้องการเรียกใช้ ก็สามารถทำได้ผ่านการระบุตำแหน่ง หรือคำศัพท์จริงๆของมันคือ Indexer นั่นเอง
Array ที่เราใช้กันอยู่มีทั้งหมด 3 แบบ โดยแต่ละแบบก็จะเหมาะกับประเภทของคนละชนิดกันด้วยนะจุ๊
Single Dimensional Array
Multidimensional Array
Jagged Array
do
{
// Do something
} while( เงื่อนไข );หลังจากที่เราได้ลองสร้างตัวแปรพร้อมกำหนดค่ากันไปละ คราวนี้ถ้าเกิดว่าเราอยากจะส่งข้อมูลที่ต่างชนิดไปให้กับตัวแปรต่างๆดูบ้างละเราจะทำยังไง? แมวน้ำทั้งหลายเจ้าจงลองดูวีดีโอการแปลงข้อมูลด้านล่างนี้โดยพลัน
เราไม่ต้องทำอะไรเลย เพราะโปรแกรมจะจัดการให้อัตโนมัติ เช่น เราสามารถแปลง int เป็น double ได้ตามตัวอย่างด้านล่างเบย
กรณีที่โปรแกรมจัดการให้เราอัตโนมัติไม่ได้ เราจะต้องทำการระบุ data type ที่จะทำการแปลงลงไปด้วย หรือเรียกว่าการ cast เช่น เราทำการแปลง double เป็น int แบบตัวอย่างด้างล่างงุย
ข้อควรระวังในการทำ Explicit conversion
ในบางทีการแปลงข้อมูลอาจจะทำให้ข้อมูลบางอย่างหายไปได้ เช่นในตัวอย่าง มันจะตัดทศนิยมออกไป ดังนั้น b จะมีค่าเป็น 3
ถ้ามันไม่สามารถแปลงได้ โปรแกรมจะพังทันที (เราเรียกกรณีนี้ว่าเกิด exception)
1.ตัวช่วยในการแปลงข้อมูลเรานิยมใน System.Convert ตามตารางด้านล่าง
2.การแปลงข้อมูลจาก string เป็น data type ที่ระบุโดยใช้ตัวช่วย
เรานิยมใช้คำสั่ง .ToString() ต่อท้าย เพื่อทำการแปลงข้อมูลนั้นๆให้กลายเป็น string ตามตัวอย่างด้านล่าง
ในภาษา C# รุ่นใหม่ๆจะรองรับการใช้สิ่งที่เรียกว่า Type pattern แล้ว โดยเราสามารถเอาชนิดข้อมูลมาใช้เป็นเงื่อนไขได้
คำสั่ง
ความหมาย
System.Convert.ToInt32( x );
แปลง x ให้กลายเป็น int
System.Convert.ToDouble( x );
แปลง x ให้กลายเป็น double
System.Convert.ToString( x );
แปลง x ให้กลายเป็น string
💬 หลังจากที่เราเปรียบเทียบค่าต่างๆเป็นละ คราวนี้เราจะลองให้โปรแกรมทำการตัดสินใจดูบ้าง เช่น จะเดินไปทางซ้ายหรือทางขวาดี ซึ่งการตัดสินใจของโปรแกรมเราเรียกมันว่า IF statements
คำสั่งในการตัดสินใจหรือ IF จริงๆมันก็มีแบบเดียวนั่นแหละ แต่เราสามารถเขียนมันได้ทั้งหมด 5 วิธีหลักๆตามด้านล่างครับ
1.if
if..else
3.if..else..if
4.Nested if
5.Inline if หรือ short if
คำเตือน การใช้ Inline if หรือ short if ไม่ใช่เรื่องความเท่ใดๆ ถ้าทีมที่เราทำงานด้วยไม่คุ้นเคยหรือไม่ชำนาญในการใช้คำสั่งลัดพวกนี้ ดช.แมวน้ำ ขอแนะนำว่าอย่าใช้ครับ เพราะจะทำให้เราทีมเสียเวลาและอาจะเกิดข้อผิดพลาดได้ง่ายขึ้นโดยใช่เหตุ แต่ถ้าทีมเริ่มมีความชำนาญมากขึ้นผมแนะนำให้ใช้เพราะมันทำให้โค้ดเรา clean ขึ้นครับ (ซึ่งผมจะขอยกเรื่อง Clean code ไปไว้ในบทของมันเองนะครับ)
อาวล๊าาา หลังจากที่เริ่มชินกับการสั่งให้คอมมันจำข้อมูลต่างๆ หรือการแปลงข้อมูลจากชนิดหนึ่งไปยังอีกชนิดหนึ่งละ คราวนี้สิ่งที่คนเขียนโค้ดจะต้องเจอกันคือ การเปรียบเทียบ ระหว่างๆของต่างๆ เช่น อายุเกิน 18 ปีหรือเปล่า? หรือต้องเทียบว่าค่าจากตัวแปร A มากกว่าตัวแปร B หรือเปล่าอะไรทำนองนี้ เราจะต้องเขียนยังไงกันน๊าาา ปะไปดูวีดีโอกันเร๊ยยยย (ครูภาษาไทยมาเจอ ดช.แมวน้ำ ในตอนนี้น่าจะปวดกบาลน่าดูเรยเน๊อะ)
เวลาเราจะเปรียบเทียบอะไรกันก็ตามเราจะใช้คำสั่งในการเปรียบเทียบข้อมูล ซึ่งผลจากการเปรียบเทียบนั้น เราจะได้กลับมาเป็นข้อมูลชนิด bool นะจุ๊
เวลาที่เราเปรียบเทียบข้อมูลหลายๆเงื่อนไข เราก็จะใช้ตัวเชื่อมต่างๆ เช่นเงื่อนไขว่า "อายุมากกว่า 18 ปี และ ต้องเป็นคนไทยด้วย" จะเห็นว่าตัวเชื่อในตัวอย่างนี้คือคำว่า และ นั่นเอง ซึ่งในภาษา C# มาตัวเชื่อมตามนี้
switch( EXPRESSION )
{
case PATTERN1:
// ถ้า expression ตรงกับ pattern 1 จะเข้ามาที่งานที่นี่
break;
case PATTERN2:
// ถ้า expression ตรงกับ pattern 2 จะเข้ามาที่งานที่นี่
break;
default:
// ถ้า expression ไม่ตรงกับ pattern ไหนเลยจะเข้ามาทำงานที่นี่
break;
}switch( EXPRESSION )
{
case PATTERN1:
{
// ถ้า expression ตรงกับ pattern 1 จะเข้ามาที่งานที่นี่
break;
}
...
}switch( EXPRESSION )
{
default:
case PATTERN1:
case PATTERN2:
case PATTERN3:
{
// ถ้า expression ตรงกับ pattern 1,2,3
// หรือไม่ตรงกับ pattern อื่นๆเลยจะเข้ามาที่งานที่นี่
break;
}
...
}switch( EXPRESSION )
{
case int a:
// ถ้า expression เป็น int จะเข้ามาที่งานที่นี่
break;
case double b:
// ถ้า expression เป็น double จะเข้ามาที่งานที่นี่
break;
...
}switch( EXPRESSION )
{
case int a when a > 12:
// ถ้า expression เป็น int และมีค่ามากกว่า 12 จะเข้ามาที่งานที่นี่
break;
...
}int a = 3;
double b = a;double a = 3.33;
int b = (int)a;int a = int.Parse("1");
double b = int.Parse("3.33");int a = 3;
string b = a.ToString();
string c = 3.33.ToString();
strubg d = "Hello".ToString();เปรียบเทียบว่า ค่าด้านซ้าย น้อยกว่าหรือเท่ากับ ค่าด้านขวา ใช่หรือไม่
น๊อท NOT
!true ได้ false แต่ถ้า !false ได้ true
Operator
ความหมาย
>
เปรียบเทียบว่า ค่าด้านซ้าย มากกว่า ค่าด้านขวา ใช่หรือไม่
<
เปรียบเทียบว่า ค่าด้านซ้าย น้อยกว่า ค่าด้านขวา ใช่หรือไม่
==
เปรียบเทียบว่า ค่าด้านซ้าย เท่ากับ ค่าด้านขวา ใช่หรือไม่
!=
เปรียบเทียบว่า ค่าด้านซ้าย ไม่เท่ากับ ค่าด้านขวา ใช่หรือไม่
>=
เปรียบเทียบว่า ค่าด้านซ้าย มากกว่าหรือเท่ากับ ค่าด้านขวา ใช่หรือไม่
Operator
ความหมาย
ออกเสียง
จำง่ายๆ
&
และ
แอนด์ AND
true และ true ได้ true
|
หรือ
ออ OR
ถ้ามี true ปุ๊ป ได้ true
!
<=
เปลี่ยนผลลัพท์ให้เป็นค่าตรงข้าม
💬 หลังจากเราสร้างตัวแปรได้ละ คราวนี้เราลองเอาตัวแปรที่เราสร้างไว้มาลองเล่นกับมันดูหน่อยละกัน ซึ่งการที่เราจะเล่นกับตัวแปรของเราเราจะต้องรู้จักคำสั่งพื้นฐานของมันก่อนนะ
ก่อนไปต่อ ดช.แมวน้ำ ขอทิ้งโจทย์เล่นๆไว้ 1 ข้อละกันนะว่า 2 + 12 / 2 x 3 - 1 ได้เท่าไหร่เอ่ย ?
ข้อมูลประเภทตัวเลข
ไม่สามารถนำชนิดข้อมูลขนาดใหญ่ไปใส่ตัวแปรที่ชนิดข้อมูลมีขนาดเล็กกว่าได้
ข้อมูลประเภท string
ถ้าใช้คำสั่ง + จะเป็นการนำข้อมูลมาต่อกัน เช่น "5" + 7 จะได้ผลลัพท์คือ "57"
คำสั่ง - * / จะไม่สามารถใช้กับ string ได้
เวลาเจอเครื่องหมายทางคณิตศาสตร์หลายๆตัวพร้อมๆกัน โปรแกรมจะไล่ทำตามลำดับของตารางด้านล่างนี้
ในลำดับเดียวกัน ให้ดูว่าเราเจอเครื่องหมายไหนก่อนให้ทำตัวนั้นก่อน ไล่จากซ้ายไปขวา
เช่น 12 / 2 * 3 กรณีนี้เจอ หาร ก่อน (จากซ้ายไปขวา) ดังนั้นคำตอบคือ 18
เฉลย ที่ถามว่า 2 + 12 / 2 x 3 - 1 = ? คำตอบคือ 19 นะจุ๊
if( เงื่อนไข )
{
// ทำใน block นี้ถ้าเงื่อนไขเป็นจริง
}if( เงื่อนไข )
{
// ทำใน block นี้ถ้าเงื่อนไขเป็นจริง
}
else
{
// ทำใน block นี้ถ้าเงื่อนไขเป็นเท็จ
}if( เงื่อนไขที่ 1 )
{
// ทำใน block นี้ถ้าเงื่อนไขที่ 1 เป็นจริง
}
else if( เงื่อนไขที่ 2 )
{
// ทำใน block นี้ถ้าเงื่อนไขที่ 2 เป็นจริง (และเงื่อนไขด้านบนทุกตัวเป็นเท็จ)
}
else
{
// ทำใน block นี้ถ้าเงื่อนไขทุกตัวเป็นเท็จ
}if( เงื่อนไข 1 )
{
if( เงื่อนไข 2)
{
// ทำใน block นี้ถ้าเงื่อนไข 1 และ 2 เป็นจริง
}
else
{
// ทำใน block นี้ถ้าเงื่อนไข 1 เป็นจริงแต่ 2 เป็นเท็จ
}
}string message = เงื่อนไข ? "กรณีเงื่อนเป็นจริงจะใช้ค่านี้" : "กรณีเงื่อนไขเป็นเท็จจะใช้ค่านี้";10 * 5
/
นำค่า 2 ตัวที่อยู่ใกล้กันมา หาร กัน
10 / 5
Operator
ความหมาย
ตัวอย่าง
=
กำหนดค่าให้กับตัวแปรที่อยู่ด้านซ้ายมือ
int money = 100;
+
นำค่า 2 ตัวที่อยู่ใกล้กันมา บวก กัน
10 + 5
-
นำค่า 2 ตัวที่อยู่ใกล้กันมา ลบ กัน
10 - 5
*
Operator
ความหมาย
+=
นำค่าทางขวามือไปบวกกับด้านซ้ายมือ แล้วกำหนดให้ตัวแปรด้านซ้ายมือเป็นค่านั้นๆเลย
-=
นำค่าทางขวามือไปลบกับด้านซ้ายมือ แล้วกำหนดให้ตัวแปรด้านซ้ายมือเป็นค่านั้นๆเลย
*=
นำค่าทางขวามือไปคูณกับด้านซ้ายมือ แล้วกำหนดให้ตัวแปรด้านซ้ายมือเป็นค่านั้นๆเลย
/=
นำค่าทางขวามือไปหารกับด้านซ้ายมือ แล้วกำหนดให้ตัวแปรด้านซ้ายมือเป็นค่านั้นๆเลย
ลำดับที่
เครื่องหมาย
1
( วงเล็บ )
2
++ หรือ -- (prefix)
3
คูณ หาร
4
บวก ลบ
5
++ หรือ -- (postfix)
นำค่า 2 ตัวที่อยู่ใกล้กันมา คูณ กัน
เหล่าแมวน้ำทั้งหลายพออ่านมาจนถึงจุดนี่และได้ลองหัดเขียนโปรแกรมกันจริงๆ หลายๆคนน่าจะมีคำถามในใจกันอยู่เช่น ที่เรียนมาก็เข้าใจดีอยู่นะ แต่พอเห็นโจทย์จริงๆก็มองไม่ออกเลยว่ามันควรจะเขียนโค้ดเริ่มจากตรงไหน หรือในบางทีก็ไม่รู้ว่าควรจะใช้ loop แบบไหนดี หรือในบางทีแม้จะเลือกชนิดตัวแปรที่จะใช้ก็ยังไม่รู้เลยว่าควรจะทำแบบไหนดี
ดช.แมวน้ำ ขอเสนอวิธีการแก้โจทย์โดยการวาดรูปดูนะครับ น่าจะไม่มีที่ไหนสอนแบบนี้ในโลกเลยนะผมมโนขึ้นมาเองล้วนๆ + พบว่ามันช่วยให้หลายๆคนเข้าใจได้ง่ายขึ้นเยอะเลย
เขียนออกมาก่อนว่าโปรแกรมต้องทำอะไรบ้าง
ลองวาดรูปการทำงานในแต่ละขั้นตอนออกมา
ลองเขียนดูว่าแต่ละขั้นตอนเราต้องใช้ความรู้เรื่องอะไรบ้าง เช่น ชนิดตัวแปร, loop แบบไหน
เลือกว่าในแต่ละขั้นตอนควรจะคำสั่งแบบไหน
เอาของที่ได้จากขั้นตอนที่ 4 ไปลองเขียนโค้ดทีละขั้นตอนดู
💬 ในการเขียนโปรแกรมหลายๆ บางทีเราก็จะพบว่าโค้ดบางส่วนที่เราอยากให้มันทำงานหลายๆรอบ เราต้องไปคอยนั่งกดก๊อปปี้ไปวางหลายๆครั้งใช่มุ้ยล๊า ในรอบนี้เราจะลองดูคำสั่งที่ใช้ในการทำงานเดิมซ้ำๆกันที่เราเรียกมันว่า While loop statements นั่นเอง
เมื่อเราทำงานอยู่ใน loop ในบางครั้งเราก็ไม่อยากให้มันทำงานต่อแล้ว เราสามารถใช้คำสั่ง break เพื่อออกจาก loop ที่กำลังทำงานอยู่ได้
while( เงื่อนไข )
{
// ถ้าเงื่อนไขเป็นจริงจะทำในวงเล็บนี้เรื่อยๆ
}