วิธีใช้:นิพจน์เงื่อนไข

หน้านี้จะอธิบายวิธีการใช้ฟังก์ชันตัวแจงส่วนต่างๆ เพื่อแสดงผลลัพธ์ที่แตกต่างกันตามเงื่อนไขที่ตรวจพบในหน้าหรือแม่แบบ.
ต่อไปนี้เป็นสรุปโดยย่อของฟังก์ชันเหล่านี้ในแง่ของวิธีการจัดการอินพุต (ชื่อฟังก์ชันมีลิงก์ไปยังคำอธิบายโดยละเอียดเพิ่มเติมซึ่งพบได้ด้านล่างในหน้านี้):- #if ตรวจสอบค่าความจริงของสตริง- #ifeq ตรวจสอบว่าสตริงหรือตัวเลขสองตัวเท่ากันหรือไม่- #switch เปรียบเทียบสตริงกับชุดค่าที่เป็นไปได้- #expr ประเมินการแสดงออกทางคณิตศาสตร์- #ifexpr ประเมินนิพจน์ทางคณิตศาสตร์และดำเนินการกับค่าความจริงของผลลัพธ์- #iferror ตรวจสอบว่าสตริง (มักจะเป็นนิพจน์ภายใน #expr) ทำให้เกิดข้อผิดพลาดของตัวแยกวิเคราะห์- #ifexist ตรวจสอบว่าหน้าที่มีชื่อเรื่องนั้นมีอยู่ในวิกิหรือไม่ (รวมถึงไฟล์รูปภาพ/สื่อ)
สำหรับการใช้งานฟังก์ชันเหล่านี้ในตาราง โปรดดูที่วิธีใช้:ผังเงื่อนไข

