FLASH

ซับซ้อนกันอีกหน่อยนึง กับคำสั่ง เงื่อนไข

นั่นคือ if นั่นเอง จริงๆแล้วทุกครั้งที่มีคนมาขอเรียนแฟลชกับผม ผมจะถามเค้าว่า if แปลว่าอะไร

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

if แปลว่า ถ้า

เช่น ถ้าฝนตก ก็จะเปียก

ใช้สำหรับเป็นตัวเลือก ที่จะทำสิ่งใด ถ้าเงื่อนไข เป็นอะไร

รูปแบบคำสั่ง

ดูนี่:
if( ){

}

ภายในวงเล็บ (.... ) คือเงื่อนไข ถ้าภายในวงเล็บนี้ มีค่าเป็น true ก็จะทำตามคำสั่งภายในวงเล็บ {. ....}

เช่น

ดูนี่:
if(ฝนตก == true ){
trace("เปียก");
}

ย้อนกลับไปอ่าน Operator จะพบว่า เราต้องใช้ == คือเท่ากับสองตัว เพราะว่า จะเป็นการเปรียบเทียบ

และคำสั่ง else ทำงานยังไง ลองดูคำสั่งต่อไปนี้

ดูนี่:
if( ฝนตก == true ){
trace("เปียก");
}else{
trace( "ไม่เปียก");
}

else คือ อื่นๆนอกเหนือจากเงื่อนไขแรก

แต่ถ้าเรามีเงื่อนไขมากกว่า เราก็สามารถเพิ่มเติมด้วยคำสั่ง else if เช่น

ดูนี่:
if( a ){
............
}else if( b ){
...........
}else if( c ){
........
}else{
...other....
}

ง่ายใช่ไหมครับ

ตัวอย่างง่ายๆของการใช้คำสั่ง if คือ การคิดเกรด จากคะแนนสอบ

การบ้าน จงเขียนโปรแกรม คิดเกรดจากคะแนนสอบ โดยที่

คะแนน
0-49 ได้เกรด 0 (รวมไปถึงคะแนนติดลบ ซึ่งมีรึเปล่าวะ)
50-59 เกรด 1
60-69 เกรด 2
70-79 เกรด 3
80 - 100 เกรด 1
ถ้ากรอก นอกจากนั้น ถือว่าผิดพลาด ให้แสดง Error

แถมให้อีกคำสั่ง คือ isNaN( ... );

คำสั่งนี้ จะเป็น true ก็ต่อเมื่อ ภายในวงเล็บเป็นสิ่งที่ไม่ใช่ตัวเลข
เช่น

ดูนี่:
x = "100";
a = isNaN(x);

a จะมีค่าเท่ากับ true เพราะว่า x ไม่ได้เป็นตัวเลข เพราะเราใช้ " คร่อม จึงถือว่าเป็น สตริง หรือตัวหนังสือ

ดูนี่:
x = 100;
a = isNaN(x);

a จะมีค่าเป็น false เพราะว่า x เป็นตัวเลข

ไว้สำหรับใครที่จะทำโจทย์ด้านบนไว้ตรวจสอบว่าผู้ใช้ กรอกสิ่งที่เป็นตัวเลข หรือตัวหนังสือ จะได้แสดง Error ได้ถูกต้อง

**อย่าลืมว่า ข้อมูลที่กรอกลง text จะเป็นข้อมูลชนิด String ให้แปลงเป็นตัวเลขด้วยนะ
edit @ 2006/12/01 11:17:13
edit @ 2006/12/01 11:19:15
edit @ 2006/12/05 10:11:11
จากตัวอย่างด้านบน จงเขียนโปรแกรมคำนวน เส้นรอบวงกลม(หรือใครจะเขียน พื้นที่วงกลมมาก็ได้)

เส้นรอบวง จากสูตร

2*pi*r;

โดยกำหนดให้ pi มีค่าคงที่ เป็น 22/7
และ r มีค่าเป็นรัศมี เท่าไรก็ได้

