คำสั่งควบคุมเงื่อนไข ในภาษา Ruby
คำสั่งควบคุมเงื่อนไข (Conditional statement) เป็นคำสั่งที่ใช้สำหรับควบคุมให้โปรแกรมทำงานตามเงื่อนไขที่กำหนด ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการควบคุมการทำงานของโปรแกรมด้วยคำสั่งควบคุมชนิดต่างๆ คำสั่งควบคุมเงื่อนไขมักจะทำงานกับค่าของ Boolean เมื่อเราบอกว่าเงื่อนไขเป็นจริง นั่นหมายความว่าผลลัพธ์ของ Boolean นั้นมีค่าเป็น true
และถ้าหากเงื่อนไขเป็นเท็จ ผลลัพธ์ของ Boolean นั้นจะมีค่าเป็น false
คำสั่ง if
คำสั่ง if
เป็นคำสั่งควบคุมการที่ใช้กำหนดเพื่อให้โปรแกรมทำงานบางอย่างเมื่อเงื่อนไขเป็นจริง นี่เป็นรูปแบบการใช้งานของคำสั่ง if
if expression then
statements
end
ถ้าหากเงื่อนที่กำหนดใน expression
เป็นจริง โปรแกรมจะทำงานในบล็อคของคำสั่ง if
ที่อยู่ระหว่างคำสั่ง then
และ end
โดยทั่วไปแล้ว เราจะสร้างเงื่อนไข expression
จากตัวดำเนินการเปรียบเทียบ หรือตัวดำเนินการตรรกศาสตร์ นี่เป็นตัวอย่างแรกของเรา
a = 10
if a == 10 then
puts "Value of a is 10"
end
ในตัวอย่าง เป็นการใช้งานคำสั่ง if
เพื่อตรวจสอบว่าค่าของตัวแปร a
นั้นเท่ากับ 10
หรือไม่ ถ้าหากเงื่อนไขเป็นจริง โปรแกรมจะทำงานในบล็อคของคำสั่ง if
ซึ่งเป็นการแสดงข้อความ "Value of a is 10" ออกทางหน้าจอ แต่ถ้าหากเงื่อนไขไม่เป็นจริง โปรแกรมจะข้ามการทำงานของบล็อคคำสั่ง if ไป
Value of a is 10
นี่เป็นผลลัพธ์การทำงานของโปรแกรม โปรแกรมทำงานในบล็อคของคำสั่ง if
เพราะเรากำหนดเงื่อนไขอย่างชัดเจนว่าตัวแปร a
ต้องมีค่าเท่ากับ 10
ในตอนนี้ ถ้าหากคุณเปลี่ยนค่าของตัวแปรเป็นค่าอื่น โปรแกรมควรจะข้ามการทำงานไปเพราะเงื่อนไขไม่เป็นจริงนั่นเอง
อย่างไรก็ตาม การใส่คำสั่ง then
หลังจากเงื่อนไขนั้นเป็นทางเลือก คุณสามารถใส่หรือไม่ใส่ก็ได้ สำหรับตัวอย่างในบทเรียนของเรา เราเลือกที่จะไม่ใช้เนื่องจากมันเขียนง่ายกว่า ดังนั้นจากโค้ดด้านบนเราสามารถเขียนได้เป็น
a = 10
if a == 10
puts "Value of a is 10"
end
นอกจากนี้ ในบล็อคของคำสั่ง if
คุณสามารถกำหนดให้โปรแกรมทำงานมากกว่าหนึ่งคำสั่งได้เมื่อเขียนไขเป็นจริง เพียงแค่เพิ่มคำสั่งเข้าไปตามที่คุณต้องการ
n = 7
if n.odd?
puts "Value of n is #{n}"
puts "n is odd number"
end
ในตัวอย่าง เป็นโปรแกรมตรวจสอบค่าในตัวแปร n
ว่าเป็นเลขคี่หรือไม่ ถ้าหากเงื่อนไขเป็นจริง โปรแกรมจะทำงานในบล็อคของคำสั่ง if
ซึ่งมีคำสั่งการแสดงผลสองคำสั่ง
Value of n is 7
n is odd number
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
คำสั่ง if-else
คำสั่ง if
ใช้กำหนดเพื่อให้โปรแกรมทำงานเมื่อเงื่อนไขเป็นจริง ในทางกลับกัน คำสั่ง else
นั้นใช้เพื่อกำหนดให้โปรแกรมทำงานเมื่อเงื่อนไขเป็นเท็จ และมันต้องใช้ร่วมกับคำสั่ง if
เสมอ
if expression
statement1
else
statement2
end
ถ้าหากเงื่อนไขใน expression
โปรแกรมจะทำงานในกลุ่มของคำสั่ง statement1
และถ้าหากเงื่อนไม่เป็นเท็จ โปรแกรมจะทำงานในกลุ่มของคำสั่ง statement2
แทน ดังนั้นนี่เป็นวิธีที่จะแยกการทำงานของให้ออกเป็นสองทางนั่นเอง
username = "Andy"
if username == "Mateo"
puts "Login success"
puts "Welcome #{username}"
else
puts "Invalid username"
end
ในตัวอย่าง เป็นโปรแกรมตรวจสอบชื่อผู้ใช้สำหรับการเข้าสู่ระบบ โดยโปรแกรมจะตรวจสอบว่าค่าในตัวแปร username
เท่ากับ "Mateo" หรือไม่ ถ้าหากเงื่อนเป็นจริงโปรแกรมจะทำงานในบล็อคของคำสั่ง if
และถ้าหากไม่ใช่โปรแกรมจะทำงานในบล็อคของคำสั่ง else
Invalid username
และนี่เป็นผลลัพธ์การทำงานของโปรแกรม เนื่องจากว่าค่าในตัวแปร username
นั้นเป็น "Andy" ซึ่งทำให้เงื่อนเป็นเท็จ ดังนั้นโปรแกรมทำงานในบล็อคของคำสั่ง else
แทน
ตัวอย่างต่อมา เราจะแก้ไขโค้ดจากตัวอย่างด้านบนเล็กน้อย โดยทั่วไปแล้ว ในการเข้าสู่ระบบจะต้องใช้ทั้งชื่อผู้ใช้และรหัสผ่าน เราจะให้โปรแกรมสามารถถามข้อมูลทั้งสองอย่างผ่านทางคีย์บอร์ด เพื่อนำมาตรวจสอบในโปรแกรม
print "Enter username: "
username = gets.chomp
print "Enter password: "
password = gets.chomp
if username == "Mateo" && password == "1234"
puts "Login success"
puts "Welcome #{username}"
else
puts "Invalid username or password"
end
ในตัวอย่าง เป็นโปรแกรมตรวจสอบการเข้าสู่ระบบโดยการรับค่าชื่อผู้ใช้และรหัสผ่านมาจากคีบอร์ด และในการตรวจสอบเงื่อนไขนั้น username
จะต้องมีค่าเท่ากับ "Mateo"
และรหัสผ่านที่กรอกเข้ามาต้องเป็น "1234"
เราใช้ตัวดำเนินการ And (&&
) เพื่อเชื่อมเงื่อนไขทั้งสองเข้าด้วยกัน
Enter username: Mateo
Enter password: 1234
Login success
Welcome Mateo
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อเรากรอกข้อมูลทั้งสองอย่างเพื่อทำให้เงื่อนไขเป็นจริง
Enter username: Mateo
Enter password: 1111
Invalid username or password
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อเราลองกรอกรหัสผ่านผิด โปรแกรมจะทำงานในบล็อคของคำสั่ง else
แทน
คำสั่ง if-elsif
คำสั่ง if-elsif
เป็นคำสั่งที่ใช้สำหรับเงื่อนแบบหลายทางเลือก ในกรณีที่เราต้องการให้โปรแกรมเรานั้นมีเงื่อนไขที่เป็นไปได้มากกว่าสองเงื่อนไข และคำสั่ง elsif
จะใช้ร่วมกับคำสั่ง if
เพื่อกำหนดเงื่อนไขตั้งแต่เงื่อนไขที่สองเป็นต้นไป
if exp1
statement1
elsif exp2
statement2
elsif exp3
statement3
else
statement
end
โปรแกรมจะตรวจสอบเงื่อนไข exp1
ถ้าหากเงื่อนไขเป็นจริง โปรแกรมทำงานในบล็อคของคำสั่ง if และข้ามการตรวจสอบเงื่อนไขที่เหลือทั้งหมด หากเงื่อนไขจากคำสั่ง if
ไม่เป็นจริง โปรแกรมจะตรวจสอบเงื่อนไขต่อไปคือ exp2
และถ้าหากเงื่อนไขเป็นจริง โปรแกรมจะทำงานในบล็อคของคำสั่ง elsif
และถ้าหากเงื่อนไขยังไม่เป็นจริง โปรแกรมจะตรวจสอบเงื่อนไขต่อไป exp3
และทำเช่นนี้จนกว่าจะพบเงื่อนไขที่เป็นจริงเพื่อที่จะทำงาน ซึ่งเราสามารถเชื่อมต่อคำสั่ง elsif
เท่าไหร่ก็ได้ตามที่ต้องการ สุดท้าย คุณสามารถใช้คำสั่ง else
เพื่อให้โปรแกรมทำงานในกรณีที่ไม่มีเงื่อนไขไหนที่เป็นจริงเลย
ต่อไปเป็นตัวอย่างการใช้งานคำสั่ง if-elsif
ในการตรวจสอบว่าตัวเลขในตัวแปรนั้นเป็นจำนวนจริงบวก ลบ หรือศูนย์
n = -3
if n > 0
puts "n is positive"
elsif n < 0
puts "n is negative"
elsif n == 0
puts "n is zero"
end
ในตัวอย่าง เป็นการใช้เพียงคำสั่ง if
และ elsif
เท่านั้นในการตรวจสอบ และเนื่องจากเราทราบว่ามีเพียงสามเงื่อนไขเท่านั้นที่เป็นไปได้ ดังนั้นเราสามารถใช้ร่วมกับคำสั่ง else
ได้ ซึ่งสามารถเขียนใหม่ได้เป็น
n = -3
if n > 0
puts "n is positive"
elsif n < 0
puts "n is negative"
else
puts "n is zero"
end
ซึ่งทั้งสองแบบนั้นให้ผลลัพธ์ที่เหมือนกันคือ
n is negative
ต่อไปมาดูตัวอย่างเพิ่มเติมสำหรับการใช้งานจากคำสั่งทั้งหมดที่คุณได้เรียนมา เราจะเขียนโปรแกรมสำหรับช่วยคำนวณเกรดโดยการรับคะแนนมาจากคีย์บอร์ด มันเป็นโปรแกรมที่แสดงการใช้งานคำสั่ง if
elsif
และ else
ได้ดีเลยทีเดียว และนี่เป็นโค้ดของโปรแกรม
print "Enter your score: "
score = gets.chomp.to_i
grade = nil
if score >= 0 && score <= 100
if score >= 80
grade = "A"
elsif score >= 70
grade = "B"
elsif score >= 60
grade = "C"
elsif score >= 50
grade = "D"
else
grade ="F"
end
puts "Your score is #{score}"
puts "Your grade is #{grade}"
else
puts "Invalid score value, only 0 - 100 is allowed"
end
ในตัวอย่าง คุณจะเห็นว่าเราสามารถใช้คำสั่งควบคุมเงื่อนไขซ้อนกันได้ ในตอนแรกโปรแกรมของเรารับคะแนนจากทางคีย์บอร์ดมาเก็บไว้ในตัวแปร score
if score >= 0 && score <= 100
...
else
puts "Invalid score value, only 0 - 100 is allowed"
end
และในการที่จะอนุญาติให้โปรแกรมทำงานได้ เราต้องการตรวจสอบว่าคะแนนนั้นต้องมีค่าอยู่ระหว่าง 0 - 100
เท่านั้น ไม่เช่นนั้นโปรแกรมจะแจ้งว่าใส่คะแนนไม่ถูกต้องและจบการทำงาน
if score >= 80
grade = "A"
elsif score >= 70
grade = "B"
elsif score >= 60
grade = "C"
elsif score >= 50
grade = "D"
else
grade ="F"
end
puts "Your score is #{score}"
puts "Your grade is #{grade}"
และถ้าหากเงื่อนไขเป็นจริง คะแนนอยู่ในระหว่าง 0 - 100
โปรแกรมได้เข้ามาทำงานในบล็อคของคำสั่ง if
นอกสุด และพบกับคำสั่ง if
เพื่อตรวจสอบคะแนนว่าจะได้เกรดเท่าไหร่ และสุดท้ายเป็นการแสดงผลเกรดที่ได้จากคะแนนที่ให้มา
Enter your score: 75
Your score is 75
Your grade is B
และนี่เป็นผลลัพธ์การทำงานของโปรแกรมเมื่อเรากรอกคะแนนเป็น 75
คำสั่ง Ternary if
คำสั่ง Ternary if (?:
) เป็นคำสั่งควบคุมเงื่อนไข if-else
แบบสั้นที่มีสามโอเปอแรนด์ มันใช้สำหรับตรวจสอบเงื่อนไขและคำสั่งจะส่งค่ากลับตามเงื่อนไขที่เกิดขึ้น นี่เป็นรูปแบบการใช้งาน
expression ? value1: value2
ถ้าหากเงื่อนไข expression
เป็นจริง โปรแกรมจะทำงานที่ value1
และส่งค่ากลับจากนิพจน์ดังกล่าว ไม่เช่นนั้นโปรแกรมจะทำงานและส่งค่ากลับจากนิพจน์ value2
แทน
percent = 50
message = percent < 100 ? "Downloading...": "Download completed"
puts message
ในตัวอย่าง เป็นการแสดงสถานนะของการดาวน์โหลดจากค่าเปอร์เซนต์ เนื่องจากค่าในตัวแปร percent น้อยกว่า 100
ดังนั้นการค่าที่ได้จากคำสั่งจึงเป็น "Downloading..."
ถ้าหากคุณสังเกต จะเห็นว่าเราสามารถเขียนโปรแกรมดังกล่าวโดยการใช้คำสั่ง if-else
ได้เช่นกัน แต่สิ่งที่แตกต่างกันคือการใช้คำสั่ง Ternary if จะสั้นและกระทัดรัดกว่ามาก
percent = 50
message = nil
if percent < 100
message = "Downloading..."
else
message = "Download completed"
end
puts message
คำสั่ง unless
คำสั่ง unless
นั้นกำหนดเงื่อนไขให้โปรแกรมทำงานในบล็อคของคำสั่งยกเว้นแต่ว่าเงื่อนไขจะเป็นจริง หรือกล่าวอีกนัยหนึ่งโปรแกรมจะทำงานเมื่อเงื่อนไขเป็นเท็จนั่นเอง ซึ่งมันเป็นคำสั่งที่ตรงข้ามกับคำสั่ง if
ที่จะทำงานเมื่อเงื่อนไขเป็นจริง มาดูตัวอย่างการใช้งาน
x = 1
y = 3
unless x == y
puts "x is not equal to y"
end
ในตัวอย่าง เราได้ประกาศสองตัวแปรคือ x
และ y
และกำหนดค่าที่ไม่เท่ากันให้กับตัวแปร ซึ่งในโปรแกรมนั้นมีหมายความว่าให้แสดงผล ยกเว้นแต่ว่า x
มีค่าเท่ากับ y
และเนื่องจาก x == y
นั้นไม่เป็นจริง ดังนั้นโปรแกรมทำงานในบล็อคของคำสั่ง unless
x = 1
y = 3
unless x == y
puts "x is not equal to y"
else
puts "x equal to y"
end
นอกจากนี้ เราสามารถใช้งานคำสั่ง else
ร่วมกับคำสั่ง unless
ได้ ซึ่งโปรแกรมจะทำงานในบล็อคคำสั่ง else
ถ้าหากเงื่อนไขเป็นจริง แต่โปรดจำไว้ว่าคุณไม่สามารถใช้งานคำสั่ง elsif
ร่วมกับคำสั่ง unless
ได้
# equal to unless
if not expression
statements
end
อย่างที่เราได้บอกไปว่าคำสั่ง unless
นั้นทำงานเมื่อเงื่อนไขเป็นเท็จ ซึ่งตรงกันข้ามกับคำสั่ง if
นั่นหมายความว่าจริงๆ แล้วคุณสามารถใช้คำสั่ง if
โดยการกลับเงื่อนไขด้วยตัวดำเนินการตรรกศาสตร์ Not แทนได้ อย่างไรก็ตาม คำสั่ง unless
มีไว้เพื่ออำนวยความสะดวกจากสถานการณ์ดังกล่าว
Modifier if
Modifier if เป็นคำสั่งควบคุมการทำงานของบรรทัดคำสั่งของโปรแกรม โดยจะใส่ไว้ด้านหลังสุดของคำสั่ง การทำงานนั้นจะเหมือนกับคำสั่ง if
ถ้าหากเงื่อนเป็นจริง โค้ดในบรรทัดที่วางคำสั่งนี้ไว้จะทำงาน นี่เป็นตัวอย่างการใช้งาน
name = "Mateo"
puts "Name is too long" if name.length >= 5
puts "Hello #{name}"
ในตัวอย่างเป็นโปรแกรมแสดงชื่อในตัวแปร name
ออกทางหน้าจอ อย่างไรก็ตามก่อนการแสดงชื่อนั้นถ้าหากความยาวของชื่อมากกว่า 5 ตัวอักษร เราจะแสดงข้อความแจ้งว่าชื่อยาวเกินไปด้วย
Name is too long
Hello Mateo
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Modifier unless
Modifier unless เป็นคำสั่งควบคุมการทำงานของบรรทัดคำสั่งของโปรแกรมเช่นเดียวกับคำสั่ง Modifier if แต่มันจะทำงานเมื่อเงื่อนไขไม่เป็นจริง มาดูตัวอย่างการใช้งาน
basket = ["Apple", "Orange", "Banana", "Peach"]
puts "There are #{basket.length} fruits left" unless basket.length >= 5
puts "List of Fruit"
basket.each_with_index { |item, index|
puts "#{index + 1}. #{item}"
}
ในตัวอย่าง เป็นโปรแกรมแสดงผลไม้ที่มีทั้งหมดในตัวแปรอาเรย์ basket
อย่างไรก็ตาม ก่อนแสดงผลนั้นถ้าหากว่าโปรแกรมมีผลลไม้น้อยกว่า 5 ผล จะมีการแจ้งเตือนว่ามีผลไม้เหลือเท่าไหร่ด้วย
เมธอด each_with_index
ใช้สำหรับวนอ่านข้อมูลในอาเรย์โดยค่าที่จะถูกส่งมาในบล้อคคือชื่อผลไม้และ index ในอาเรย์
There are 4 fruits left
List of Fruit
1. Apple
2. Orange
3. Banana
4. Peach
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
คำสั่ง case when
คำสั่ง case when
เป็นคำสั่งควบคุมการทำงานของโปรแกรมเหมือนกับคำสั่งอื่นๆ แต่มันถูกออกแบบมาให้ใช้กับเงื่อนไขง่ายๆ และไม่ซับซ้อน เช่นการตรวจสอบความเท่ากับของข้อมูล ดังนั้นคำสั่ง case ให้เราสามารถกำหนดเงื่อนไขเพียงใช้ค่าคงที่ได้ นี่เป็นตัวอย่างการใช้งาน
a = 1
case a
when 1
puts "one"
when 2
puts "two"
else
puts "unknown"
end
ในตัวอย่าง เป็นการใช้คำสั่ง case
เพื่อตรวจสอบค่าในตัวแปรโดยการระบุตัวแปรเข้าไปในคำสั่ง ในกรณีนี้ เราได้ระบุเงื่อนไขเป็นค่าคงที่ 1
และ 2
สิ่งที่โปรแกรมทำคือจะทำการเปรียบเทียบค่าเหล่านี้ว่าเท่ากันหรือไม่ ถ้าหากเท่ากันโปรแกรมจะทำงานในบล็อคของคำสั่ง when
และคุณสามารถใช้คำสั่ง else
ได้ในกรณีที่การตรวจสอบค่าไม่ตรงกับเงื่อนไขใดๆ เลย
code = 1
case code
when 200
puts "success"
when 301, 302
puts "redirect"
when 404
puts "not found"
else
puts "unknown status"
end
นอกจากนี้ ในการใช้คำสั่ง case
คุณยังสามารถกำหนดหลายเงื่อนไขเพื่อเปรียบเทียบได้ โดยการใช้เครื่องหมายคอมมา (,
) คั่นระหว่างแต่ละค่า ดังนั้นในคำสั่ง when 301, 302
นั้นหมายความว่าค่าในตัวแปร code
ต้องเท่ากับ 301
หรือ 302
อย่างที่เราได้บอกไปว่า คำสั่ง case
นั้นมักจะใช้กับเพื่อเปรียบเทียบเงื่อนไขง่ายๆ และไม่ซับซ้อน แต่อย่างไรก็ตาม คุณสามารถใช้งานคำสั่ง case
เหมือนกับคำสั่ง if-elsif
ได้
a = 3
case
when a == 1 || a == 2
puts "one, two"
when a == 3
puts "three"
else
puts "unknown"
end
ในกรณีนี้ คุณไม่จำเป็นต้องระบุค่าหลังจากคำสั่ง case
แต่ในคำสั่งกำหนดเงื่อนไข when
แค่ทำให้นิพจน์นั้นเป็นจริง เพื่อทำให้โปรแกรมทำงานในเงื่อนไขดังกล่าว
สำหรับการใช้งานกับ String นอกจากจะใช้เปรียบเทียบค่าแล้ว คุณยังสามารถกำหนดเงื่อนไขเป็น Regular Expression ได้ ถ้าหากคุณทำเช่นนั้น โปรแกรมจะทำการตรวจสอบด้วย Regular Expression แทน
a = "marcuscode"
case a
when /^mar/
puts "start with mar"
when /^jar/
puts "start with jar"
else
puts "no pattern matched"
end
และนี่ก็เป็นตัวอย่างการใช้งานทั้งหมดสำหรับคำสั่ง case when
และอย่างที่คุณเห็นเรามักจะใช้คำสั่ง case when
กับเงื่อนไขที่ง่ายและไม่ซับซ้อน เพราะทำให้โค้ดของเราสามารถอ่านได้ง่ายขึ้นในบางกรณี
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับคำสั่งควบคุมเงื่อนไข ซึ่งมันสามารถช่วยให้โปรแกรมของเราสามารถตัดสินใจและทำงานภายใต้เงื่อนไขที่กำหนดได้