**สาระสำคัญ**
รูปแบบพื้นฐาน (และการใช้งาน) ของฟังก์ชันแต่ละอย่างมีดังนี้:-  สตริงทดสอบ | ค่าถ้าเป็นจริง | ค่าถ้าเป็นเท็จ 
*: (เลือกค่าใดค่าหนึ่งจากสองค่าขึ้นอยู่กับว่าสตริงทดสอบนั้นเป็นจริงหรือเท็จ)-  สตริง 1 | สตริง 2 | ค่าถ้าเท่ากัน | ค่าถ้าไม่เท่ากัน 
*: (เลือกค่าใดค่าหนึ่งจากสองค่าโดยพิจารณาว่าสตริงทั้งสองเท่ากันหรือไม่ โดยจะทำการเปรียบเทียบเชิงตัวเลขทุกครั้งที่ทำได้)-  สตริงทดสอบ | case1 = ค่าสำหรับเคส 1 | ... | default 
*: (เลือกระหว่างทางเลือกหลายทางโดยอิงจากค่าของสตริงทดสอบ ซึ่งโดยพื้นฐานแล้วจะเทียบเท่ากับชุดการทดสอบ #ifeq แต่มีประสิทธิภาพมากกว่ามาก)-  การแสดงออก | ค่าถ้าเป็นจริง | ค่าถ้าเป็นเท็จ 
*: (เลือกค่าใดค่าหนึ่งจากสองค่าโดยอิงตามค่าความจริงของนิพจน์ที่ประเมินแล้ว)-  สตริงทดสอบ | ค่าถ้าเกิดข้อผิดพลาด | ค่าถ้าไม่มีข้อผิดพลาด 
*: (เลือกค่าใดค่าหนึ่งจากสองค่าขึ้นอยู่กับว่าสตริงทดสอบสร้างข้อผิดพลาดของตัวแยกวิเคราะห์หรือไม่)-  ชื่อหน้า | ค่าถ้ามีอยู่ | ค่าถ้าไม่มีอยู่ 
*: (เลือกค่าใดค่าหนึ่งจากสองค่าขึ้นอยู่กับการมีอยู่ของหน้าที่มีชื่อเรื่องที่กำหนดไว้)
โปรดทราบว่าค่า "จริง" จะถูกตีความแตกต่างกันมากโดยฟังก์ชัน #if ที่ใช้สตริงเป็นฐานและฟังก์ชัน #expr และ #ifexpr ที่เน้นตัวเลข สตริงจะถือว่าเป็นจริงหากมีอักขระที่ไม่ใช่ช่องว่างอย่างน้อยหนึ่งตัว (ดังนั้น ตัวอย่างเช่น ฟังก์ชัน #if จะตีความสตริง "0" และ "เท็จ" ว่าเป็นค่าจริง ไม่ใช่เท็จ) สตริงใดๆ ที่มีเฉพาะช่องว่างหรือไม่มีอักขระเลยจะถือว่าเป็นเท็จ (ดังนั้น #if จึงตีความ " " และ "" รวมถึงพารามิเตอร์ที่ไม่ได้กำหนดเป็นค่าเท็จ) ในทางกลับกัน ในนิพจน์ที่ประเมินโดย #expr และ #ifexpr ตัวดำเนินการบูลีน เช่น and, or และ not จะตีความค่าตัวเลข 0 เป็นเท็จ และตัวเลขอื่นๆ เป็นจริง ในแง่ของเอาต์พุต การดำเนินการบูลีนจะส่งคืน 1 สำหรับค่าจริง และส่งคืน 0 สำหรับค่าเท็จ (และตัวดำเนินการตัวเลขจะถือว่าเป็นตัวเลขทั่วไป) สตริงที่ไม่ใช่ตัวเลข (รวมถึงการใช้งานสตริงว่างและพารามิเตอร์ที่ไม่ได้กำหนดส่วนใหญ่) จะทำให้ #expr และ #ifexpr รายงานข้อผิดพลาด
โปรดทราบด้วยว่าช่องว่างนำหน้าและต่อท้ายทั้งหมดในแต่ละส่วนของการเรียกใช้ฟังก์ชันตัววิเคราะห์จะถูกลบออก ทำให้สามารถจัดรูปแบบการเรียกใช้ด้วยช่องว่างเพิ่มเติมเพื่อให้สามารถอ่านได้ดีขึ้น ตัวอย่างเช่น:
ที่นี่ มีเพียงช่องว่างในสตริง "ค่าพารามิเตอร์ xx เป็นจริง" และ "ค่าพารามิเตอร์ xx เป็นเท็จ" เท่านั้นที่มีความสำคัญ ช่องว่างอื่นๆ ทั้งหมดจะถูกละเว้น ดังนั้น โครงสร้างด้านบนจึงเทียบเท่ากับการเรียกต่อไปนี้:
ในทุกส่วนของการเรียกฟังก์ชันตัววิเคราะห์ที่คาดว่าจะมีสตริง สามารถใช้สตริงตัวอักษร การเรียกแม่แบบการเรียกฟังก์ชันตัววิเคราะห์ หรือ เมจิกเวิร์ดอื่นๆ

**การใช้ #if**
 ดูเพิ่ม: แม่แบบ if
ฟังก์ชัน #if จะเลือกทางเลือกหนึ่งจากสองทางเลือกตามค่าความจริงของสตริงทดสอบ
  สตริงทดสอบ | ค่าถ้าเป็นจริง | ค่าถ้าเป็นเท็จ 
ตามที่อธิบายไว้ข้างต้น สตริงจะถือว่าเป็นจริงหากมีอักขระที่ไม่ใช่ช่องว่างอย่างน้อยหนึ่งตัว สตริงใดๆ ที่มีเฉพาะช่องว่างหรือไม่มีอักขระเลยจะถือว่าเป็นเท็จ
ค่าพารามิเตอร์ที่ไม่ได้กำหนดนั้นเป็นเรื่องยุ่งยาก: ถ้าพารามิเตอร์ตำแหน่งแรกไม่ได้ถูกกำหนดไว้ในการเรียกแม่แบบ  จะประเมินผลเป็นสตริงตัวอักษร "" (นั่นคือ สตริง 7 อักขระที่มีเครื่องหมายวงเล็บปีกกาสามชุดรอบตัวเลข 1) ซึ่งเป็นค่าจริง (ปัญหานี้เกิดขึ้นกับทั้งพารามิเตอร์ที่มีชื่อและแบบตำแหน่งพารามิเตอร์) แต่  จะประเมินผลเป็นสตริงว่าง (ค่าเท็จ) เพราะอักขระแถบแนวตั้งหรือท่อ "|" ที่ตามหลังชื่อพารามิเตอร์ทันทีจะระบุค่าเริ่มต้น (ในที่นี้คือสตริงว่างเพราะไม่มีอะไรอยู่ระหว่างท่อและวงเล็บปีกกาปิดตัวแรก) เป็นค่า "สำรอง" ที่จะใช้ถ้าพารามิเตอร์ไม่ได้ถูกกำหนด
ฟังก์ชั่นนี้ใช้ตรวจสอบได้ว่ามีการส่งพารามิเตอร์ไปยังแม่แบบที่มีค่าจริงหรือไม่
ตัวอย่าง:
การทดสอบว่าพารามิเตอร์ทั้งสองเป็นจริงหรือไม่นั้นต้องใช้ความพยายามมากกว่านี้เล็กน้อย ตัวอย่างเช่น:
}}



