เขียนโปรแกรม Objective-C ตอน If statement

If statement

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

if ( expression ) statement

* ถ้าเงื่อนไข ( expression ) เป็นจริง ก็จะทำคำสั่งที่กำหนด ( statement )

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

if ( เช้าแล้ว )
ไปโรงเรียน

จากโค้ดตัวอย่าง ถ้าเงื่อนไข เป็นเวลาเช้า เป็น “จริง” ถึงจะไปไปโรงเรียน แต่ถ้าเป็น “เท็จ” เช่น ตื่นกลางดึก

ลองเขียนโปรแกรมง่ายๆสักโปรแกรม เช่น โปรแกรมเปรียบเทียบคะแนนโดยมีเงืื่อนไขว่าถ้าคะแนนมากกว่า 50 ให้แสดงผลผ่านทาง Console ว่า Pass ก็อาจจะเขียนได้ดังนี้

ตัวอย่างที่ 1

 

ตัวอย่างที่ 1 Output

Pass

 

ถ้าลองเปลี่ยนค่า score จาก 61 ให้เป็นค่าที่น้อยกว่าเช่น 30 ก็จะเห็นว่าที่ Console จะไม่แสดงผลอะไรเลย เพราะไม่ตรงตามเงื่อนไขที่กำหนด ลองเขียนโปรแกรมอีกสักโปรแกรม โดยมีเงื่อนไขว่าถ้าคะแนนเท่ากับ 100 พอดีก็ให้โปรแกรมแสดงผลคำว่า Maximum Score

ตัวอย่างที่ 2

 

ตัวอย่างที่ 2 Output

Maximum Score

 

ข้อผิดพลาดที่พบได้บ่อยคือการใช้เครื่องหมายเปรียบเทียบคือ ใช้เครื่องหมายผิดเช่น =< ที่ถูกต้องคือ >= หรือเว้นวรรเครื่องหมายเช่น = =

 

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

ตัวอย่างที่ 3

 

 

ตัวอย่างที่ 3 Output

Maximum Score

โค้ดของโปรแกรมได้ให้ค่าของคะแนนเป็น 90 ซึ่งไม่ตรงตามสิ่งที่เงื่อนไขที่เราต้องการนั่นคือคะแนนต้องเท่ากับ 100 แต่ผลของโปรแกรมจะยังแสดงผล Maximum Score อยู่เสมอ ก็เพราะว่า score = 100 นั้นไม่ใช่การเปรียบเทียบแต่เป็นการให้ค่ากับตัวแปร score มีค่าเท่ากับ 100 ซึ่งจะเป็นจริงเสมอ ต้องระวังตรงจุดนี้ให้มาก เพราะอาจจะทำให้โปรแกรมเกิดข้อผิดพลาดได้

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

ตัวอย่างที่ 4

 

 

ตัวอย่างที่ 4 Output

Great!!!

 

จากโปรแกรม 3.4 จะเห็นว่า คะแนนไม่ได้เท่ากับ 100 โปรแกรมจึงไม่แสดงผลคำว่า Maximum Score ซึ่งก็ตรงตามเงื่อนไข แต่โปรแกรมกลับมีการแสดงผลคำว่า Greate!!! ด้วย นั่นเป็นเพราะว่า NSLog(@”Great!!!”); ไม่ได้อยู่ในเงื่อนไขนั่นเอง ไม่ว่าเงื่อนไขจะผิดหรือถูกโปรแกรมก็จะยังแสดงผลอยู่ดี แต่ถ้าหากต้องการให้ทำมากกว่า 1 คำสั่ง เราสามารถแก้ไขปัญหานี้ได้โดยเขียนคำสั่งทั้งหมดให้อยู่ภายใน { } ดังตัวอย่าง

ตัวอย่างที่ 5

 

 

ตัวอย่างที่ 5 Output

Congratulation

Pass

 

if-else

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

จากโปรแกรมเราได้เขียนเงื่อนไข if ด้วยกันถึงสองเงื่อนไข คือถ้า pass มีค่าเท่ากับ YES ให้แสดงผลคำว่า YOU PASS และอีกหนึ่งเงื่อนไขคือ pass มีค่าเท่ากับ NO ให้เแสดงคำว่า YOU FAIL โค้ดดังกล่าวแสดงให้เราได้เห็นว่าเงื่อนไขสองอย่างนี้มีความสัมพันธ์กันคือถ้า pass เป็นจริงให้ทำอย่าง แต่ถ้าเป็นเท็จก็ให้ทำอีกอย่าง ในภาษา Objective-C สามารถใช้คำสั่ง else เพื่อมาเป็นทางเลือกอีกทางได้ โดยไม่ต้องเขียนเงื่อนไขซ้ำซ้อนเหมือนดังโค้ดโปรแกรมตัวอย่าง โดยมีรูปแบบการใช้งานดังนี้

 

