ตัวดำเนินการ

ตัวดำเนินการ คือเครื่องหมายที่ใช้เพื่อให้ทำงานกับตัวแปรและค่าคงที่เพื่อสร้าง expression ในการเขียนโปรแกรม ในภาษา C#มีตัวดำเนินการประเภทต่างๆ ที่คุณจะต้องรู้จักก่อนที่จะเขียนโปรแกรม ข้างล่างนี้เป็นรายการของประเภทตัวดำเนินการที่คุณจะได้เรียนในบทเรียนนี้

  • Assignment operator
  • Arithmetic operators
  • Compound assignment
  • Increment and decrement
  • Relational and comparison operators
  • Logical operators
  • Conditional ternary operator
  • Bitwise operators
  • Explicit type casting operator

Assignment operator

assignment operator หรือตัวดำเนินการกำหนดค่าใช้เคื่องหมายเท่ากับ = มันใช้สำหรับกำหนดค่าให้กับตัวแปรในภาษา C# ยกตัวอย่างเช่น:

float weight = 58.3f;
int y = -3;
int x = y;
string name = "Marcus";

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

Arithmetic operators

ในภาษา C# มีตัวดำเนินการทางคณิตศาสตร์เพื่อใช้ในการดำเนินการในคณิตศาสตร์ต่างๆ เช่น การบวก การลบ การคูณ การหาร และอื่นๆ ในการเขียนโปรแกรม เราเรียกตัวดำเนินการเหล่านี้ว่า operand เพื่อใช่จัดการกับข้อมูลที่เรามี

ข้างล่างนี้เป็นตารางของตัวดำเนินการทางคณิตศาสตร์ในภาษา C#

SymbolNameExample
+Additionc = a + b
-Subtractionc = a - b
*Multiplicationc = a * b
/Divisionc = a / b
%Moduloc = a % b

มาดูตัวอย่างในการใช้ตัวดำเนินการทางคณิตศาสตร์เบื้องต้นในภาษา C#

using System;

class ArithmeticOperators
{
static void Main(string[] args)
{
int a = 10;
int b = 3;

float c = 2.0f;

Console.WriteLine("a + b = " + (a + b));
Console.WriteLine("a - b = " + (a - b));
Console.WriteLine("a * c = " + (a * c));
Console.WriteLine("a / c = " + (a / c));
Console.WriteLine("a % c = " + (a % c));
}
}

ในตัวอย่าง เราได้สร้างตัวแปรสองตัวสำหรับเห็นค่าตัวเลขจำนวนเต็ม (integer) และอีกหนึ่งตัวเพื่อเก็บจำนวนจริง (floating point) เราได้ใช้ตัวดำเนินการทางคณิตศาสตร์ สำหรับการบวก การลบ การคูณ การหาร และมอดดูโล (การหารเอาเศษ)

และนี่เป็นผลลัพธ์เมื่อโปรแกรมได้รัน

a + b = 13
a - b = 7
a * c = 20
a / c = 5
a % c = 0

Compound assignment

Compound assignment operators เป็นตัวดำเนินการใช้สำหรับปรับปรุงหรืออัพเดทค่าของตัวแปร โดยมีข้อกำหนดว่าข้อมูลใหม่นั้นต้องมีความสัมพันธ์กับข้อมูลเดิม เช่น เพิ่มค่าของ x ไปอีก 10 กล่าวอีกนัยหนึ่งมันเป็นรูปแบบสั้นของ arithmetic operators

ข้างล่างนี้เป็นรายการของ compound assignment operators ในภาษา C# ที่คุณต้องทราบ

OperatorExampleEquivalent to
+=a += 2;a = a + 2
-=a -= 2;a = a - 2
*=a *= 2;a = a * 2
/=a /= 2;a= a / 2
%=a %= 2;a = a % 2
>>=a >>= 2;a = a >> 2
<<=a <<= 2a = a << 2
&=a & = 2;a = a & 2
^=a ^= 2;a= a ^ 2
|=a |= 2;a = a | 2

มาดูตัวอย่างการใช้งาน

int money = 100;
money += 30; // equivalent to money = money + 30
money += 50; // equivalent to money = money + 50

ในตัวอย่าง เป็นการเพิ่มค่าให้กับตัวแปร money มันมีค่าเหมือนกับคอมเม้นต์ทางด้านขวา

Increment และ decrement