ทั้ง xx และ yy เป็นเท็จ
}}

โปรดทราบว่าฟังก์ชัน #if แบบซ้อนกันนี้จะกินทรัพยากรอย่างรวดเร็วมาก ในวิกิบางแห่ง แม้แต่การซ้อนกันถึง 7 ระดับก็อาจเกินขีดจำกัดทรัพยากรได้
ดูการอภิปรายของ #ifeq เพื่อดูวิธีตรวจจับว่ามีการกำหนดพารามิเตอร์หรือไม่ไม่ว่าค่าจะเป็นจริงหรือเท็จ

**การใช้ #ifeq**
 ดูเพิ่ม: แม่แบบ ifeq
ฟังก์ชัน #ifeq จะเลือกทางเลือกหนึ่งจากสองทางเลือก โดยพิจารณาว่าสตริงทดสอบสองตัวเท่ากันหรือไม่
  สตริง 1 | สตริง 2 | ค่าถ้าเท่ากัน | ค่าถ้าไม่เท่ากัน 
หากสตริงทั้งสองเป็นค่าตัวเลขที่ถูกต้อง สตริงเหล่านั้นจะถูกเปรียบเทียบเป็นตัวเลข ไม่ใช่สตริงตัวอักษร:
  →  ไม่เท่ากัน 
  →  ไม่เท่ากัน 
  →  ไม่เท่ากัน 
  →  ไม่เท่ากัน  (เลขคณิต!)
  →  ไม่เท่ากัน  (เลขคณิต!)
  →  ไม่เท่ากัน 
จากตัวอย่างที่ 4 และ 5 จะเห็นได้ว่านิพจน์ทางคณิตศาสตร์ไม่ได้ถูกประเมิน แต่จะถูกปฏิบัติเหมือนเป็นสตริงปกติ แต่ #expr สามารถนำมาใช้ประเมินนิพจน์ดังกล่าวได้
  → 
การเปรียบเทียบสตริงจะต้องคำนึงถึงตัวพิมพ์เล็ก/ใหญ่:
  →  ไม่เท่ากัน 
สำหรับการตรวจสอบโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก ให้ใช้ฟังก์ชัน  หรือ  เพื่อบังคับให้สตริงใช้ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ทั้งหมด วิธีนี้มีประโยชน์มากที่สุดเมื่อต้องจัดการกับค่าพารามิเตอร์:
  →  : 
ในตัวอย่างที่สอง ค่า "top" "Top" และ "TOP" จะให้ผลลัพธ์เป็นการจับคู่ที่ประสบความสำเร็จทั้งหมด
ฟังก์ชันตัววิเคราะห์นี้ใช้ตรวจจับว่ามีการกำหนดพารามิเตอร์แม่แบบหรือไม่ แม้ว่าจะตั้งค่าเป็นค่าเท็จก็ตาม ตัวอย่างเช่น เพื่อตรวจสอบว่ามีการส่งพารามิเตอร์ตำแหน่งแรกไปยังแม่แบบหรือไม่ (โปรดทราบว่าสตริง "+" และ "-" สามารถเป็นสตริงที่ไม่ใช่ช่องว่างสองสตริงที่แตกต่างกันได้)
 