if ( expression )

statement1

else

statement 2

* ถ้าเงื่อนไข ( expression ) เป็นจริง ก็จะทำstatement 1แต่ถ้า เป็นเท็จ จะทำ statement 2

 

จากโค้ดตัวอย่างที่ผ่านมา ถ้าหากใช้ else เข้ามาช่วยโค้ดของเราก็จะเป็นดังนี้

ตัวอย่างที่ 6

 

 

ตัวอย่างที่ 6 Output

YOU FAIL

 

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

Keyboard Input

่โปรแกรมที่เขียนส่วนใหญ่เราได้เขียนกำหนดค่าของตัวแปรต่างไว้เรียบร้อยแล้ว ผู้อ่านอาจจะเริ่มเบื่ออยากจะลองรับข้อมูลทางแป้นพิมพ์ผ่านทาง Console เพื่อนำเข้ามาใช้งานในโปรแกรมดูบ้าง แต่การรับข้อมูลทางแป้นพิมพ์ในภาษา Objective-C ต้องใช้คำสั่งของ Cocoa Framework หรือถ้าเขียนโปรแกรมสำหรับ iOS ก็ต้องใช้ Cocoa Touch Framework ซึ่งจะเป็นการรับข้อมูลผ่าน Graphic User Interface และไม่ได้ครอบคลุมในหนังสือเล่มนี้ ดังนั้นแล้ววิธีที่ง่ายที่สุดก็คือใช้ฟังก์ชั่นของภาษา C นั่นคือ scanf ซึ่งจะมีรูปแบบการใช้งานดังนี้

 

scanf ( format string , variable);

* format string ใช้เหมือนกันกับ NSLog แต่ไม่ต้องมี @ นำหน้า เพราะเป็นฟังก์ชั่นของภาษา C

การใช้ scanf มีการใช้งานคล้ายๆกับกับการใช้ NSLog คือต้องมี format string เพื่อกำหนดชนิดของข้อมูล เช่นตัวอย่าง

ตัวอย่างที่ 7

 

 

จากโค้ดคำสั่ง scanf จะเห็นตัวแปร score นั้นมีเครื่องหมาย & อยู่ด้านหน้าซึ่งหมายถึงตำแหน่งหน่วยความจำ (Address of ) การใช้งาน scanf ต้องมีเครื่องหมายนี้ด้านหน้าตัวแปรเสมอ เมื่อคอมไพล์โปรแกรมและให้โปรแกรมทำงานจะเห็น Console แสดงคำว่า Input score: แล้วจะหยุดรอรับข้อมูล ( เอาเมาส์ไปคลิกที่ Console Area จะเห็นเคอเซอร์กระพริบ แล้วลองพิมพ์เลขดู ) และถ้าดูที่ toolbar จะเห็นคำว่า Running

 

ถ้าผู้ใช้ใส่เลขที่มีค่ามากกว่า 50 ก็จะแสดงผลว่า Congratulation และ Pass! ตามลำดับ แต่ถ้าใส่คะแนนน้อยกว่า 50 เช่น 44 โปรแกรมก็จะไม่แสดงผลอะไรออกมาเลย

ตัวอย่างที่ 7 Output

Input score: 67

Congratulation

Pass

ตัวอย่างที่ 7 Output ( 2 )

Input score: 44

Nested if

จากการใช้ if else แบบง่ายๆ เราสามารถที่จะสร้างเงื่อนไขที่ซับซ้อนเพิ่มมากขึ้นโดยการเขียน if else ซ้อนกันได้อีกด้วย ดังเช่นตัวอย่าง

อาจจะสงสัยว่าหลังจากเงื่อนไข if มีหลายคำสั่งแต่ทำไมถึงไม่ใช้ { } จริงแล้ว Objective-C มองว่า if else นั้นเป็นเพียง 1 คำสั่งเท่านั้น เพื่อความเข้าใจ ถ้าเอากรอบมาครอบก็จะเห็นภาพชัดเจนมากขึ้น

หรืออาจใช้ { } เพื่อให้เข้าใจได้ง่ายขึ้นได้ดังนี้

 

 

ในขั้นแรกโปรแกรมจะตรวจสอบก่อนว่า score มีค่ามากกว่าหรือเท่ากับ 50 หรือไม่ ถ้ามากกว่าก็จะทำคำสั่งภายใน { } ซึ่งเป็นการตรวจสอบค่า score อีกครั้งว่ามีค่ามากกว่า 80 หรือไม่ ถ้าใช่ ก็จะแสดงผลคำว่า GOOD SCORE แต่ถ้าน้อยกว่าก็จะแสดงผลคำว่า YOU PASS นั่นเอง เพื่อความเข้าใจมากขึ้นลองดูโปรแแกรมตัวอย่าง