r = user input;
pi = 22/7;

ans = 2*pi*r

trace(ans);


เนื่องจากเราได้โปรแกรม จาก ^-FakE-^ แล้ว

ดูนี่:
r = user input;
pi = 22/7;

ans = 2*pi*r

trace(ans);

สองสิ่งที่เราจะแทนที่เพื่อให้โปรแกรมของเราสมบูรณ์นั้น คือ
1. บรรทัดที่ 1 รับค่าจาก ผู้ใช้ยังไง
2.บรรทัดสุดท้าย แสดงผล ans ออกมายังไง


เราต้องมารู้พื้นฐานก่อนว่า เราจะใช้อะไร สิ่งที่รับ และ แสดงค่า นั้น เราจะใช้ text field จากเครื่องมือใน tools โดยที่ text Field จะมีอยู่ 3 รูปแบบ

1.static text
2.dynamic text
3.input text

ตามรูป


โดยที่ ทั้ง 3 อย่าง จะมีคุณผมบัติแตกต่างกันเหมาะแก่การทำงาน ต่างกัน

1. Static Text ไว้สำหรับ ข้อความตัวหนังสือ ธรรมดา ที่ไม่ข้องเกี่ยวกับ สคริป
2.Dynamic Text ไว้สำหรับแสดงผล ตัวหนังสือ ที่สามารถเปลี่ยนแปลงได้ เช่น แต้มของเกม หรือผลลัพ คำตอบ จากการคำนวนของเรา
3.input Text ไว้สำหรับ รับค่าจากผู้ใช้ เปรียบได้กับช่อง input ของ HTML นั่นเอง

โดยที่ Dynamic text และ inputText จะมีข้อเหมือนและแตกต่างกัน นิดหน่อย
1.dynamic และ input สามารถเปลี่ยนแปลงข้อความได้จากสคริปเหมือนกัน เช่นสั่งให้แสดงผลคำว่า i love you

2.dynamic และ input ปรับเป็น multi line หรือว่า แสดงผลหลายบรรทัดได้ เหมือนกัน โดยเปลี่ยนที่ เครื่องมือตามภาพ ที่มันมีช่องเขียนว่า single line เราก็เปลี่ยนเป็น Multi line หรือว่าสำหรับ input text ก็เปลี่ยนเป็น password ได้ ถ้าเราต้องการให้ช่องนั้น แสดงผลตัวที่พิมพ์ลงไปเป็น * ดอกจันทร์แทน

3. dynamic text ไม่สามารถให้ผู้ใช้ พิมพ์เปลี่ยนแปลงได้ แต่ input ผู้ใช้พิมพ์เปลี่ยนแปลงได้



1. สร้าง inputText ข้างบน ตั้งชื่อ instance name ว่า input ตรงลูกศรชี้

และปรับค่า ตามที่ วงแดงๆไว้ จะมี 3 ปุ่มเรียงกันอยู่ ตัวแรกจะเป็นตัวเลือกว่า text นี้จะใช้เมาส์ลากแถบดำได้หรือไม่ ตรงกลางจะเลือกว่าให้ text ตัวนี้ แสดงผลโค้ด HTML ได้หรือไม่
ตัวเลือกตัวสุดท้ายคือ เลือกให้ text มีกรอบ หรือไม่

2. สร้าง dynamic text ด้านล้าง เอาไว้แสดงคำตอบ โดยไม่ต้องใส่กรอบ แล้วตั้งชื่อ instance Name ว่า output


3. ใส่สคริปที่ปุ่ม ดังต่อไปนี้


แอบอ้าง
on(release){

r = Number( input.text );

pi = 22/7;

ans = 2*pi*r

output.text = ans ;

}



แล้วแสดงผลดู



อธิบายคำตอบที่สงสัยกัน

เนื่องมาจาก ชนิดของข้อมูล
ตัวเลข + ตัวเลข จะเท่ากับผลรวม
ตัวเลข + ตัวหนังสือ จะเท่ากับ ตัวเลขมาต่อกัับตัวหนังสือ
ตัวหนังสือ+ตัวหนังสือ จะเท่ากับ ตัวหนังสือมาต่อกัน