Increment และ decrement เป็นตัวดำเนินการที่ใช้สำหรับเพิ่มค่าและลดค่าตามลำดับ ผลลัพธ์คือค่าของตัวแปรจะเพิ่มขึ้นหรือลดลง 1 เท่านั้น ซึ่งในตัวดำเนินการ increment และ decrement ก็จะแบ่งออกเป็น 2 แบบคือ prefix และ postfix และเครื่องหมายที่ใช้ในตัวดำเนินการนี้คือ ++ และ --

TypeOperatorExampleEquivalent to
Prefix++++aa = a + 1
Postfix++a++a = a + 1
Prefix----aa = a - 1
Postfix--a--a = a - 1

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

มาดูตัวอย่างเพื่อให้คุณเข้าใจมันได้มากขึ้น

using System;

class IncrementDecrement
{
static void Main(string[] args)
{
int a = 5;
int b = 5;

Console.WriteLine("a = {0}", ++a);
Console.WriteLine("b = {0}", b++);
// now b is 6
}
}

และนี่เป็นผลลัพธ์ชองโปรแกรม

a = 6
b = 5

จากตัวอย่างข้างบน เรามีตัวแปรสองตัวคือ a และ b และได้กำหนดค่าเริ่มต้นให้กับทั้งสองเป็น 5 ตัวแปร a นั้นจะแสดงผลออกมาเป็น 6 เพราะว่าการทำงานของ increment แบบ postfix จะเพิ่มค่าก่อน ส่วน b นั้นยังคงเป็น 5 เพราะจะต้องเพิ่มค่าหลังจากการทำงานของบรรทัดนั้นเสร็จสิ้น

Relational และ comparison operators

ตัวดำเนินการเปรียบเทียบ (comparison) และความสัมพันธ์ (relational) ถูกใช้ในการสร้าง expression กับตัวแปรและค่าคงที่ โดยผลลัพธ์ของ expression จะมีแค่เพียง true หรือ falseเท่านั้น มันมักจะใช้เพื่อสร้างเงื่อนไขเพื่อใช้กับคำสั่งในการเปรียบเทีบล เช่น if else, switch, while, do-while, for เป็นต้น

ตารางของ relational และ comparison operators ในภาษา C#

OperaterExampleResult
==a == btrue if a equal to b, otherwise false
!=a != btrue if a not equal to b, otherwise false
<a < btrue if a less than b, otherwise false
>a > btrue if a greater than b, otherwise false
<=a <= btrue if a less than or equal to b, otherwise false
>=a >= btrue if a greater than or equal to b, otherwise false

ต่อไปมาดูตัวอย่างในการใช้ตัวดำเนินการเปรียบเทียบ

int n = 10;
if (n % 2 == 0) {
Console.WriteLine("n is even number.");
}

int x = 6, y = 2;
if (x < y) {
Console.WriteLine("x is less than y");
}

และนี่เป็นผลลัพธ์เมื่อได้รันโปรแกรม

n is even number.

จากตัวอย่างข้างบน เราได้ใช้ตัวดำเนินการเปรียบเทียบ == เพื่อตรวจสอบถ้า n นั้นเป็นจำนวนคู่ แล้วโปรแกรมก็จะทำงานในบล็อคคำสั่งของ IF ต่อมา เราได้ใช้ตัวดำเนินการเปรียบเทียบน้อยกว่า < เพื่อตรวจสอบว่าถ้า x น้อยกว่า y เนื่องจาก x ไม่ได้น้อยกว่า y ดังนั้นโปรแกรมจึงไม่ทำงานในบล็อคคำสั่งของ IF

Logical operators

ตัวดำเนินการเชิงตรรกะ (logical operators) มักจะใช้ในการตรวจสอบกับค่าของ boolean โดยปกติตัวดำเนินการเปรียบเทียบจะให้ผลลัพธ์เป็น boolean อยู่แล้ว ในภาษา C# มีตัวดำเนินการเชิงตรรกะอยู่ 3 แบบ

ตารางของ logical operators

SymbolNameExample
!Not! (n==1)
&&Anda == 1 && b == 1
||Ora == 1 || b == 1

มาดูตัวอย่างการใช้ตัวดำเนินการเชิงตรรกะ

using System;

class LogicalOperators
{
static void Main(string[] args)
{
bool a = (3 == 4);
bool b = (3 != 4);
bool c = (3 < 4);
bool d = a && c;
bool e = !d;

Console.WriteLine("a = " + a);
Console.WriteLine("b = " + b);
Console.WriteLine("c = " + c);
Console.WriteLine("d = " + d);
Console.WriteLine("e = " + e);
}
}

