Conditional Logic
Conditional logic allows you to specify which code should be executed depending on which conditions are met. It's a very powerful mechanism that's essential to all applications. This section will discuss several different methods of handling conditional logic: if statements and case (or switch in C#) statements.
If Statements
If statements are the simplest form of conditional logic. The process flow for an if statement is simple: If something happens or a certain condition is met, perform some action.
Here's a real-world example of an if statement: Imagine you work on an assembly line in a clock factory, and it's your job to put the clocks together. Your boss tells you, "If the hour hand is broken, throw the clock away."
Let's take a look at the syntax in VB.NET:
if (condition) Then some code end if
In C#:
if (condition) { some code }
If the condition is met, you execute the code between the if and end if lines (or { and }) . If it isn't met, you simply continue on after this section. Listing 3.6 shows some examples.
Listing 3.6 Simple If Statements
1: <%@ Page Language="VB" %> 2: 3: <script runat="server"> 4: sub Page_Load(Sender as object, e as eventargs) 5: dim MyMessage As String = "Hello" 6: dim MyBool As Boolean = True 7: 8: 'if-statement 1 9: if MyMessage = "Hello" then 10: Response.Write("True") 11: end if 12: 13: 'if-statement 2 14: if MyBool then 15: Response.Write("True") 16: end if 17: end sub 18: </script> 19: 20: <html><body> 21: 22: </body></html>
On lines 5 and 6, you declare two variables, MyMessage and MyBool. In if statement 1 (lines 911), you evaluate a simple expression: Does the string MyMessage contain the text "Hello"? If so, write "True" to the Web browser using Response.Write.
If statement 2 (lines 1416) demonstrates a shortcut; when you simply want to see if a variable is true, you can write if variable then rather than if variable = TRUE then. Conversely, when you want to determine if a variable evaluates to false, use the not keyword, such as if not variable then.
Back to the clock factory. The boss thinks the factory is wasting too much money on broken clocks, so he decides to tighten the rules a bit: "If the hour hand is broken, throw the clock away. If the minute hand is broken, fix it. If anything else is wrong, just put it in a box."
The keyword elseif (or else if in C#) allows you to provide an "or" condition, such as "Or if the minute hand is broken." The else keyword allows you to handle any other condition, such as "If anything else is wrong..." Listing 3.7 shows some examples.
Listing 3.7 If...Then...Else Statements in C#
1: <%@ Page Language="C#" %> 2: 3: <script runat="server"> 4: void Page_Load(Object Sender, EventArgs e) { 5: string MyMessage = "Hello"; 6: bool MyBool = true; 7: 8: //if-statement 3 9: if (MyMessage == "Hi" & MyBool) { 10: Response.Write(MyMessage); 11: } else if (MyMessage == "Hello") { 12: Response.Write("True"); 13: } else { 14: Response.Write("False"); 15: } 16: 17: //if-statement 4 18: if (!MyBool) Response.Write("False"); 19: } 20: </script> 21: 22: <html><body> 23: 24: </body></html>
If statement 3 (lines 915) uses the else if and else keywords to evaluate other conditions. Line 9 asks if MyMessage is "Hi" and if MyBool is true by using the & operator (AND in VB. NET). If both conditions are met, write MyMessage out to the browser. Or, if MyMessage is "Hello", write "True" out to the browsers, as shown on lines 11 and 12. Finally, if any other condition occurs, just write "False" to the browser. This allows you to provide some very complex conditional logic.
Notice how we use the double equal sign (==) in C# to evaluate equality, whereas the single equal sign would suffice in VB.NET. In C#, the single equal sign is only for assignment, not comparison.
If statement 4 (line 18) is another shorthand way of writing an if statement. You can combine the entire if statement on one line and completely omit the closing bracket or end if.
You can accomplish a lot with If statements, but there are times when it's awkward or won't accomplish exactly what you need. Enter case and switch statements.
Case and Switch Statements
Case statements, sometimes called Select statements, and switch statements are essentially the same as if statements with elseif clauses. A case statement examines one variable, and you specify the criteria of that variable with which something should occur. Let's examine the syntax in VB.NET:
Select Case variable Case option 1 code Case Else code End Select
You can specify as many cases as you want and simply use a Case Else to catch anything that doesn't meet your criteria. For example:
Select Case FirstName Case "Ringo" Response.Write("Drummer") Case "Paul" Response.Write("Not the drummer") Case Else Response.Write("Another Beetle") End Select
You can also specify multiple cases on one line. In C#, the flow is the same, but the syntax is a bit different:
switch (FirstName) { case "Ringo": Response.Write("Drummer"); break; case "Paul": Response.Write("Not the drummer"); break; default: Response.Write("Another Beetle"); break; }
The break keyword in C# is very important. If it wasn't there, the execution would continue on to the next case statement. You have to use the break statement to stop execution for a particular case.
Let's look at the factory example again. The boss now tells you that if the clock's hour, minute, or second hand is broken, throw it away. If a spring is broken, just replace it. Otherwise, put the clock in the box. The code for this would look similar to Listing 3.8.
Listing 3.8 The Clock case Statement
1: <%@ Page Language="VB" %> 2: 3: <script runat="server"> 4: sub Page_Load(Sender as object, e as eventargs) 5: dim strClockStatus As String 6: strClockStatus = "MinuteHandBroken" 7: 8: select Case strClockStatus 9: case "MinuteHandBroken", "HourHandBroken", _ 10: "SecondHandBroken" 11: Response.Write("Throw clock away") 12: case "SpringBroken" 13: Response.Write("Replace spring") 14: case else 15: Response.Write("Put clock in box") 16: end select 17: end sub 18: </script> 19: 20: <html><body> 21: 22: </body></html>
This listing prints out "Throw clock away." What does Listing 3.9 print out?
Listing 3.9 Case Statement Execution Order
1: <%@ Page Language="VB" %> 2: 3: <script runat="server"> 4: sub Page_Load(Sender as object, e as eventargs) 5: dim intAge As integer = 7 6: 7: select Case intAge 8: case "7" 9: Response.Write("That's a string!") 10: case 7 11: Response.Write("You're 7 years old.") 12: case <10 13: Response.Write("Wow, you're young!") 14: end select 15: end sub 16: </script> 17: 18: <html><body> 19: 20: </body></html>
Listing 3.9 prints out only "That's a string!" Each one of these cases is valid, but only the first one will be executed. Therefore, make sure that your cases don't overlap, or put the most specific ones on top.
One difference between the case and switch statements is that switch can only evaluate equality conditions. In other words, the less than comparison on line 12 of Listing 3.9 would not work in C#.
TIP
Do use case statements when you need to check a variable for multiple conditions.
Don't use many if statements just to check a single variable.