**เนื่องจากข้อมูลที่รับเข้ามาจาก text นั้น จัดเป็นข้อมูลประเภท String ดังนั้น เมื่อนำมาคำนวน จึงผิดพลาด แทนที่จะได้ ค่าคำนวน กลับเป็นค่าเอามาต่อกัน
**เนื่องจากเครื่องหมาย + สามารถแปลความหมายได้ถึงการ นำ สตริง มาต่อกัน จึงมาต่อกัน แต่ถ้าเป็นเครื่องหมายอื่น เช่น คูณ หาร ลบ หากนำ สตริง มาคูณกัน หรือ หารกัน จะได้ผลออกมาว่า NaN
ซึ่งน้องแนน จะย่อมาจาก Not a Number หรือ ไม่ใช่ผู้ชายยย ม่ายช่ายผู้ชายย (น้องแนนไม่ใช่ผู้ชาย)
เหวอ ไม่ใช่ตัวเลขครับท่าน


ดังนั้น เราจะต้องแปลงชนิดของข้อมูล

ที่มีคนตอบว่า int( ) ครอบไว้ ก็ถูกต้อง เพราะคำสั่งนี้จะแปลงค่าออกมา เป็น integer หรือเลขจำนวนเต็ม

แต่ว่า มันจะผิดพลาดได้ ถ้าเรากรอกเป็นเลขทศนิยม ใช้ int ครอบ มันจะตัดทศนิยมของเราทิ้ง เพราะมันจะทำเป็นเลขจำนวนเต็ม

วิธีที่ดี คือใช้ Number ครอบ ถึงจะแปลงเป็นตัวเลข


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

String(สิ่งที่ต้องการแปลง )

ครอบไว้อีกทีครับท่าน


edit @ 2006/12/01 11:15:10
edit @ 2006/12/01 11:19:03
edit @ 2006/12/05 10:10:53
หลังจากรู้จัก operator แล้ว ลองมาทำอะไรเล่นๆซักหน่อยละกัน


ดูนี่:
width = 20;
height = 50;

ans = width*height;

trace(ans);

ตามคำสั่งด้านบนนี้นำไปเขียนลงบนเฟรม แล้วจึงรันดู
บรรทัดแรก จะกำหนดค่า width
บรรทัดที่สอง จะกำหนดค่า height

บรรทัดที่ สาม จะกำหนดค่า ans มีค่าเท่ากับ width คูณ height

บรรทัดสุดท้าย จะแสดงค่า ans ออกมา

นี่คือโปรแกรม คำนวนพื้นที่ สี่เหลี่ยม จากสูตร กว้าง คูณ สูง
สิ่งที่สามารถนำไปประยุกต์ต่อคือ เปลี่ยนเป็นจากการกำหนดค่า width กับ height ตายตัว ก็เปลี่ยนเป็นรับค่าจากผู้ใช้แทน มาคำนวน เราก็จะได้โปรแกรม คำนวนพื้นที่สี่เหลี่ยมได้สมบูรณ์แบบแล้ว

ตื่นๆๆๆๆ เรียนแค่นี้ จะเลิศเลออะไรนักหนา มาทำการบ้านกันก่อน


จากตัวอย่างด้านบน จงเขียนโปรแกรมคำนวน เส้นรอบวงกลม(หรือใครจะเขียน พื้นที่วงกลมมาก็ได้)

เส้นรอบวง จากสูตร

2*pi*r;

โดยกำหนดให้ pi มีค่าคงที่ เป็น 22/7
และ r มีค่าเป็นรัศมี เท่าไรก็ได้

ส่งเฉพาะโค้ด ก้ได้(ใครว่าง่ายไปก็ไม่ต้องทำ สำหรับมือใหม่ก่อนละกับ ปรับพื้นฐาน)
edit @ 2006/12/01 11:18:48
edit @ 2006/12/05 10:10:36