If else
โดยปกติแล้วโปรแกรมที่เราเขียนจะมีลำดับการทำงานจากบนไปล่าง ทีละคำสั่ง จบหนึ่งคำสั่งถึงไปทำอีกคำสั่งหนึ่ง แต่ถ้าเราต้องการให้มันทำงานเป็นเงื่อนไข คือต้องตัดสินใจว่าจะทำคำสั่งนึงหรือไม่ โดยขึ้นกับอีกคำสั่งนึง เราก็จะต้องใช้ control statement จำพวก if..else ลองอ่านประโยคข้างล่างดู
Console.Write("Please input number : ");
string s = Console.ReadLine();
int x = Int32.Parse(s);
if(x <>
x = -x;
Console.WriteLine("Non-negative number of your input is {0}", x);
นั่นคือส่วนของโปรแกรมง่าย ๆ ซึ่งจะรับค่าตัวเลขมาหนึ่งตัว(อย่าลืมนะครับว่า Console.ReadLine() รับค่าเข้ามาเป็น string เสมอ เราจึงต้องใช้ Int32.Parse() ในการแปลงมาเป็นตัวเลข) แล้วตรวจสอบว่าถ้าเป็นค่าติดลบ เราจะทำให้เป็นค่าบวกก่อน สังเกตนะครับ ในภาษานี้ไม่เหมือนภาษาอื่นตรงที่ไม่มีคำว่า then หลัง condition เพราะว่าตรง condition นั้นมี '(' และ ')' ครอบอยู่(ต้องใส่ทุกครั้งนะครับ) ')' โดยวงเล็บปิดจะเป็นตัวบอกว่าจบ condition แล้ว และเริ่ม statement ที่จะต้องทำงานเมื่อถูกเงื่อนไข และถ้าเราต้องการให้มีการ execute statement หลาย ๆ statement ในเงื่อนไขเดียว เราต้องใช้เครื่องหมาย '{' และ '}' (วงเล็บปีกกา) ครอบกลุ่มคำสั่งเหล่านั้นไว้ เช่น
if( )
{
// statement_1
// statement_2
// ...
// statement_n
}
ถึงแม้ว่า statement หลัง if จะมีแค่ statement เดียว เราก็ควรจะใส่วงเล็บปีกกาครอบไว้เสมอ เพื่อความเป็นระเบียบ ลองมาดูอีกแบบกันดีกว่า
DateTime dtToday = DateTime.Today;
DayOfWeek thisDay = dtToday.DayOfWeek;
if((thisDay == DayOfWeek.Sunday) || (thisDay == DayOfWeek.Saturday))
{
Console.WriteLine("Today is weekend");
} else
{
Console.WriteLine("Today is weekday");
}
ง่าย ๆ นะครับ คล้าย ๆ กับ else ของภาษาอื่น Nested if คือ if else if else if แบบต่อเนื่องกันนั่นแหละครับ
Console.Write("Please input number : ");
string s = Console.ReadLine();
int x = Int32.Parse(s); if(x <>
{
Console.WriteLine("{0} is negative number", x);
}
else if(x > 0)
{
Console.WriteLine("{0} is positive number", x);
} else {
Console.WriteLine("{0} is zero", x);
}
} else {
Console.WriteLine("{0} is zero", x);
}
Dangling else
ภาษาหลาย ๆ ภาษาที่ไม่มีคำสั่ง end if (หรือ endif) มักจะเกิดปัญหาการตีความ ประโยคประมาณนี้
if(cond1)
if(cond2)
stmt1;
else
stmt2;
ถ้าอ่านแล้วจะตีความได้สองแบบ
แบบที่ 1
if(cond1)
if(cond2)
stmt1;
else
stmt2;
หรือ แบบที่ 2
if(cond1)
if(cond2)
stmt1;
else
stmt2;
ปัญหาข้างบนเกิดขึ้นบ่อยมาก ๆ สำหรับคนพึ่งหัดเขียนโปรแกรมใหม่ ๆ และมีการจัด indent ไม่ดี ทำให้คนเขียนเองก็ตีความสับสน วิธีจำง่าย ๆ ก็คือ
รักแท้ยังแพ้ความใกล้ชิด : else แท้ ๆ ก็รัก if ตัวที่อยู่ใกล้ที่สุด
เพราะฉะนั้นแบบที่สอง ถ.
ถ.
ถ.
ถ.
ถ. ถูกต้องนะค้าบ
ป.ล. บทความนี้ผมไม่ได้คิดเองนะครับ....
Credit: http://tidno1.exteen.com/
1 ความคิดเห็น:
อื้มๆๆๆ เก่งๆๆ
แสดงความคิดเห็น