จากตัวอย่างด้านบนเราได้สร้างตัวแปร boolean สำหรับเก็บค่าจาก expression ที่ถูกประเมินผลกับโอเปอแรน ตัวดำเนินการเปรียบเทียบและตัวดำเนินการตรรกะ ที่มันจะ return ค่าสุดท้ายคือ True หรือ False

a = False
b = True
c = True
d = False
e = True

และนี่เป็นผลลัพธ์ของโปรแกรม

ตัวดำเนินการตรรกะโดยปกติมักจะใช้กับคำสั่งเงื่อนไขหรือคำสั่งวนซ้ำ ดังตัวอย่างข้างล่างนี้

using System;

class LogicalOperators
{
static void Main(string[] args)
{
int age = 20;
int money = 100;

if(age >= 18 && money >= 120) {
Console.WriteLine("You can buy a game.");
}

if(age >= 18 || money >= 500) {
Console.WriteLine("You can buy a movie.");
}
}
}

ในตัวอย่าง เราได้สร้างเงื่อนไขเพิ่มเติมโดยการใช้ตัวดำเนินการตรรกะ เราใช้ตัวดำเนินการ "and" && นั่นหมายความว่าแต่ละ expression ย่อยต้องมีค่าเป็นจริง สำหรับการซื้อเกมผู้ใช้ต้องมีอายุตั้งแต่ 18 ปีขึนไปและต้องมีเงินตั้งแต่ 120 ขึ้นไป สำหรับการซื้อภาพยนตร์ เราได้ใช้ตัวดำเนินการ "or" || โดยเราต้องการเพียงแค่เงื่อนไขใดเงื่อนไขหนึ่งเท่านั้นที่เป็นจริง หรือทั้งสอง

Conditional ternary operator (?)

ternary operator นั้นจะใช้เครื่องหมาย ? มันถูกใช้ในการประเมินค่าของ expression และจะให้ผลลัพธ์เป็นค่าแรกถ้าหาก expression เป็น true และค่าที่สองถ้า expression เป็น false โดยค่าทั้งสองต้องเป้นประเภทหรือชนิดข้อมูลชนิดเดียวกัน โดยมันมีรูปแบบการใช้งานดังนี้

expression ? value1 : value2;
String cc = "NY";
Console.WriteLine(cc == "NY" ? "New York" : "Other states");

ในตัวอย่าง จากคำสั่ง cc == "NY" นั้นคือ expression ที่เราสร้างขึ้นจาก ternary operator และ "New York" นั้นจะผลเป็รผลลัพธ์เมื่อ expression นี้เป็น true และค่าที่สองคือ "Other states" จะเป็นผลลัพธ์เมื่อ expression เป็น false โปรดจำไว้ว่าค่าทั้งสองจะต้องเป็นประเภทข้อมูลเดียวกันเสมอ

New York

และนี่เป็นผลลัพธ์ของโปรแกรม มันจะแสดง "New York" เพราะว่า expression ของเราเป็น true

Bitwise operators

ในภาษา C# จะมีตัวดำเนินการระดับบิท (bitwise operators) โดยจะทำงานกับค่าของบิท ในรูปแบบต่างๆ ของข้อมูลที่เก็บไว้ในตัวแปร

และนี่เป็นตารางของ Bitwise operators ในภาษา C#

SymbolDescription
&Bitwise AND
|Bitwise inclusive OR
^Bitwise exclusive OR
~bit inversion
<<Shift bits left
>>Shift bits right

Explicit type casting operator

Explicit type casting ในภาษา C# นั้นหมายความว่าเป็นการแปลงจากประเภทข้อมูลชนิดหนึ่งไปเป็นประเภทข้อมูลอีกชนิดหนึ่ง Explicit type casting จะเกิดขึ้นอัตโนมติเมื่อ literals ให้กับตัวแปรหรือค่าคงที่ หรือสามารถเกิดขึ้นโดยการใช้วิธีการของ c-like ซึ่งสืบทอดมาจาดภาษา C

int a = 10.5; // ตัวเลขนี้จะแปลงไปเป็น Integer อัตโนมัติ
int b = (int) 89.23; // c-like
float c = (int) b;

ในบทเรียนนี้ คุณได้เรียนรู้และทำความรู้จักกับภาษา C#และได้ดูวิธีการใช้งานในเบื้องต้น