Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

SWITCH

The SWITCH statement provides multi-way branching based on a value, allowing clean handling of multiple conditions without nested IF statements.

Syntax

SWITCH expression
  CASE value1
    ' statements for value1
  CASE value2
    ' statements for value2
  CASE value3, value4
    ' statements for value3 or value4
  DEFAULT
    ' statements if no case matches
END SWITCH

Parameters

ElementDescription
expressionThe value to evaluate
CASE valueA specific value to match
CASE value1, value2Multiple values for the same case
DEFAULTOptional fallback when no case matches

Description

SWITCH evaluates an expression once and compares it against multiple CASE values. When a match is found, the corresponding statements execute. Unlike some languages, General Bots BASIC does not require explicit BREAK statements - execution automatically stops after the matched case.

If no case matches and a DEFAULT block exists, those statements execute. If no case matches and there’s no DEFAULT, execution continues after END SWITCH.

Examples

Role-Based Knowledge Base Selection

role = GET role

SWITCH role
  CASE "manager"
    USE KB "management"
    USE KB "reports"
  CASE "developer"
    USE KB "documentation"
    USE KB "apis"
  CASE "customer"
    USE KB "products"
    USE KB "support"
  DEFAULT
    USE KB "general"
END SWITCH
TALK "Select an option:"
TALK "1. Check balance"
TALK "2. Transfer funds"
TALK "3. View history"
TALK "4. Exit"

choice = HEAR "Enter your choice:"

SWITCH choice
  CASE "1"
    balance = GET BOT MEMORY "balance"
    TALK "Your balance is: $" + balance
  CASE "2"
    TALK "Transfer initiated..."
    ' Transfer logic here
  CASE "3"
    history = FIND "recent transactions"
    TALK history
  CASE "4"
    TALK "Goodbye!"
  DEFAULT
    TALK "Invalid option. Please choose 1-4."
END SWITCH

Multiple Values Per Case

day = GET day_of_week

SWITCH day
  CASE "monday", "tuesday", "wednesday", "thursday", "friday"
    TALK "It's a weekday. Office hours: 9am-5pm"
  CASE "saturday", "sunday"
    TALK "It's the weekend. We're closed."
  DEFAULT
    TALK "Unknown day"
END SWITCH

Language Selection

lang = GET user_language

SWITCH lang
  CASE "en"
    TALK "Hello! How can I help you today?"
  CASE "es"
    TALK "¡Hola! ¿Cómo puedo ayudarte hoy?"
  CASE "pt"
    TALK "Olá! Como posso ajudá-lo hoje?"
  CASE "fr"
    TALK "Bonjour! Comment puis-je vous aider?"
  DEFAULT
    TALK "Hello! How can I help you today?"
END SWITCH

Department Routing

department = HEAR "Which department? (sales, support, billing)"

SWITCH department
  CASE "sales"
    SET CONTEXT "You are a sales assistant. Focus on products and pricing."
    USE KB "products"
    USE KB "pricing"
  CASE "support"
    SET CONTEXT "You are a technical support agent. Help resolve issues."
    USE KB "troubleshooting"
    USE KB "faq"
  CASE "billing"
    SET CONTEXT "You are a billing specialist. Handle payment questions."
    USE KB "invoices"
    USE KB "payment_methods"
  DEFAULT
    TALK "I'll connect you with general assistance."
    USE KB "general"
END SWITCH

Status Code Handling

status = GET api_response_status

SWITCH status
  CASE "200"
    TALK "Request successful!"
  CASE "400"
    TALK "Bad request. Please check your input."
  CASE "401", "403"
    TALK "Authentication error. Please log in again."
  CASE "404"
    TALK "Resource not found."
  CASE "500", "502", "503"
    TALK "Server error. Please try again later."
  DEFAULT
    TALK "Unexpected status: " + status
END SWITCH

Numeric Ranges (Using Categories)

score = GET test_score
grade = ""

' Convert score to grade category
IF score >= 90 THEN
    grade = "A"
ELSE IF score >= 80 THEN
    grade = "B"
ELSE IF score >= 70 THEN
    grade = "C"
ELSE IF score >= 60 THEN
    grade = "D"
ELSE
    grade = "F"
END IF

SWITCH grade
  CASE "A"
    TALK "Excellent work!"
    SET BOT MEMORY "achievement", "honor_roll"
  CASE "B"
    TALK "Good job!"
  CASE "C"
    TALK "Satisfactory performance."
  CASE "D"
    TALK "You passed, but could improve."
  CASE "F"
    TALK "Please see a tutor for help."
END SWITCH

Comparison with IF-ELSE

Using IF-ELSE (Verbose)

IF color = "red" THEN
    TALK "Stop"
ELSE IF color = "yellow" THEN
    TALK "Caution"
ELSE IF color = "green" THEN
    TALK "Go"
ELSE
    TALK "Unknown signal"
END IF

Using SWITCH (Cleaner)

SWITCH color
  CASE "red"
    TALK "Stop"
  CASE "yellow"
    TALK "Caution"
  CASE "green"
    TALK "Go"
  DEFAULT
    TALK "Unknown signal"
END SWITCH

Notes

  • No fall-through: Each CASE is isolated; no BREAK needed
  • Case sensitivity: String comparisons are case-sensitive
  • Expression evaluated once: The switch expression is evaluated only once
  • DEFAULT is optional: Without DEFAULT, unmatched values skip the block
  • Multiple values: Use commas to match multiple values in one CASE

Best Practices

  1. Always include DEFAULT for robust error handling
  2. Use meaningful case values that are self-documenting
  3. Order cases logically - most common first or alphabetically
  4. Keep case blocks concise - extract complex logic to separate scripts

See Also