ใช้ตรรกะแบบมีเงื่อนไขเพื่อสร้างเส้นทางการดําเนินการหลายเส้นทาง
สมมติว่าคุณมีโปรแกรมที่สร้างไฟล์สํารองตามไฟล์ในโฟลเดอร์ โปรแกรมประกอบด้วยบรรทัดของรหัสสองสามบรรทัดที่ค้นหาและบีบอัดชุดไฟล์ จะเกิดอะไรขึ้นถ้าคุณตัดสินใจว่าคุณต้องการเพิ่มตรรกะที่สร้างไฟล์สํารองข้อมูลเฉพาะเมื่อไม่ได้สํารองข้อมูลในวันนั้น? โปรแกรมจะต้องมีวิธีการตรวจสอบสภาพนั้น (มีการสํารองข้อมูลเรียบร้อยแล้ว), และจากนั้นทําสิ่งที่แตกต่างกันขึ้นอยู่กับว่าเงื่อนไขเป็นจริง (ถ้ามีไฟล์สํารองสําหรับวันนั้นอยู่อย่าเรียกใช้การสํารองข้อมูล)
สร้างสาขาโค้ดโดยใช้โครงสร้าง if
โครงสร้าง if จะประเมินนิพจน์บูลีน ถ้านิพจน์ประเมินเป็น trueโปรแกรมจะเรียกใช้สาขาเฉพาะของโค้ด นี่คือไวยากรณ์ของโครงสร้าง if มีลักษณะดังนี้:
if <condition> then <expression>
ตัวอย่างรหัสที่จับต้องได้มากขึ้นมีลักษณะดังตัวอย่างนี้:
let age = 66
if age > 65
then printfn "Senior citizen"
กําหนดสาขาสํารองโดยใช้คําสั่งอื่น
เมื่อคําสั่ง if ประเมินเป็น falseให้ใช้ส่วนคําสั่ง else กับรายการ if เพื่อรันสาขาอื่นของรหัส
นี่คือวิธีที่คุณสามารถใช้ส่วนคําสั่ง else:
let age = 66
if age > 65
then printfn "Senior citizen"
else printfn "Citizen"
ใช้โครงสร้าง if เป็นนิพจน์
จนถึงตอนนี้ คุณได้เห็นว่าคุณสามารถใช้ if และ else เพื่อสร้างสาขาอื่นในโค้ดได้อย่างไร เมื่อรหัสเป็นไปตามสาขาอื่น จะสร้างผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับว่าเงื่อนไขบูลีนประเมินเป็น true หรือ false สิ่งที่คุณอาจไม่ทราบ คือเมื่อมีการเรียกใช้นิพจน์ จะมีการผลิตค่า
หากเขียนโค้ดเช่นนี้ ผลลัพธ์จะเป็นที่ชัดเจน:
let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message
ในกรณีนี้ if และ else จะทํางานเหมือนกับนิพจน์ ternary มากกว่า ถ้าเงื่อนไขเป็น trueจะส่งกลับค่าหนึ่งค่า ถ้าเป็น falseจะส่งกลับค่าอื่น ในกรณีใดกรณีหนึ่ง ค่าจะถูกส่งกลับ ข้อเท็จจริงที่เป็นจริงสําหรับนิพจน์ if ทั้งหมด
ลองเข้ามาดูตัวอย่างโค้ดก่อนหน้านี้อีกครั้งและดูเบื้องหลัง:
let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"
ซึ่งเป็นตัวอย่างรหัสเดียวกันกับที่คุณเห็นก่อนหน้านี้ แต่ตอนนี้ if และ else อยู่ในบรรทัดเดียวกัน เนื่องจากการดําเนินการที่สําคัญของการดําเนินการ printf เกิดขึ้นในฟังก์ชัน ฟังก์ชันจึงไม่จําเป็นต้องส่งกลับค่าจริง ดังนั้น ค่าที่ส่งกลับของนิพจน์ printfn "Senior citizen" จะสร้างค่าชนิด unit
โน้ต
unit คือค่าที่ทําหน้าที่เป็นตัวแทนข้อความเมื่อไม่มีการแสดงค่าจริง คุณสามารถนึกภาพเช่น void หรือ None
อีกสิ่งหนึ่งที่ควรทราบคือ คุณไม่สามารถผสมชนิดได้
if และ else ต้องส่งคืนชนิดข้อมูลเดียวกัน หรือคุณจะได้รับข้อผิดพลาด ตัวอย่างเช่น คุณไม่สามารถเขียนโค้ดที่มีลักษณะดังตัวอย่างนี้:
let someCondition = true
let value = if someCondition then "hello" else 1 // not allowed
ในกรณีนี้ if กําหนดว่าชนิดผลลัพธ์คือ stringดังนั้น else จะไม่สามารถเปลี่ยนชนิดนั้นเป็น intได้ เพื่อให้โค้ดก่อนหน้านี้ทํางานได้ คุณต้องปรับเปลี่ยน:
let someCondition = true
let value = if someCondition then "hello" else "1" // allowed
ใช้โครงสร้างเอลลิฟ
จนถึงตอนนี้คุณได้เห็นว่า if และ else ทํางานอย่างไร
elif เป็นโครงสร้างอื่นที่คุณสามารถใช้คล้ายกับวิธีที่คุณต้องการใช้ if เช่นเดียวกับโครงสร้าง if โครงสร้างของ elif จะใช้ค่าบูลีน และควรเพิ่มทันทีหลังจาก if โครงสร้าง elif จะดําเนินการเมื่อสภาพ if ประเมินเป็น false นี่คือตัวอย่างของวิธีการใช้ elif:
let cardValue = 1
let cardDescription = if cardValue = 1 then "Ace" elif cardValue = 14 then "Ace" else "A card"
printfn "%s" cardDescription