ตัวอย่างที่ 8

 

 

ตัวอย่างที่ 8 Output

Input score: 71

B

ตัวอย่างที่ 8 Output ( 2 )

Input score: 84

A

โปรแกรมดังกล่าวเป็นโปรแกรมหาเกรดจากคะแนน โดยเรากำหนดเงื่อนไขแรกคือ ถ้าคะแนนมากกว่า 50 ถึงจะตรวจสอบเงื่อนไขต่อไปแต่ถ้าคะแนนน้อยกว่าก็สอบตก และหลังจากที่คะแนนผ่านเกิน 50 มาแล้วก็จะมีเงื่อนไขตรวจสอบคะแนนต่างๆอีกมากมาย เรียงทีละลำดับโดยเริ่มจากตรวจสอบว่าคะแนนมากกว่า 80 หรือไม่ และต่อมาก็จะเงื่อนไขพิจารณาคะแนนลดลงมาเรื่อยๆตามเงื่อนไขแต่ละเงื่อนไขที่ได้เขียนไว้ตามแต่ละลำดับ เมื่อเราได้ป้อนคะแนนเป็น 71 โปรแกรมก็จะแสดงเกรด B และเมื่อทำงานครั้งสองใส่ค่าคะแนนเข้าไปใหม่คือ 84 โปรแกรมก็จะแสดงผลเป็นเกรด A จะเห็นได้ว่าเราสามารถนำคำสั่ง if และ else มาสร้างเงื่อนไขต่างๆได้อย่างมากมายดังโค้ดตัวอย่างโปรแกรม แต่การเขียนโค้ดลักษณะแบบโปรแกรม 3.8 อาจจะดูซับซ้อนและเข้าใจยาก เราอาจจะเขียนใหม่เพื่อให้อ่านเข้าใจได้ง่ายขึ้น ดังเช่นตัวอย่าง

ไม่ว่าจะเป็นแบบแรกหรือแบบที่สองผลของโปรแกรมก็มีค่าเหมือนกัน แต่แบบที่สองจะอ่านง่ายและดูสะอาดตามากกว่า

Compound if Statement

ลองพิจารณาโค้ดตัวอย่างต่อไปนี้

จากตัวอย่างเราจะเห็นว่า ถ้าหากต้องการแสดงให้ผลลัพธ์คือ A ต้องมีคะแนนเข้าเงื่อนไขทั้งสองเงื่อนไข นั่นคือคะแนนมากหรือเท่ากับ 80 และเงื่อนไขที่สองคะแนนต้องน้อยกว่าหรือเท่ากับ 100 ถ้าผิดเงื่อนไขใดเงื่อนไขหนึ่ง Console จะไม่แสดงผลลัพธ์อะไรเลย การเขียนเงื่อนไขมากกว่าหนึ่งเงื่อนไข นอกจากจะเขียนโปรแกรมแบบใช้ nested if แล้วเราสามารถที่จะรวมเงื่อนไข 2 เงื่อนไขเข้าไปด้วยกัน โดย

ใช้ && ( Logic Operator AND ) เพื่อทดสอบว่าเงื่อนไขทั้งสองต้องเป็นจริง ถึงจะถือว่าเป็นจริง

ใช้ || ( Logic Operator OR ) ตรวจสอบว่าถ้าเงื่อนไขใด เงื่อนไขหนึ่งเป็นจริง ก็ถือว่าเป็นจริง

จากโปรแกรม 3.8 เราอาจจะเขียนเงื่อนไขใหม่ดังเช่นตัวอย่างอย่าง

ตัวอย่างที่ 9

 

ตัวอย่างที่ 9 Output

Input score: 65

C

ตัวอย่างที่ 9 Output ( 2 )

Input score: 42

FAIL

จากตัวอย่าง 3.9 ได้รวมเอาสองเงื่อนไขเข้าด้วยกัน เงื่อนไขแรกก็คือคะแนนต้องมากกว่าหรือเท่ากับ 80 และน้อยกว่าหรือเท่ากับ 100 ถึงจะได้เกรด A เงื่อนไขอื่นๆก็มีลักษณะเดียวกัน โปรแกรม 3.8 และ 3.9 มีเงื่อนไขที่ต่างกันแต่โปรแกรมทำงานได้เหมือนกันขึ้นอยู่กับว่าเราจะเขียนเงื่อนไขแบบไหน ซึ่งผู้อ่านก็สามารถเขียนเงื่อนแบบอื่นที่ให้ผลลัพธ์แบบนี้ได้เช่นกัน

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น