หากให้เจาะจง นี่คือสิ่งที่โค้ดนี้สร้างขึ้นเมื่อเรียกใช้ในลักษณะต่อไปนี้:
 ชื่อแม่แบบ| → 1 ถูกกำหนดแล้ว
 ชื่อแม่แบบ|1= → 1 ถูกกำหนดแล้ว
 ชื่อแม่แบบ|1=foo → 1 ถูกกำหนดแล้ว
ดูที่ mw:วิธีใช้:ส่วนขยาย:ฟังก์ชันการแยกวิเคราะห์##ifeq สำหรับรายละเอียดเพิ่มเติม รวมถึงผลลัพธ์ที่ขัดกับสามัญสำนึกที่อาจเกิดขึ้นเนื่องจากวิธีการนำฟังก์ชันนี้ไปใช้

**การใช้ #switch**
ฟังก์ชัน #switch เลือกทางเลือกต่างๆ จากหลายทางเลือกโดยอิงจากสตริงอินพุต
  สตริงทดสอบ | case1 = ค่าสำหรับเคส 1 | ... | default 
เทียบเท่ากับคำสั่งสวิตช์ที่พบในภาษาการเขียนโปรแกรมบางภาษา ถือเป็นวิธีที่สะดวกในการจัดการกับหลายกรณีโดยไม่ต้องเชื่อมโยงฟังก์ชัน #if จำนวนมากเข้าด้วยกัน อย่างไรก็ตาม โปรดทราบว่าประสิทธิภาพจะลดลงหากมีทางเลือกมากกว่า 100 รายการ การวางค่าทั่วไปไว้ก่อนหน้านี้ในรายการกรณีอาจทำให้ฟังก์ชันทำงานได้เร็วขึ้นอย่างมาก
สำหรับแต่ละกรณี เครื่องหมายเท่ากับ "=" ทั้งสองด้านสามารถเป็นสตริงธรรมดา การเรียกใช้ฟังก์ชันตัววิเคราะห์ (รวมถึง #expr เพื่อประเมินนิพจน์) หรือการเรียกใช้แม่แบบ หากกรณีใดไม่เกี่ยวข้องกับค่า (กล่าวคือ ไม่มีการใช้เครื่องหมายเท่ากับ) ค่าที่ระบุถัดไปจะถูกใช้ วิธีนี้ช่วยให้กรณีต่างๆ สามารถแบ่งปันค่าเดียวกันได้โดยไม่ต้องระบุค่าซ้ำๆ (ดังที่เห็นในตัวอย่างด้านล่าง)
หากไม่พบตัวพิมพ์ที่ตรงกัน ค่าเริ่มต้นจะถูกใช้ โดยปกติจะระบุค่านี้ไว้เป็นค่าสุดท้ายโดยไม่มีค่า "ตัวพิมพ์" ที่เกี่ยวข้อง ดังที่เห็นในสรุปไวยากรณ์ด้านบน แต่สามารถระบุค่านี้ได้ทุกเมื่อหลังจากสตริงทดสอบ หากใช้โครงสร้าง | #default = ค่า (ดูตัวอย่างที่สองด้านล่าง) หากไม่ได้ระบุค่าเริ่มต้นด้วยวิธีใดวิธีหนึ่ง สตริงว่างจะถูกส่งคืนเมื่อไม่มีตัวพิมพ์ที่ตรงกับสตริงอินพุต
ฟังก์ชันนี้ได้รับประโยชน์โดยเฉพาะจากการตั้งค่าในรูปแบบหลายบรรทัด
ที่นี่ หากค่าของพารามิเตอร์แม่แบบ x เป็นสตริง "1" ผลลัพธ์จะเป็นสตริง "หนึ่ง" หากเป็น "2" จะเป็น "สอง" เป็นต้น แต่สำหรับค่าใดๆ ก็ตาม เช่น "5" "6" หรือ "7" ผลลัพธ์จะเป็นสตริง "ในช่วง 5 ถึง 7" สำหรับค่าอื่นๆ หรือค่าว่าง ผลลัพธ์จะส่งคืนสตริง "อื่น"
ตัวอย่างต่อไปนี้เทียบเท่ากับตัวอย่างก่อนหน้านี้:
ดูที่วิธีใช้:สลับฟังก์ชั่นการแยกวิเคราะห์ สำหรับคำอธิบายฉบับเต็มและตัวอย่างเพิ่มเติม

**การใช้ #expr**
ฟังก์ชัน #expr ใช้ในการประเมินนิพจน์ทางคณิตศาสตร์ (รวมถึงนิพจน์บูลีน) แม้ว่าจะไม่ใช่ฟังก์ชันแบบมีเงื่อนไข แต่ก็มักใช้ภายในฟังก์ชันเหล่านี้ ดังนั้นจึงมีคำอธิบายโดยย่อไว้ที่นี่ โปรดดูรายละเอียดเพิ่มเติมใน  Manual:Expr parser function syntax
  นิพจน์ | ค่าถ้าเป็นจริง | ค่าถ้าเป็นเท็จ 
ตัวอย่าง:
 
 
ตามที่อธิบายไว้ข้างต้น สำหรับวัตถุประสงค์ของฟังก์ชันนี้ 0 ถือเป็นเท็จ และค่าตัวเลขอื่น ๆ ถือเป็นจริง
  →  ไม่ใช่ 
  →  ไม่ใช่ 
  →  ไม่ใช่ 
นิพจน์อินพุตที่ว่างเปล่าจะประเมินผลเป็นเท็จ
  →  ไม่ใช่ 
แต่อินพุตที่ไม่ถูกต้อง รวมถึงอินพุตที่มีสตริงที่ไม่ใช่ตัวเลข จะแสดงข้อความแสดงข้อผิดพลาด
  →  ไม่ใช่ 
  →  ไม่ใช่ 
ภายใต้สถานการณ์ปกติ ฟังก์ชัน #ifexpr จะเทียบเท่ากับการใช้โครงสร้างต่อไปนี้กับ #ifeq และ #expr (โปรดสังเกตการกลับด้านของค่าเอาต์พุต "true" และ "false" เนื่องจากเรากำลังเปรียบเทียบผลลัพธ์อินพุตกับ "0"):
  → 
ค่าเอาต์พุตทั้งสองค่าหรือค่าใดค่าหนึ่งอาจถูกละเว้น (หรือปล่อยว่างไว้) ในกรณีนี้ (โดยถือว่าเข้าถึงสาขาที่"หายไป" ของคอนสตรัคต์) จะไม่มีผลลัพธ์เอาต์พุตใดๆ
 →  yes 
 →  no 
ดูที่mw:วิธีใช้:ส่วนขยาย:ฟังก์ชันการแยกวิเคราะห์##ifexpr สำหรับรายละเอียดเพิ่มเติม รวมถึงผลลัพธ์ที่ขัดกับสามัญสำนึกที่อาจเกิดขึ้นเนื่องมาจากวิธีการนำฟังก์ชันนี้ไปใช้

**การใช้ #iferror**
ฟังก์ชัน #iferror จะเลือกทางเลือกใดทางเลือกหนึ่งจากสองทางเลือก ขึ้นอยู่กับว่าอินพุตของฟังก์ชันนี้จะทำให้เกิดข้อผิดพลาดหรือไม่
  สตริงทดสอบ | ค่าถ้าเกิดข้อผิดพลาด | ค่าถ้าถูกต้อง 
โดยทั่วไปสตริงทดสอบจะเป็นการเรียก #expr หรือฟังก์ชันตัวแยกวิเคราะห์อื่นๆ แต่สามารถเป็นข้อความธรรมดาหรือการเรียกแม่แบบก็ได้ ซึ่งในกรณีนี้ ข้อผิดพลาดจะถูกทริกเกอร์โดยวัตถุ HTML ใดๆ ที่มี class="error" หรือข้อผิดพลาดแม่แบบต่างๆ เช่น ลูปและการเรียกซ้ำ หรือข้อผิดพลาดตัวแยกวิเคราะห์ "failsoft" อื่นๆ
สามารถละเว้นค่าส่งคืนหนึ่งค่าหรือทั้งสองค่าได้ หากละเว้น ค่าถ้าถูกต้อง สตริงทดสอบจะถูกส่งคืนหากไม่ผิดพลาด หากละเว้น ค่าหากมีข้อผิดพลาด ด้วย สตริงว่างจะถูกส่งคืนเมื่อมีข้อผิดพลาด:
  → 
  → 
  → 
  → 
  → 
  → 
  → 
  ถูกต้อง  →  ถูกต้อง 

**การใช้ #ifexist**
ฟังก์ชัน #ifexist จะเลือกทางเลือกใดทางเลือกหนึ่งจากสองทางเลือก ขึ้นอยู่กับว่ามีหน้าที่อยู่ในชื่อที่ระบุหรือไม่
  ชื่อหน้า | ค่าถ้าหน้ามีอยู่ | ค่าถ้าหน้าไม่มีอยู่ 
หน้าสามารถอยู่ในเนมสเปซใดก็ได้ ดังนั้นจึงสามารถเป็นบทความหรือ "หน้าเนื้อหา" รูปภาพหรือไฟล์สื่ออื่น ๆ หมวดหมู่ ฯลฯ เนื้อหาจริงของหน้านั้นไม่เกี่ยวข้อง ดังนั้นอาจว่างเปล่าหรือเป็นการเปลี่ยนทาง ชื่อเรื่องที่ส่งผลให้เกิดลิงก์สีแดงจะไม่มีอยู่ (และเช่นเดียวกับลิงก์สีแดง การตรวจสอบการมีอยู่ของหน้าที่ไม่มีอยู่จะทำให้ชื่อเรื่องปรากฏบนพิเศษ:หน้าที่ต้องการ)
การตรวจสอบนั้นรวดเร็วมาก แต่ถูกจำกัดไว้ที่ 500 อินสแตนซ์ต่อหน้า เนื่องจากถือว่าเป็น "ฟังก์ชันการแยกวิเคราะห์ที่มีราคาแพง" (อย่างไรก็ตาม การตรวจสอบชื่อเรื่องเดียวกันหลายครั้งในหน้าเดียวกันจะไม่นับเป็นหลายอินสแตนซ์ เนื่องจากผลลัพธ์ของการตรวจสอบครั้งแรกจะถูกแคชและนำมาใช้ซ้ำสำหรับการตรวจสอบครั้งต่อๆ ไป)

**การตรวจสอบพารามิเตอร์แม่แบบ**
สำนวนทั่วไปที่พบในการเขียนโค้ดแม่แบบคือ "ห่วงโซ่ของค่าสำรอง" ดังที่เห็นในตัวอย่างนี้:
 
ที่นี่ หากกำหนดพารามิเตอร์ตำแหน่งแรกแล้ว ระบบจะใช้ค่าของพารามิเตอร์นั้น หากไม่ได้กำหนดไว้ ระบบจะตรวจสอบพารามิเตอร์ที่มีชื่อว่า url และหากกำหนดไว้ ระบบจะใช้ค่าของพารามิเตอร์นั้น หากไม่ได้กำหนดพารามิเตอร์ตำแหน่งแรกและ url ไว้ ระบบจะตรวจสอบพารามิเตอร์ที่มีชื่อว่า URL หากกำหนดไว้ ระบบจะใช้ค่าของพารามิเตอร์นั้น หากไม่ได้กำหนดไว้ ระบบจะใช้สตริงว่าง
ปัญหาคือ โครงสร้างนี้มักจะถูกตีความว่าเทียบเท่ากับ:
 
และมันไม่ใช่ ความแตกต่างก็คือโครงสร้างแรกซึ่งใช้ค่าเริ่มต้นนั้นขึ้นอยู่กับ ความชัดเจน ของพารามิเตอร์ ในขณะที่โครงสร้างที่สองซึ่งใช้ฟังก์ชัน #if นั้นขึ้นอยู่กับ ค่าความจริง ของพารามิเตอร์ ซึ่งเป็นสองสิ่งที่แตกต่างกันมาก
หากพารามิเตอร์ใดๆ ในเชนของค่าสำรอง (ในคอนสตรัคต์แรก) ถูกตั้งค่าเป็นค่าว่าง (หรือช่องว่างเท่านั้น) ในการเรียกแม่แบบ ค่าว่างนั้นจะถูกใช้แทนการ "สำรอง" ไปยังพารามิเตอร์ถัดไปในเชน ตัวอย่างเช่น หากแม่แบบถูกเรียกด้วยวิธีใดวิธีหนึ่งจากสองวิธีนี้:
 url=https://example.com/
 
พารามิเตอร์ตำแหน่งแรก ได้ถูกกำหนดแล้ว: ค่าของพารามิเตอร์นี้คือสตริงว่าง ดังนั้น ค่าของ url จึงไม่เกี่ยวข้อง แม่แบบไม่เคย "เข้าถึง" ค่าดังกล่าว
ในทำนองเดียวกัน ถ้ามีการเรียกใช้แม่แบบในลักษณะนี้:
 URL=https://example.com/
ค่าว่างของ url จะถูกใช้แทนค่าของ URL
ตัวอย่างเหล่านี้อาจดูประดิษฐ์ขึ้นเล็กน้อย เนื่องจากตัวอย่างเหล่านี้อาศัยการเรียกใช้แม่แบบ "ในทางที่ผิด" แต่การพบกรณีที่ปัญหาเหล่านี้เกิดขึ้นจากการเรียกใช้แม่แบบที่สมเหตุสมผลนั้นเป็นเรื่องที่น่าแปลกใจมาก (โดยเฉพาะอย่างยิ่งหากมี "ลำดับชั้น" ของแม่แบบ ซึ่งแม่แบบหนึ่งเรียกใช้แม่แบบอื่นโดยส่งค่าพารามิเตอร์ของแม่แบบนั้นไปยังพารามิเตอร์ของแม่แบบ "ระดับล่าง" ซึ่งในกรณีดังกล่าว มักจะจบลงด้วยค่าพารามิเตอร์ที่กำหนดไว้แต่ว่างเปล่า)
เนื่องจากปัญหาเช่นนี้ บางครั้งผู้เขียนโค้ดแม่แบบจึงพบว่าจำเป็นต้องแยกความแตกต่างระหว่างชุดค่าผสมที่แตกต่างกันของสามสถานะ ได้แก่ กำหนดและไม่ว่างเปล่า กำหนดและว่างเปล่า และไม่ถูกกำหนด ซึ่งสามารถทำได้ด้วยวิธีต่อไปนี้ (ใช้พารามิเตอร์ตำแหน่งแรกที่นี่ แต่พารามิเตอร์ที่มีชื่อจะทำงานในลักษณะเดียวกัน)
 แบบกำหนดและไม่ว่างเปล่า   เทียบกับ   แบบไม่ได้กำหนด หรือ แบบกำหนดและว่างเปล่า
 
 กำหนดไว้ (ไม่ว่าจะไม่ว่างเปล่าหรือว่างเปล่า)   เทียบกับ   ไม่ได้กำหนดไว้
 ต่อไปนี้เป็นทางเลือกเทียบเท่า:
::
โปรดทราบว่าอักขระ + และ - สามารถเป็นอักขระที่ไม่ใช่ช่องว่างได้สองตัว นอกจากนี้ หากคุณต้องการใช้ค่าของพารามิเตอร์เมื่อกำหนด และค่าอื่นๆ เมื่อไม่ได้กำหนด คุณสามารถใช้โครงสร้าง "สำรอง" ที่ง่ายกว่าได้:
 ค่าอื่น ๆ}
 กำหนดและไม่ว่างเปล่า   เทียบกับ   กำหนดและว่างเปล่า   เทียบกับ   ไม่ได้กำหนดไว้
 ต่อไปนี้เป็นทางเลือกเทียบเท่า:
:
หากคุณไม่สนใจเกี่ยวกับกรณีที่ไม่ได้กำหนด คุณสามารถลบ "|1 undefined" ออกจากทั้งสองตัวอย่างได้

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

**ดูเพิ่ม**
 วิธีใช้:ผังเงื่อนไข- mw:Help:Extension:ParserFunctions หน้าความช่วยเหลือที่ยาวกว่าและเชิงเทคนิคมากขึ้นที่ MediaWiki.org- เงื่อนไข (การเขียนโปรแกรมคอมพิวเตอร์)- ตัวดำเนินการเชิงสัมพันธ์- วิธีใช้:แม่แบบ และ วิกิพีเดีย:แม่แบบกระบะทรายและกรณีทดสอบ- m:Help:แม่แบบขั้นสูง- :หมวดหมู่:แม่แบบ if-then-else
นิพจน์เงื่อนไข
นิพจน์เงื่อนไข